From d124d1144fc6e8234a8579a09fac314ed35074e6 Mon Sep 17 00:00:00 2001 From: Stephane D'Alu Date: Mon, 8 Feb 2016 09:37:26 +0100 Subject: added TSL2561 Light sesnor --- os/various/devices_lib/sensors/mcp9808/mcp9808.c | 54 ++++++++++-------------- 1 file changed, 23 insertions(+), 31 deletions(-) (limited to 'os/various/devices_lib/sensors/mcp9808/mcp9808.c') diff --git a/os/various/devices_lib/sensors/mcp9808/mcp9808.c b/os/various/devices_lib/sensors/mcp9808/mcp9808.c index df4d440..296c2f1 100644 --- a/os/various/devices_lib/sensors/mcp9808/mcp9808.c +++ b/os/various/devices_lib/sensors/mcp9808/mcp9808.c @@ -62,6 +62,16 @@ /* Driver local functions. */ /*===========================================================================*/ +static inline msg_t +_apply_config(MCP9808_drv *drv) { + struct __attribute__((packed)) { + uint8_t reg; + uint16_t conf; + } tx = { MCP9808_REG_CONFIG, cpu_to_be16(drv->cfg) }; + + return i2c_send((uint8_t*)&tx, sizeof(tx)); +} + static inline msg_t _decode_measure(MCP9808_drv *drv, uint16_t val, float *temperature) { @@ -95,24 +105,21 @@ void MCP9808_init(MCP9808_drv *drv, MCP9808_config *config) { drv->config = config; drv->cfg = 0; - drv->resolution = RES_16; - drv->state = MCP9808_INIT; + drv->resolution = RES_16; /* power up default */ + drv->state = SENSOR_INIT; } msg_t MCP9808_check(MCP9808_drv *drv) { - msg_t msg = -10; - uint16_t val; + uint16_t manuf, device; - if ((msg = i2c_reg_recv16_be(MCP9808_REG_MANUF_ID, &val)) < MSG_OK) + msg_t msg; + if (((msg = i2c_reg_recv16_be(MCP9808_REG_MANUF_ID, &manuf )) < MSG_OK) || + ((msg = i2c_reg_recv16_be(MCP9808_REG_DEVICE_ID, &device)) < MSG_OK)) return msg; - if (val != MCP9808_MANUF_ID) - return -2; - if ((msg = i2c_reg_recv16_be(MCP9808_REG_DEVICE_ID, &val)) < MSG_OK) - return msg; - if (val != MCP9808_DEVICE_ID) - return -2; + if ((manuf != MCP9808_MANUF_ID) || (device != MCP9808_DEVICE_ID)) + return SENSOR_NOTFOUND; return MSG_OK; } @@ -132,33 +139,18 @@ MCP9808_setResolution(MCP9808_drv *drv, MCP9808_resolution_t res) { return MSG_OK; } - msg_t MCP9808_start(MCP9808_drv *drv) { drv->cfg &= ~(MCP9808_REG_CONFIG_SHUTDOWN); - - struct __attribute__((packed)) { - uint8_t reg; - uint16_t conf; - } tx = { MCP9808_REG_CONFIG, cpu_to_be16(drv->cfg) }; - - return i2c_send((uint8_t*)&tx, sizeof(tx)) >= 0; + return _apply_config(drv); } msg_t MCP9808_stop(MCP9808_drv *drv) { drv->cfg |= (MCP9808_REG_CONFIG_SHUTDOWN); - - struct __attribute__((packed)) { - uint8_t reg; - uint16_t conf; - } tx = { MCP9808_REG_CONFIG, cpu_to_be16(drv->cfg) }; - - return i2c_send((uint8_t*)&tx, sizeof(tx)) >= 0; + return _apply_config(drv); } - - unsigned int MCP9808_getAcquisitionTime(MCP9808_drv *drv) { switch(drv->resolution) { @@ -167,8 +159,8 @@ MCP9808_getAcquisitionTime(MCP9808_drv *drv) { case RES_8 : return MCP9808_DELAY_ACQUIRE_RES_8; case RES_16: return MCP9808_DELAY_ACQUIRE_RES_16; } - osalDbgAssert(false, "programming error"); - return -1; + osalDbgAssert(false, "OOPS"); + return 0; } msg_t @@ -188,7 +180,7 @@ MCP9808_readMeasure(MCP9808_drv *drv, msg_t MCP9808_readTemperature(MCP9808_drv *drv, float *temperature) { - osalDbgAssert(drv->state == MCP9808_STARTED, "invalid state"); + osalDbgAssert(drv->state == SENSOR_STARTED, "invalid state"); msg_t msg; uint16_t val; -- cgit v1.2.3