Exemplo n.º 1
0
int tcs37727_init(tcs37727_t *dev, i2c_t i2c, uint8_t address, int atime_us)
{
    /* write device descriptor */
    dev->i2c = i2c;
    dev->addr = address;
    dev->initialized = false;

    i2c_acquire(dev->i2c);

    /* initialize the I2C bus */
    if (i2c_init_master(i2c, I2C_SPEED) < 0) {
        i2c_release(dev->i2c);
        return -1;
    }

    i2c_release(dev->i2c);

    if (tcs37727_test(dev)) {
        return -2;
    }

    i2c_acquire(dev->i2c);

    if (i2c_write_reg(dev->i2c, dev->addr, TCS37727_CONTROL,
                      TCS37727_CONTROL_AGAIN_4) != 1) {
        i2c_release(dev->i2c);
        return -3;
    }
    dev->again = 4;

    if (i2c_write_reg(dev->i2c, dev->addr, TCS37727_ATIME,
                      TCS37727_ATIME_TO_REG(atime_us)) != 1) {
        i2c_release(dev->i2c);
        return -3;
    }
    dev->atime_us = atime_us;

    dev->initialized = true;

    i2c_release(dev->i2c);
    return 0;
}
Exemplo n.º 2
0
int tcs37727_init(tcs37727_t *dev, const tcs37727_params_t *params)
{
    uint8_t tmp;

    /* check parameters */
    assert(dev && params);

    /* initialize the device descriptor */
    memcpy(&dev->p, params, sizeof(tcs37727_params_t));

    /* setup the I2C bus */
    i2c_acquire(BUS);
    if (i2c_init_master(BUS, I2C_SPEED) < 0) {
        i2c_release(BUS);
        LOG_ERROR("[tcs37727] init: error initializing I2C bus\n");
        return TCS37727_NOBUS;
    }

    /* check if we can communicate with the device */
    i2c_read_reg(BUS, ADR, TCS37727_ID, &tmp);
    if (tmp != TCS37727_ID_VALUE) {
        i2c_release(BUS);
        LOG_ERROR("[tcs37727] init: error while reading ID register\n");
        return TCS37727_NODEV;
    }

    /* configure gain and conversion time */
    i2c_write_reg(BUS, ADR, TCS37727_ATIME, TCS37727_ATIME_TO_REG(dev->p.atime));
    i2c_write_reg(BUS, ADR, TCS37727_CONTROL, TCS37727_CONTROL_AGAIN_4);
    dev->again = 4;

    /* enable the device */
    tmp = (TCS37727_ENABLE_AEN | TCS37727_ENABLE_PON);
    i2c_write_reg(BUS, ADR, TCS37727_ENABLE, tmp);

    i2c_release(BUS);

    return TCS37727_OK;
}