I2C bus upgrade (#432)
This commit is contained in:
parent
d100f42b1f
commit
b83c2629b9
56 changed files with 909 additions and 804 deletions
|
|
@ -6,7 +6,6 @@
|
|||
|
||||
#include <stdio.h>
|
||||
#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;
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <i2c/i2c.h>
|
||||
|
||||
#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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue