PCA9555

Dependents:   Telliskivi2_2014 PowerManagementBoard_Rev_A_2017

Revision:
2:fae93e0841f6
Parent:
1:a6699cd826bb
Child:
3:bcda053645e2
--- a/PCA9555.cpp	Sat Aug 31 15:57:14 2013 +0000
+++ b/PCA9555.cpp	Mon Sep 09 17:30:51 2013 +0000
@@ -1,9 +1,12 @@
 #include "PCA9555.h"
-#include "mbed.h"
  
-PCA9555::PCA9555(PinName sda, PinName scl, int address)
-        : _i2c(sda, scl) {
-    _address = address;
+PCA9555::PCA9555(PinName sda, PinName scl, PinName interrupPin, int address)
+        : _irqpin(interrupPin), _i2c(sda, scl) {
+    _address = address;    
+    _irqpin.rise(this, &PCA9555::callChange);
+    _irqpin.fall(this, &PCA9555::callChange);
+    //_irqpin.attach_asserted(this, &PCA9555::callChange);
+    //_irqpin.attach_deasserted(this, &PCA9555::callChange);
 }
 
 void PCA9555::setDirection(int data) {
@@ -18,9 +21,7 @@
  
 int PCA9555::read() {
     char rx_array[2] = {0x00, 0x00};
-    char tx_array[1] = {0x000};
-        
-    tx_array[0] = 0;
+    char tx_array[1] = {0x00};
         
     _i2c.write(_address, tx_array, 1);
         
@@ -29,11 +30,18 @@
 }
  
 void PCA9555::write(int data) {
-    char foo[3];
+    /*char foo[3];
     foo[0]=0x02;
     foo[1]=data;
     foo[2]=data>>8;
-    _i2c.write(_address, foo, 3);
+    _i2c.write(_address, foo, 3);*/
+    char foo[2];
+    foo[0]=0x02;
+    foo[1]=data;
+    _i2c.write(_address, foo, 2);
+    foo[0]=0x03;
+    foo[1]=data>>8;
+    _i2c.write(_address, foo, 2);
 }
 
 void PCA9555::setPin(unsigned int pinNumber) {
@@ -49,4 +57,22 @@
 void PCA9555::togglePin(unsigned int pinNumber) {
     currentWriteState ^= ((unsigned int)1 << pinNumber);
     write(currentWriteState);
+}
+
+bool PCA9555::getPin(unsigned int pinNumber) {
+    //return ballState;
+    return (read() & ((unsigned int)1 << pinNumber)) > 0;
+}
+
+void PCA9555::change(void (*function)(void)) { 
+    _callbackChange.attach(function);
+}
+/*
+template<typename T>
+void PCA9555::change(T *object, void (T::*member)(void)) { 
+    _callbackChange.attach(object, member); 
+}
+*/
+void PCA9555::callChange(void) {
+    _callbackChange.call();
 }
\ No newline at end of file