Controll MCP23S17 as GPIO

Revision:
2:47147538b06c
Parent:
1:2315f8a0be58
Child:
3:aaea541bdbf9
--- 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