sx9500 driver

Dependents:   Senet NAMote scpi_sx127x NAMote72_Utility scpi_sx127x_firstTest

sx9500.cpp

Committer:
dudmuck
Date:
2015-03-18
Revision:
0:d46a1b9267a3
Child:
1:aa30dc96dc77

File content as of revision 0:d46a1b9267a3:

#include "sx9500.h"

#define SX9500_I2C_ADDRESS                          0x50    //0x28

SX9500::SX9500(I2C& r, PinName en_pin) : m_i2c(r), m_txen(en_pin)
{
}

SX9500::~SX9500()
{
}

void SX9500::reset()
{
    write(SX9500_REG_RESET, SX9500_RESET_CMD);
}

uint16_t SX9500::get_sensor()
{
    //uint16_t offset;
    uint8_t status;
    uint8_t buf[2];

    m_txen = 1;

    write(SX9500_REG_IRQMSK, 0x10);
    write(SX9500_REG_IRQSRC, 0x10);

    do {
        status = read_single(SX9500_REG_IRQSRC);
    } while (!(status & 0x10));

    read(SX9500_REG_OFFSETMSB, buf, 2);
    /*printf("MSB:%x\n", read_single(SX9500_REG_OFFSETMSB));
    printf("LSB:%x\n", read_single(SX9500_REG_OFFSETLSB));*/
    return (buf[0] << 8) + buf[1];
}

void SX9500::write(uint8_t addr, uint8_t data)
{
    uint8_t cmd[2];
    
    cmd[0] = addr;
    cmd[1] = data;

    if (m_i2c.write(SX9500_I2C_ADDRESS, (char *)cmd, 2))
        printf("SX9500 write-fail\n");
}

void SX9500::read(uint8_t addr, uint8_t *dst_buf, int length)
{
    char cmd[2];

    cmd[0] = addr;
    if (m_i2c.write(SX9500_I2C_ADDRESS, cmd, 1, true))
        printf("SX9500 write-fail\n");
    if (m_i2c.read(SX9500_I2C_ADDRESS, (char *)dst_buf, length))
        printf("SX9500 read-fail\n");
}

uint8_t SX9500::read_single(uint8_t addr)
{
    char cmd[2];

    cmd[0] = addr;
    if (m_i2c.write(SX9500_I2C_ADDRESS, cmd, 1, true))
        printf("SX9500 write-fail\n");
    if (m_i2c.read(SX9500_I2C_ADDRESS, cmd, 1))
        printf("SX9500 read-fail\n");

    return cmd[0];
}
    
void SX9500::standby(void)
{
    m_txen = 0;
    write(SX9500_REG_PROXCTRL0, 0);  // turn off all sensor pins
}