PCA9555

Dependents:   Telliskivi2_2014 PowerManagementBoard_Rev_A_2017

Committer:
Reiko
Date:
Sun Nov 03 11:43:05 2013 +0000
Revision:
8:8f59b7233e6c
Parent:
7:3b54389686ca
Added retry on read error

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Reiko 0:011622696878 1 #ifndef MBED_PCA9555_H
Reiko 0:011622696878 2 #define MBED_PCA9555_H
Reiko 2:fae93e0841f6 3
Reiko 2:fae93e0841f6 4 #include "mbed.h"
Reiko 0:011622696878 5
Reiko 0:011622696878 6 /** Interface to the PCA9555 I2C 16 Bit IO expander */
Reiko 0:011622696878 7 class PCA9555 {
Reiko 2:fae93e0841f6 8 protected:
Reiko 7:3b54389686ca 9 InterruptIn _irqpin;
Reiko 7:3b54389686ca 10 FunctionPointer _callbackChange;
Reiko 0:011622696878 11 public:
Reiko 0:011622696878 12 /** Create an instance of the PCA9555 connected to specfied I2C pins, with the specified address.
Reiko 0:011622696878 13 *
Reiko 0:011622696878 14 * @param sda The I2C data pin
Reiko 0:011622696878 15 * @param scl The I2C clock pin
mlaane 4:fe1637c9409f 16 * @param interruptPin The pin connected to PCA9555 interrupt
Reiko 0:011622696878 17 * @param address The I2C address for this PCA9555
Reiko 0:011622696878 18 */
Reiko 2:fae93e0841f6 19 PCA9555(PinName sda, PinName scl, PinName interrupPin, int address);
Reiko 0:011622696878 20
mlaane 4:fe1637c9409f 21 /** Read the IO pin levels
Reiko 0:011622696878 22 *
Reiko 0:011622696878 23 * @return The two bytes read
Reiko 0:011622696878 24 */
Reiko 0:011622696878 25 int read();
Reiko 8:8f59b7233e6c 26 int getLastRead();
Reiko 0:011622696878 27 /** Write to the IO pins
Reiko 0:011622696878 28 *
Reiko 0:011622696878 29 * @param data The 16 bits to write to the IO port
Reiko 0:011622696878 30 */
Reiko 0:011622696878 31 void write(int data);
Reiko 1:a6699cd826bb 32
mlaane 4:fe1637c9409f 33 /** Set one pin
mlaane 4:fe1637c9409f 34 *
mlaane 4:fe1637c9409f 35 * @param pinNumber The number of pin to set
mlaane 4:fe1637c9409f 36 */
Reiko 1:a6699cd826bb 37 void setPin(unsigned int pinNumber);
mlaane 4:fe1637c9409f 38
mlaane 4:fe1637c9409f 39 /** Clear one pin
mlaane 4:fe1637c9409f 40 *
mlaane 4:fe1637c9409f 41 * @param pinNumber The number of pin to clear
mlaane 4:fe1637c9409f 42 */
Reiko 1:a6699cd826bb 43 void clearPin(unsigned int pinNumber);
mlaane 4:fe1637c9409f 44
mlaane 4:fe1637c9409f 45 /** Toggle one pin
mlaane 4:fe1637c9409f 46 *
mlaane 4:fe1637c9409f 47 * @param pinNumber The number of pin to toggle
mlaane 4:fe1637c9409f 48 */
Reiko 1:a6699cd826bb 49 void togglePin(unsigned int pinNumber);
mlaane 4:fe1637c9409f 50
mlaane 4:fe1637c9409f 51 /** Get state of pin
mlaane 4:fe1637c9409f 52 *
mlaane 4:fe1637c9409f 53 * @param pinNumber The number of pin
mlaane 4:fe1637c9409f 54 */
Reiko 2:fae93e0841f6 55 bool getPin(unsigned int pinNumber);
Reiko 5:73884f49ed97 56 void writePins();
Reiko 1:a6699cd826bb 57
mlaane 4:fe1637c9409f 58 /** Set direction of pin
mlaane 4:fe1637c9409f 59 *
mlaane 4:fe1637c9409f 60 * @param pinNumber The number of pin to set
mlaane 4:fe1637c9409f 61 */
Reiko 1:a6699cd826bb 62 void setDirection(int data);
Reiko 2:fae93e0841f6 63
Reiko 2:fae93e0841f6 64 void change(void (*function)(void));
Reiko 2:fae93e0841f6 65
Reiko 2:fae93e0841f6 66 template<typename T>
Reiko 2:fae93e0841f6 67 void change(T *object, void (T::*member)(void)) {
Reiko 2:fae93e0841f6 68 _callbackChange.attach(object, member);
Reiko 2:fae93e0841f6 69 }
Reiko 0:011622696878 70
Reiko 0:011622696878 71 private:
Reiko 0:011622696878 72 I2C _i2c;
Reiko 0:011622696878 73 int _address;
Reiko 2:fae93e0841f6 74 unsigned int currentWriteState;
Reiko 7:3b54389686ca 75 unsigned int lastReadState;
Reiko 8:8f59b7233e6c 76 DigitalOut led3;
Reiko 8:8f59b7233e6c 77 int retryCount;
Reiko 8:8f59b7233e6c 78 int currentRetryCount;
Reiko 2:fae93e0841f6 79 void callChange(void);
Reiko 0:011622696878 80 };
Reiko 0:011622696878 81
Reiko 0:011622696878 82 #endif