Prototype of SX1508's library

SX1508.cpp

Committer:
irsanjul
Date:
2016-01-22
Revision:
0:9b4d494682e0
Child:
1:56f4a8d6cde7

File content as of revision 0:9b4d494682e0:

#include "mbed.h"
#include "SX1508.h"

SX1508::SX1508(PinName sda, PinName scl) : i2c (sda, scl)
{
    i2c.frequency(SX1508_FREQ);
}

bool SX1508::config(char SetPin)
{
    char buffer[6];
    
    buffer[0] = 0x03;
    buffer[1] = 0xF0; // RegPullup , addr 0x03
    buffer[3] = 0x0F; // RegOpendrain , addr 0x05
    buffer[5] = 0xF0; // RegDir , addr 0x07
    if(i2c.write(SX1508_ADDR, buffer, 6) != 0) return 0;
    
    buffer[0] = 0x12;
    buffer[1] = 0x05; // RegDebounceConfig , addr 0x12
    buffer[2] = 0xF0; // RegDebounceEnable , addr 0x13
    buffer[3] = SetPin; // RegKeyConfig , addr 0x14
    if(i2c.write(SX1508_ADDR, buffer, 4) != 0) return 0;
    
    return true;
}

char SX1508::read()
{
    char start = 0x15;
    char buffer[3];
    char result;
    
    if(i2c.write(SX1508_ADDR, &start, 1) != 0) return 0;
    if(i2c.read((SX1508_ADDR | 0x01), buffer, 3) != 0) return 0;
    
    result = buffer[0] & 0xFF;
    
    return result;
}