PCA9555

Dependents:   Telliskivi2_2014 PowerManagementBoard_Rev_A_2017

Committer:
mlaane
Date:
Sat Sep 14 22:57:43 2013 +0000
Revision:
4:fe1637c9409f
Parent:
2:fae93e0841f6
Child:
6:0373a167d58b
documentation

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 2:fae93e0841f6 9 InterruptIn _irqpin;
Reiko 2:fae93e0841f6 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 0:011622696878 26
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 1:a6699cd826bb 56
mlaane 4:fe1637c9409f 57 /** Set direction of pin
mlaane 4:fe1637c9409f 58 *
mlaane 4:fe1637c9409f 59 * @param pinNumber The number of pin to set
mlaane 4:fe1637c9409f 60 */
Reiko 1:a6699cd826bb 61 void setDirection(int data);
Reiko 2:fae93e0841f6 62
Reiko 2:fae93e0841f6 63 void change(void (*function)(void));
Reiko 2:fae93e0841f6 64
Reiko 2:fae93e0841f6 65 template<typename T>
Reiko 2:fae93e0841f6 66 void change(T *object, void (T::*member)(void)) {
Reiko 2:fae93e0841f6 67 _callbackChange.attach(object, member);
Reiko 2:fae93e0841f6 68 }
Reiko 0:011622696878 69
Reiko 0:011622696878 70 private:
Reiko 0:011622696878 71 I2C _i2c;
Reiko 0:011622696878 72 int _address;
Reiko 2:fae93e0841f6 73 unsigned int currentWriteState;
Reiko 2:fae93e0841f6 74
Reiko 2:fae93e0841f6 75 void callChange(void);
Reiko 0:011622696878 76 };
Reiko 0:011622696878 77
Reiko 0:011622696878 78 #endif