MCP23009 is a general IO I2C chip . This lib provide higher level interface ( set pin value, set io modes etc ) without need to have knowledge of the I2C registers

Dependents:   MCP23009tst

Revision:
0:d829b4edd564
Child:
1:9146d773a5a3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mcp23009.h	Fri Jun 03 12:40:49 2016 +0000
@@ -0,0 +1,70 @@
+#ifndef MCP_23009_H
+#define MCP_23009_H
+#include "getVersion.h"
+
+#include "stdbool.h"
+
+
+#include "dev_interface_def.h"
+#include "I2CInterface.h" 
+#include "DACInterface.h" 
+
+#define VERSION_MCP23009_HDR "0.1"
+
+/** MCP23009 class.
+ *  Used for interfacing with a mcp23009 8 bit io expander
+ *
+ *  It has to be used with the  https://developer.mbed.org/users/wbeaumont/code/DevInterfaces/ package 
+ *  This includes the "virtual" I2CInterface class that is the interface to the I2C device 
+ *  An implementation of the I2Cinterface class for the MBED can be found at 
+ *  interrupt is not supported (yet )
+ *  
+ * (C) Wim Beaumont Universiteit Antwerpen 2016
+ *  
+ */
+class MCP23009 : public virtual getVersion {
+   
+    public:
+  
+        
+    
+
+    
+    /** Create an mcp23009 I2C interface
+     * 
+     * @param i2cinterface pointer to the   I2C interface (proto type) 
+     * @param device_address_bits The 3bit address bits of the device ( set via an analogue value on the addresspin)
+     */
+    MCP23009(I2CInterface* i2cinterface,  int device_address_bits );
+    
+      
+    /** set IO pin to input or all  , also set the pullup and  poloarity ( default = no change
+     *  @param pinnr  range  0 .. 8  if 8 all pins are set as input 
+     *  @param pullup  if positive  pull up will be enabled  0 pull up will be disabled if negative no change
+     *  @param polarity if positive polaritye will be inverted  0 std polarity  if negative no change
+     *  @return none zero in case of error 
+     */
+     int set_as_input(int pinnr,int pullup,  int polarity=-1  );   
+
+    /** set IO pin to output  
+     *  @param pinnr  range  0 ..   if 8 all pins are set as output 
+     *  @param pullup  if true pull up is enabled 
+     *  @param polarity if true inverted polarity  not yet tested if the polarity bit has effect on the output
+     *  @return none zero in case of error 
+     */
+     int set_as_output(int pinnr ,int pullup,int polarity=-1 );   
+     
+     int status( int pinnr=8);
+     int set( int pinnr , int value);
+     protected:
+    /** pointer to the I2C interface driver. */
+    I2CInterface* _i2c_interface;
+    /** The full i2c device address. */
+    int _device_address;
+      private :
+      char data[5];
+      int set_io_pin(bool input ,int pinnr,int pullup,  int polarity  );  
+      int pinmanipulation ( bool active , int pinnr );
+};
+
+#endif
\ No newline at end of file