Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
AbstractGpioExpender.h
00001 /* mbed simplified interface for GPIO expender (e.g. Microchip MCP23x17) 00002 * Copyright (c) 2014-2015 ygarcia, MIT License 00003 * 00004 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software 00005 * and associated documentation files (the "Software"), to deal in the Software without restriction, 00006 * including without limitation the rights to use, copy, modify, merge, publish, distribute, 00007 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is 00008 * furnished to do so, subject to the following conditions: 00009 * 00010 * The above copyright notice and this permission notice shall be included in all copies or 00011 * substantial portions of the Software. 00012 * 00013 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING 00014 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 00015 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 00016 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 00017 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 00018 */ 00019 #pragma once 00020 00021 #include <list> 00022 00023 #include <mbed.h> 00024 00025 #define GPA0 0 00026 #define GPA1 1 00027 #define GPA2 2 00028 #define GPA3 3 00029 #define GPA4 4 00030 #define GPA5 5 00031 #define GPA6 6 00032 #define GPA7 7 00033 #define GPB0 8 00034 #define GPB1 9 00035 #define GPB2 10 00036 #define GPB3 11 00037 #define GPB4 12 00038 #define GPB5 13 00039 #define GPB6 14 00040 #define GPB7 15 00041 #define GPIO_MAX GPB7 00042 #define GPIO_MED GPB0 00043 #define GPIO_SIZE 8 00044 00045 /** This class describes a simplified interface for GPIO expender (e.g. Microchip MCP23x17) 00046 */ 00047 class AbstractGpioExpender { 00048 public: 00049 /** Interrupt modes 00050 */ 00051 enum InterruptModes { 00052 OnChange = 0x00, 00053 OnRising = 0x01, 00054 OnFalling = 0x03 00055 }; 00056 00057 /** Pull modes 00058 */ 00059 enum PullModes { 00060 PullOff = 0x00, 00061 PullUp = 0x01, 00062 PullDown = 0x03 00063 }; 00064 00065 /** Reset the device 00066 */ 00067 virtual void reset() = 0; 00068 00069 /** Setup device interrupt mechanism 00070 * @param p_mirroring Set to 0x00 to disable INTA/B mirroring, 0x01 otherwise. Default: 0x00 00071 * @param p_openDrain Set to 0x00 for active driver output, 0x01 for opn drain output. Default: 0x00 00072 * @param p_polarity Set to 0x00 for interrupt active low, 0x01 otherwise. Default: 0x00 00073 */ 00074 virtual void setupInterrupts(const unsigned char p_mirroring = 0x00, const unsigned char p_openDrain = 0x00, const unsigned char p_polarity = 0x00) = 0; 00075 00076 /** Setup interrupt mode for a specific IO port 00077 * @param p_gpioId The IO port identifier 00078 * @param p_mode The interrupt mode 00079 * @return 0 on success, -1 on wrong parameters and -2 otherwise 00080 */ 00081 virtual int setupInterruptPin(const unsigned char p_gpioId, const InterruptModes p_mode = OnRising) = 0; 00082 00083 /** Setup pull mode for a specific IO port 00084 * @param p_gpioId The IO port identifier 00085 * @param p_mode The interrupt mode 00086 * @return 0 on success, -1 on wrong parameters and -2 otherwise 00087 */ 00088 virtual int setupPullPin(const unsigned char p_gpioId, const PullModes p_mode = PullOff) = 0; 00089 00090 /** Get interrupt information and clear it 00091 * @param p_gpioId The IO port identifier where the interrupt occured 00092 * @param p_value The logic value on the pin port where the interrupt occured 00093 * @return 0 on success, -1 on wrong parameters and -2 otherwise 00094 */ 00095 virtual int getLastInterruptPinAndValue(unsigned char * p_gpioId, unsigned char * p_value) = 0; 00096 00097 /** Attach a function to call when a interrupt occurs on the GPIOA input ports 00098 * @param p_fptr The pointer to the "C" callback function 00099 */ 00100 virtual void setIntrACallback(void (* p_fptr)(void)) = 0; 00101 00102 /** Attach a function to call when a interrupt occurs on the GPIOB input ports 00103 * @param p_fptr The pointer to the "C" callback function 00104 */ 00105 virtual void setIntrBCallback(void (* p_fptr)(void)) = 0; 00106 00107 /** Read the specific GPIO port pin 00108 * @param p_gpioId The GPIO port pin to be read 00109 * @param p_value The GPIO port pin value 00110 * @return 0 on success, -1 on wrong parameters and -2 otherwise 00111 */ 00112 virtual int read(const unsigned char p_gpioId, unsigned char * p_value) = 0; 00113 00114 /** Write value to the specific GPIO port pin 00115 * @param p_gpioId The GPIO port pin to be written 00116 * @param p_value The GPIO port pin value 00117 * @return 0 on success, -1 on wrong parameters and -2 otherwise 00118 */ 00119 virtual int write(const unsigned char p_gpioId, const unsigned char p_value) = 0; 00120 00121 virtual unsigned char createBus(const std::list<unsigned char> p_lines, const PinMode p_mode = PullNone) = 0; 00122 virtual void deleteBus(const unsigned char p_busId) = 0; 00123 virtual int busRead(const unsigned char p_busId, unsigned short * p_value) = 0; 00124 virtual int busWrite(const unsigned char p_busId, const unsigned short p_value) = 0; 00125 00126 protected: 00127 virtual bool writeRegister(const unsigned char p_registerId, const unsigned char p_value) = 0; 00128 virtual bool readRegister(const unsigned char p_registerId, unsigned char * p_value) = 0; 00129 00130 }; // End of class AbstractGpioExpender
Generated on Tue Jul 12 2022 15:16:48 by
1.7.2