PCA9555

Dependents:   Telliskivi2_2014 PowerManagementBoard_Rev_A_2017

Revision:
1:a6699cd826bb
Parent:
0:011622696878
Child:
2:fae93e0841f6
diff -r 011622696878 -r a6699cd826bb PCA9555.cpp
--- a/PCA9555.cpp	Mon Jul 29 20:36:59 2013 +0000
+++ b/PCA9555.cpp	Sat Aug 31 15:57:14 2013 +0000
@@ -5,16 +5,48 @@
         : _i2c(sda, scl) {
     _address = address;
 }
+
+void PCA9555::setDirection(int data) {
+    char foo[2];
+    foo[0]=0x06;
+    foo[1]=data;
+    _i2c.write(_address, foo, 2);
+    foo[0]=0x07;
+    foo[1]=data>>8;
+    _i2c.write(_address, foo, 2);
+}
  
 int PCA9555::read() {
-    char foo[2];
-    _i2c.read(_address, foo, 2);
-    return (foo[1] << 8) | foo[0];
+    char rx_array[2] = {0x00, 0x00};
+    char tx_array[1] = {0x000};
+        
+    tx_array[0] = 0;
+        
+    _i2c.write(_address, tx_array, 1);
+        
+    _i2c.read(_address, rx_array, 2);
+    return (rx_array[1] << 8) | rx_array[0];
 }
  
 void PCA9555::write(int data) {
-    char foo[2];
-    foo[0]=data;
-    foo[1]=data>>8;
-    _i2c.write(_address, foo, 2);
+    char foo[3];
+    foo[0]=0x02;
+    foo[1]=data;
+    foo[2]=data>>8;
+    _i2c.write(_address, foo, 3);
+}
+
+void PCA9555::setPin(unsigned int pinNumber) {
+    currentWriteState |= ((unsigned int)1 << pinNumber);
+    write(currentWriteState);
+}
+
+void PCA9555::clearPin(unsigned int pinNumber) {
+    currentWriteState &= ~((unsigned int)1 << pinNumber);
+    write(currentWriteState);
+}
+
+void PCA9555::togglePin(unsigned int pinNumber) {
+    currentWriteState ^= ((unsigned int)1 << pinNumber);
+    write(currentWriteState);
 }
\ No newline at end of file