Controll MCP23S17 as GPIO
Diff: ExioMcp23s17.h
- Revision:
- 2:47147538b06c
- Parent:
- 1:2315f8a0be58
- Child:
- 3:aaea541bdbf9
diff -r 2315f8a0be58 -r 47147538b06c ExioMcp23s17.h --- a/ExioMcp23s17.h Sun Oct 30 12:28:33 2016 +0000 +++ b/ExioMcp23s17.h Sun Oct 30 12:48:06 2016 +0000 @@ -19,7 +19,18 @@ typedef enum { ExioPortA, ExioPortB } ExioPort; -class ExioMcp23s17 : public MCP23S17 { +class Exio { + virtual uint8_t ioDirection(ExioPort port)=0; + virtual void ioDirection(ExioPort port, uint8_t data)=0; + virtual uint8_t ioPolarity(ExioPort port)=0; + virtual void ioPolarity(ExioPort port, uint8_t data)=0; + virtual uint8_t ioPullup(ExioPort port)=0; + virtual void ioPullup(ExioPort port, uint8_t data)=0; + virtual uint8_t readPort(ExioPort port)=0; + virtual void writePort(ExioPort port, uint8_t data)=0; +}; + +class ExioMcp23s17 : public Exio, public MCP23S17 { public: ExioMcp23s17(int hardwareaddress, SPI& spi, PinName nCs, PinName nReset) : MCP23S17(hardwareaddress, spi, nCs, nReset) {} @@ -27,21 +38,21 @@ ExioMcp23s17(int hardwareaddress, SPI& spi, PinName nCs) : MCP23S17(hardwareaddress, spi, nCs) {} - char ioDirection(ExioPort port) { return read(IODIRA_ADDR | port); } - void ioDirection(ExioPort port, char data) { write(IODIRA_ADDR | port, data); } + virtual uint8_t ioDirection(ExioPort port) { return read(IODIRA_ADDR | port); } + virtual void ioDirection(ExioPort port, uint8_t data) { write(IODIRA_ADDR | port, data); } - char ioPolarity(ExioPort port) { return read(IPOLA_ADDR | port); } - void ioPolarity(ExioPort port, char data) { write(IPOLA_ADDR | port, data); } + virtual uint8_t ioPolarity(ExioPort port) { return read(IPOLA_ADDR | port); } + virtual void ioPolarity(ExioPort port, uint8_t data) { write(IPOLA_ADDR | port, data); } - char ioPullup(ExioPort port) { return read(GPPUA_ADDR | port); } - void ioPullup(ExioPort port, char data) { write(GPPUA_ADDR | port, data); } + virtual uint8_t ioPullup(ExioPort port) { return read(GPPUA_ADDR | port); } + virtual void ioPullup(ExioPort port, uint8_t data) { write(GPPUA_ADDR | port, data); } - char readPort(ExioPort port) { return read(GPIOA_ADDR | port); } - void writePort(ExioPort port, char data) { write(GPIOA_ADDR | port, data); } + virtual uint8_t readPort(ExioPort port) { return read(GPIOA_ADDR | port); } + virtual void writePort(ExioPort port, uint8_t data) { write(GPIOA_ADDR | port, data); } protected: - void write(char reg_address, char data) { MCP23S17::write(reg_address, data); } - char read(char reg_address) { return MCP23S17::read(reg_address); } + void write(uint8_t reg_address, uint8_t data) { MCP23S17::write(reg_address, data); } + uint8_t read(uint8_t reg_address) { return MCP23S17::read(reg_address); } }; #endif //_EXIOMCP23S17_H_ \ No newline at end of file