PCA9555

Dependents:   Telliskivi2_2014 PowerManagementBoard_Rev_A_2017

PCA9555.cpp

Committer:
Reiko
Date:
2013-08-31
Revision:
1:a6699cd826bb
Parent:
0:011622696878
Child:
2:fae93e0841f6

File content as of revision 1:a6699cd826bb:

#include "PCA9555.h"
#include "mbed.h"
 
PCA9555::PCA9555(PinName sda, PinName scl, int address)
        : _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 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[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);
}