aboutsummaryrefslogtreecommitdiffstats
path: root/os/various
diff options
context:
space:
mode:
authorStephane D'Alu <sdalu@sdalu.com>2016-02-10 00:56:51 +0100
committerStephane D'Alu <sdalu@sdalu.com>2016-02-10 00:56:51 +0100
commit260a9edc325b2083901aa591874aa50bd0e5be25 (patch)
tree4601b415cf9c20050958a7a09f9c87a80f59778e /os/various
parente34ef249e7c3c1b42df94693236bfd1b5e02c2d9 (diff)
downloadChibiOS-Contrib-260a9edc325b2083901aa591874aa50bd0e5be25.tar.gz
ChibiOS-Contrib-260a9edc325b2083901aa591874aa50bd0e5be25.tar.bz2
ChibiOS-Contrib-260a9edc325b2083901aa591874aa50bd0e5be25.zip
correctly pack structure, remove unused fields
Diffstat (limited to 'os/various')
-rw-r--r--os/various/devices_lib/sensors/tsl2561.c18
-rw-r--r--os/various/devices_lib/sensors/tsl2561.h24
-rw-r--r--os/various/devices_lib/sensors/tsl2591.c39
-rw-r--r--os/various/devices_lib/sensors/tsl2591.h4
4 files changed, 54 insertions, 31 deletions
diff --git a/os/various/devices_lib/sensors/tsl2561.c b/os/various/devices_lib/sensors/tsl2561.c
index 3d7b910..a4ac8ec 100644
--- a/os/various/devices_lib/sensors/tsl2561.c
+++ b/os/various/devices_lib/sensors/tsl2561.c
@@ -15,7 +15,7 @@
*/
/**
- *
+ * Illuminance calculation code provided by www.taosinc.com
* DOC: http://ams.com/eng/content/download/250096/975518/143687
*/
#define I2C_HELPERS_AUTOMATIC_DRV TRUE
@@ -131,10 +131,6 @@
#define TSL2561_LUX_M8C (0x0000) // 0.000 * 2^LUX_SCALE
-
-
-#define CEILING(x,y) (((x) + (y) - 1) / (y))
-
/*===========================================================================*/
/* Driver exported variables. */
/*===========================================================================*/
@@ -147,6 +143,8 @@
/* Driver local functions. */
/*===========================================================================*/
+#define CEILING(x,y) (((x) + (y) - 1) / (y))
+
static inline unsigned int
calculateIlluminance(TSL2561_integration_time_t integration_time,
TSL2561_gain_t gain,
@@ -276,7 +274,7 @@ void
TSL2561_init(TSL2561_drv *drv, TSL2561_config *config) {
drv->config = config;
drv->gain = TSL2561_GAIN_1X;
- drv->integration_time = TSL2561_INTEGRATIONTIME_SHORT;
+ drv->integration_time = TSL2561_INTEGRATIONTIME_LONG;
drv->state = SENSOR_INIT;
i2c_reg_recv8(TSL2561_COMMAND_BIT | TSL2561_REG_ID,
@@ -297,7 +295,7 @@ TSL2561_check(TSL2561_drv *drv) {
msg_t
TSL2561_stop(TSL2561_drv *drv) {
- struct PACKED {
+ struct __attribute__((packed)) {
uint8_t reg;
uint8_t conf;
} tx = { TSL2561_COMMAND_BIT | TSL2561_REG_CONTROL,
@@ -308,7 +306,7 @@ TSL2561_stop(TSL2561_drv *drv) {
msg_t
TSL2561_start(TSL2561_drv *drv) {
- struct PACKED {
+ struct __attribute__((packed)) {
uint8_t reg;
uint8_t conf;
} tx = { TSL2561_COMMAND_BIT | TSL2561_REG_CONTROL,
@@ -320,7 +318,7 @@ TSL2561_start(TSL2561_drv *drv) {
msg_t
TSL2561_setIntegrationTime(TSL2561_drv *drv,
TSL2561_integration_time_t time) {
- struct PACKED {
+ struct __attribute__((packed)) {
uint8_t reg;
uint8_t conf;
} tx = { TSL2561_COMMAND_BIT | TSL2561_REG_TIMING,
@@ -338,7 +336,7 @@ TSL2561_setIntegrationTime(TSL2561_drv *drv,
msg_t
TSL2561_setGain(TSL2561_drv *drv,
TSL2561_gain_t gain) {
- struct PACKED {
+ struct __attribute__((packed)) {
uint8_t reg;
uint8_t conf;
} tx = { TSL2561_COMMAND_BIT | TSL2561_REG_TIMING,
diff --git a/os/various/devices_lib/sensors/tsl2561.h b/os/various/devices_lib/sensors/tsl2561.h
index 94e1ede..75e7c78 100644
--- a/os/various/devices_lib/sensors/tsl2561.h
+++ b/os/various/devices_lib/sensors/tsl2561.h
@@ -87,16 +87,26 @@ typedef struct {
I2CHelper i2c; /* keep it first */
} TSL2561_config;
-
+/**
+ * @brief Available integration time
+ *
+ * @details Available integration time are:
+ * 13.7ms, 101ms, 402ms
+ */
typedef enum {
- TSL2561_INTEGRATIONTIME_SHORT = 0x00, // 13.7ms
- TSL2561_INTEGRATIONTIME_MEDIUM = 0x01, // 101ms
- TSL2561_INTEGRATIONTIME_LONG = 0x02, // 402ms
+ TSL2561_INTEGRATIONTIME_SHORT = 0x00, /**< @brief 13.7ms */
+ TSL2561_INTEGRATIONTIME_MEDIUM = 0x01, /**< @brief 101.0ms */
+ TSL2561_INTEGRATIONTIME_LONG = 0x02, /**< @brief 402.0ms */
} TSL2561_integration_time_t;
+/**
+ * @brief Available gain
+ *
+ * @details Available gain are 1x, 16x
+ */
typedef enum {
- TSL2561_GAIN_1X = 0x00, // No gain
- TSL2561_GAIN_16X = 0x10, // 16x gain
+ TSL2561_GAIN_1X = 0x00, /**< @brief 1x gain */
+ TSL2561_GAIN_16X = 0x10, /**< @brief 16x gain */
} TSL2561_gain_t;
/**
@@ -105,8 +115,6 @@ typedef enum {
typedef struct {
TSL2561_config *config;
sensor_state_t state;
- unsigned int delay;
- uint16_t cfg;
TSL2561_gain_t gain;
TSL2561_integration_time_t integration_time;
struct PACKED {
diff --git a/os/various/devices_lib/sensors/tsl2591.c b/os/various/devices_lib/sensors/tsl2591.c
index 214b1ce..c0bbee0 100644
--- a/os/various/devices_lib/sensors/tsl2591.c
+++ b/os/various/devices_lib/sensors/tsl2591.c
@@ -163,29 +163,48 @@ TSL2591_check(TSL2591_drv *drv) {
msg_t
TSL2591_start(TSL2591_drv *drv) {
- struct PACKED {
+ struct __attribute__((packed)) {
uint8_t reg;
uint8_t conf;
- } tx = { TSL2591_REG_COMMAND | TSL2591_REG_NORMAL | TSL2591_REG_ENABLE,
- TSL2591_ENABLE_POWERON | TSL2591_ENABLE_AEN | TSL2591_ENABLE_AIEN };
- return i2c_send((uint8_t*)&tx, sizeof(tx));
+ } tx_config = {
+ TSL2591_REG_COMMAND | TSL2591_REG_NORMAL | TSL2591_REG_CONFIG,
+ (uint8_t)(drv->integration_time | drv->gain) };
+
+ struct __attribute__((packed)) {
+ uint8_t reg;
+ uint8_t conf;
+ } tx_start = {
+ TSL2591_REG_COMMAND | TSL2591_REG_NORMAL | TSL2591_REG_ENABLE,
+ TSL2591_ENABLE_POWERON };
+
+ msg_t msg;
+
+ if (((msg = i2c_send((uint8_t*)&tx_config, sizeof(tx_config))) < MSG_OK) ||
+ ((msg = i2c_send((uint8_t*)&tx_start, sizeof(tx_start ))) < MSG_OK)) {
+ drv->state = SENSOR_ERROR;
+ return msg;
+ }
+
+ drv->state = SENSOR_STARTED;
+ return MSG_OK;
}
msg_t
TSL2591_stop(TSL2591_drv *drv) {
- struct PACKED {
+ struct __attribute__((packed)) {
uint8_t reg;
uint8_t conf;
- } tx = { TSL2591_REG_COMMAND | TSL2591_REG_NORMAL | TSL2591_REG_ENABLE,
- TSL2591_ENABLE_POWEROFF };
+ } tx_stop = {
+ TSL2591_REG_COMMAND | TSL2591_REG_NORMAL | TSL2591_REG_ENABLE,
+ TSL2591_ENABLE_POWEROFF };
- return i2c_send((uint8_t*)&tx, sizeof(tx));
+ return i2c_send((uint8_t*)&tx_stop, sizeof(tx_stop));
}
msg_t
TSL2591_setIntegrationTime(TSL2591_drv *drv,
TSL2591_integration_time_t time) {
- struct PACKED {
+ struct __attribute__((packed)) {
uint8_t reg;
uint8_t conf;
} tx = { TSL2591_REG_COMMAND | TSL2591_REG_NORMAL | TSL2591_REG_CONFIG,
@@ -203,7 +222,7 @@ TSL2591_setIntegrationTime(TSL2591_drv *drv,
msg_t
TSL2591_setGain(TSL2591_drv *drv,
TSL2591_gain_t gain) {
- struct PACKED {
+ struct __attribute__((packed)) {
uint8_t reg;
uint8_t conf;
} tx = { TSL2591_REG_COMMAND | TSL2591_REG_NORMAL | TSL2591_REG_CONFIG,
diff --git a/os/various/devices_lib/sensors/tsl2591.h b/os/various/devices_lib/sensors/tsl2591.h
index e6597bf..8320eb8 100644
--- a/os/various/devices_lib/sensors/tsl2591.h
+++ b/os/various/devices_lib/sensors/tsl2591.h
@@ -113,9 +113,7 @@ typedef enum {
typedef struct {
TSL2591_config *config;
sensor_state_t state;
- unsigned int delay;
- uint16_t cfg;
- TSL2591_gain_t gain;
+ TSL2591_gain_t gain;
TSL2591_integration_time_t integration_time;
} TSL2591_drv;