From bfa1552eee1b622c6fbc9adbf151923d36c29811 Mon Sep 17 00:00:00 2001 From: lilian Date: Fri, 4 Aug 2017 19:01:14 -0300 Subject: [PATCH] tsl2561 tsl4531 update --- examples/tsl2561/tsl2561_example.c | 6 ++-- examples/tsl4531/tsl4531_example.c | 6 ++-- extras/tsl2561/tsl2561.c | 51 +++++++++++++++--------------- extras/tsl2561/tsl2561.h | 3 +- extras/tsl4531/tsl4531.c | 29 ++++++++--------- extras/tsl4531/tsl4531.h | 3 +- 6 files changed, 51 insertions(+), 47 deletions(-) diff --git a/examples/tsl2561/tsl2561_example.c b/examples/tsl2561/tsl2561_example.c index b97804b..6f3582f 100644 --- a/examples/tsl2561/tsl2561_example.c +++ b/examples/tsl2561/tsl2561_example.c @@ -16,6 +16,7 @@ * Connect 3.3v from the ESP to Vin and GND to GND */ +#define I2C_BUS (0) #define SCL_PIN (2) #define SDA_PIN (0) @@ -27,7 +28,8 @@ void tsl2561MeasurementTask(void *pvParameters) // TSL2561_I2C_ADDR_VCC (0x49) // TSL2561_I2C_ADDR_GND (0x29) // TSL2561_I2C_ADDR_FLOAT (0x39) Default - lightSensor.i2c_addr = TSL2561_I2C_ADDR_FLOAT; + lightSensor.i2c_dev.bus = I2C_BUS; + lightSensor.i2c_dev.addr = TSL2561_I2C_ADDR_FLOAT; tsl2561_init(&lightSensor); @@ -63,7 +65,7 @@ void tsl2561MeasurementTask(void *pvParameters) void user_init(void) { uart_set_baud(0, 115200); - i2c_init(SCL_PIN, SDA_PIN); + i2c_init(I2C_BUS, SCL_PIN, SDA_PIN, I2C_FREQ_100K); xTaskCreate(tsl2561MeasurementTask, "tsl2561MeasurementTask", 256, NULL, 2, NULL); } diff --git a/examples/tsl4531/tsl4531_example.c b/examples/tsl4531/tsl4531_example.c index 9b69b29..f40213a 100644 --- a/examples/tsl4531/tsl4531_example.c +++ b/examples/tsl4531/tsl4531_example.c @@ -16,13 +16,15 @@ * Connect 3.3v from the ESP to Vin and GND to GND */ +#define I2C_BUS (0) #define SCL_PIN (2) #define SDA_PIN (0) void tsl4531MeasurementTask(void *pvParameters) { tsl4531_t lightSensor; - lightSensor.i2c_addr = TSL4531_I2C_ADDR; + lightSensor.i2c_dev.bus= I2C_BUS; + lightSensor.i2c_dev.addr= TSL4531_I2C_ADDR; tsl4531_init(&lightSensor); tsl4531_set_integration_time(&lightSensor, TSL4531_INTEGRATION_400MS); @@ -49,7 +51,7 @@ void tsl4531MeasurementTask(void *pvParameters) void user_init(void) { uart_set_baud(0, 115200); - i2c_init(SCL_PIN, SDA_PIN); + i2c_init(I2C_BUS, SCL_PIN, SDA_PIN, I2C_FREQ_100K); xTaskCreate(tsl4531MeasurementTask, "tsl4531MeasurementTask", 256, NULL, 2, NULL); } diff --git a/extras/tsl2561/tsl2561.c b/extras/tsl2561/tsl2561.c index f60825a..cc89021 100644 --- a/extras/tsl2561/tsl2561.c +++ b/extras/tsl2561/tsl2561.c @@ -6,7 +6,6 @@ #include #include "FreeRTOS.h" -#include "i2c/i2c.h" #include "task.h" #include "tsl2561.h" @@ -96,18 +95,18 @@ #define B8C 0x0000 // 0.000 * 2^LUX_SCALE #define M8C 0x0000 // 0.000 * 2^LUX_SCALE -static int write_register(uint8_t i2c_addr, uint8_t reg, uint8_t value) +static int write_register(i2c_dev_t* i2c_dev, uint8_t reg, uint8_t value) { reg = TSL2561_REG_COMMAND | reg; - return i2c_slave_write(i2c_addr, ®, &value, 1); + return i2c_slave_write(i2c_dev->bus, i2c_dev->addr, ®, &value, 1); } -static uint8_t read_register(uint8_t i2c_addr, uint8_t reg) +static uint8_t read_register(i2c_dev_t* i2c_dev, uint8_t reg) { uint8_t data[1]; reg = TSL2561_REG_COMMAND | reg; - if (i2c_slave_read(i2c_addr, ®, data, 1)) + if (i2c_slave_read(i2c_dev->bus, i2c_dev->addr, ®, data, 1)) { printf("Error in tsl2561 read_register\n"); } @@ -115,13 +114,13 @@ static uint8_t read_register(uint8_t i2c_addr, uint8_t reg) return data[0]; } -static uint16_t read_register_16(uint8_t i2c_addr, uint8_t low_register_addr) +static uint16_t read_register_16(i2c_dev_t* i2c_dev, uint8_t low_register_addr) { uint16_t value = 0; uint8_t data[2]; low_register_addr = TSL2561_REG_COMMAND | TSL2561_READ_WORD | low_register_addr; - if (i2c_slave_read(i2c_addr, &low_register_addr, data, 2)) + if (i2c_slave_read(i2c_dev->bus, i2c_dev->addr, &low_register_addr, data, 2)) { printf("Error with i2c_slave_read in read_register_16\n"); } @@ -131,24 +130,24 @@ static uint16_t read_register_16(uint8_t i2c_addr, uint8_t low_register_addr) return value; } -static int enable(uint8_t i2c_addr) +static int enable(i2c_dev_t* i2c_dev) { - return write_register(i2c_addr, TSL2561_REG_CONTROL, TSL2561_ON); + return write_register(i2c_dev, TSL2561_REG_CONTROL, TSL2561_ON); } -static int disable(uint8_t i2c_addr) +static int disable(i2c_dev_t* i2c_dev) { - return write_register(i2c_addr, TSL2561_REG_CONTROL, TSL2561_OFF); + return write_register(i2c_dev, TSL2561_REG_CONTROL, TSL2561_OFF); } void tsl2561_init(tsl2561_t *device) { - if (enable(device->i2c_addr)) + if (enable(&device->i2c_dev)) { printf("Error initializing tsl2561\n"); } - uint8_t control_reg = (read_register(device->i2c_addr, TSL2561_REG_CONTROL) & TSL2561_ON); + uint8_t control_reg = (read_register(&device->i2c_dev, TSL2561_REG_CONTROL) & TSL2561_ON); if (control_reg != TSL2561_ON) { @@ -156,39 +155,39 @@ void tsl2561_init(tsl2561_t *device) } // Fetch the package type - uint8_t part_reg = read_register(device->i2c_addr, TSL2561_REG_PART_ID); + uint8_t part_reg = read_register(&device->i2c_dev, TSL2561_REG_PART_ID); uint8_t package = part_reg >> 6; device->package_type = package; // Fetch the gain and integration time - uint8_t timing_register = read_register(device->i2c_addr, TSL2561_REG_TIMING); + uint8_t timing_register = read_register(&device->i2c_dev, TSL2561_REG_TIMING); device->gain = timing_register & 0x10; device->integration_time = timing_register & 0x03; - disable(device->i2c_addr); + disable(&device->i2c_dev); } void tsl2561_set_integration_time(tsl2561_t *device, tsl2561_integration_time_t integration_time_id) { - enable(device->i2c_addr); - write_register(device->i2c_addr, TSL2561_REG_TIMING, integration_time_id | device->gain); - disable(device->i2c_addr); + enable(&device->i2c_dev); + write_register(&device->i2c_dev, TSL2561_REG_TIMING, integration_time_id | device->gain); + disable(&device->i2c_dev); device->integration_time = integration_time_id; } void tsl2561_set_gain(tsl2561_t *device, tsl2561_gain_t gain) { - enable(device->i2c_addr); - write_register(device->i2c_addr, TSL2561_REG_TIMING, gain | device->integration_time); - disable(device->i2c_addr); + enable(&device->i2c_dev); + write_register(&device->i2c_dev, TSL2561_REG_TIMING, gain | device->integration_time); + disable(&device->i2c_dev); device->gain = gain; } static void get_channel_data(tsl2561_t *device, uint16_t *channel0, uint16_t *channel1) { - enable(device->i2c_addr); + enable(&device->i2c_dev); // Since we just enabled the chip, we need to sleep // for the chip's integration time so it can gather a reading @@ -205,10 +204,10 @@ static void get_channel_data(tsl2561_t *device, uint16_t *channel0, uint16_t *ch break; } - *channel0 = read_register_16(device->i2c_addr, TSL2561_REG_CHANNEL_0_LOW); - *channel1 = read_register_16(device->i2c_addr, TSL2561_REG_CHANNEL_1_LOW); + *channel0 = read_register_16(&device->i2c_dev, TSL2561_REG_CHANNEL_0_LOW); + *channel1 = read_register_16(&device->i2c_dev, TSL2561_REG_CHANNEL_1_LOW); - disable(device->i2c_addr); + disable(&device->i2c_dev); } bool tsl2561_read_lux(tsl2561_t *device, uint32_t *lux) diff --git a/extras/tsl2561/tsl2561.h b/extras/tsl2561/tsl2561.h index ad5109f..9f880b3 100644 --- a/extras/tsl2561/tsl2561.h +++ b/extras/tsl2561/tsl2561.h @@ -9,6 +9,7 @@ #include #include +#include #ifdef __cplusplus extern "C" { @@ -38,7 +39,7 @@ typedef enum } tsl2561_gain_t; typedef struct { - tsl2561_i2c_addr_t i2c_addr; + i2c_dev_t i2c_dev; uint8_t integration_time; uint8_t gain; uint8_t package_type; diff --git a/extras/tsl4531/tsl4531.c b/extras/tsl4531/tsl4531.c index 54963e9..a15a0ee 100644 --- a/extras/tsl4531/tsl4531.c +++ b/extras/tsl4531/tsl4531.c @@ -6,7 +6,6 @@ #include #include "FreeRTOS.h" -#include "i2c/i2c.h" #include "task.h" #include "tsl4531.h" @@ -27,18 +26,18 @@ #define TSL4531_INTEGRATION_TIME_200MS 240 #define TSL4531_INTEGRATION_TIME_400MS 480 // Default -static int write_register(uint8_t i2c_addr, uint8_t reg, uint8_t value) +static int write_register(i2c_dev_t* i2c_dev, uint8_t reg, uint8_t value) { reg = TSL4531_REG_COMMAND | reg; - return i2c_slave_write(i2c_addr, ®, &value, 1); + return i2c_slave_write(i2c_dev->bus, i2c_dev->addr, ®, &value, 1); } -static uint8_t read_register(uint8_t i2c_addr, uint8_t reg) +static uint8_t read_register(i2c_dev_t* i2c_dev, uint8_t reg) { uint8_t data[1]; reg = TSL4531_REG_COMMAND | reg; - if (i2c_slave_read(i2c_addr, ®, data, 1)) + if (i2c_slave_read(i2c_dev->bus, i2c_dev->addr, ®, data, 1)) { printf("Error in tsl4531 read_register\n"); } @@ -46,13 +45,13 @@ static uint8_t read_register(uint8_t i2c_addr, uint8_t reg) return data[0]; } -static uint16_t read_register_16(uint8_t i2c_addr, uint8_t low_register_addr) +static uint16_t read_register_16(i2c_dev_t* i2c_dev, uint8_t low_register_addr) { uint16_t value = 0; uint8_t data[2]; low_register_addr = TSL4531_REG_COMMAND | low_register_addr; - if (i2c_slave_read(i2c_addr, &low_register_addr, data, 2)) + if (i2c_slave_read(i2c_dev->bus, i2c_dev->addr, &low_register_addr, data, 2)) { printf("Error with i2c_slave_read in read_register_16\n"); } @@ -64,12 +63,12 @@ static uint16_t read_register_16(uint8_t i2c_addr, uint8_t low_register_addr) static int enable(tsl4531_t *device) { - return write_register(device->i2c_addr, TSL4531_REG_CONTROL, TSL4531_ON); + return write_register(&device->i2c_dev, TSL4531_REG_CONTROL, TSL4531_ON); } static int disable(tsl4531_t *device) { - return write_register(device->i2c_addr, TSL4531_REG_CONTROL, TSL4531_OFF); + return write_register(&device->i2c_dev, TSL4531_REG_CONTROL, TSL4531_OFF); } void tsl4531_init(tsl4531_t *device) @@ -79,13 +78,13 @@ void tsl4531_init(tsl4531_t *device) printf("Error initializing tsl4531, the enable write failed\n"); } - uint8_t control_reg = read_register(device->i2c_addr, TSL4531_REG_CONTROL); + uint8_t control_reg = read_register(&device->i2c_dev, TSL4531_REG_CONTROL); if (control_reg != TSL4531_ON) { printf("Error initializing tsl4531, control register wasn't set to ON\n"); } - uint8_t idRegister = read_register(device->i2c_addr, TSL4531_REG_DEVICE_ID); + uint8_t idRegister = read_register(&device->i2c_dev, TSL4531_REG_DEVICE_ID); uint8_t id = (idRegister & 0xF0) >> 4; if (id == TSL4531_PART_TSL45317) { @@ -110,7 +109,7 @@ void tsl4531_set_integration_time(tsl4531_t *device, tsl4531_integration_time_t uint8_t new_config_reg = power_save_bit | integration_time_bits; enable(device); - write_register(device->i2c_addr, TSL4531_REG_CONFIG, new_config_reg); + write_register(&device->i2c_dev, TSL4531_REG_CONFIG, new_config_reg); disable(device); device->integration_time_id = integration_time_id; @@ -123,7 +122,7 @@ void tsl4531_set_power_save_skip(tsl4531_t *device, bool skip_power_save) uint8_t new_config_reg = power_save_bit | integration_time_bits; enable(device); - write_register(device->i2c_addr, TSL4531_REG_CONFIG, new_config_reg); + write_register(&device->i2c_dev, TSL4531_REG_CONFIG, new_config_reg); disable(device); device->skip_power_save = skip_power_save; @@ -156,8 +155,8 @@ bool tsl4531_read_lux(tsl4531_t *device, uint16_t *lux) break; } - uint16_t lux_data = read_register_16(device->i2c_addr, TSL4531_REG_DATA_LOW); - + uint16_t lux_data = read_register_16(&device->i2c_dev, TSL4531_REG_DATA_LOW); + disable(device); *lux = multiplier * lux_data; diff --git a/extras/tsl4531/tsl4531.h b/extras/tsl4531/tsl4531.h index 3b57664..d4ab7ec 100644 --- a/extras/tsl4531/tsl4531.h +++ b/extras/tsl4531/tsl4531.h @@ -9,6 +9,7 @@ #include #include +#include #ifdef __cplusplus extern "C" { @@ -38,7 +39,7 @@ typedef enum } tsl4531_part_id_t; typedef struct { - tsl4531_i2c_addr_t i2c_addr; + i2c_dev_t i2c_dev; uint8_t integration_time_id; bool skip_power_save; tsl4531_part_id_t part_id;