X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fdrv%2Flm75.c;h=93c6509e4e3363a28fc9e871357d33b061b0fb3e;hb=39184f9b190fdcfec2f17aad6f0de8b2edf04a02;hp=3a30aadddb8e93af7c8d417ec074182cbf232193;hpb=d27ccfcbcdad22acd83d20660fb88c4e5c3677e5;p=bertos.git diff --git a/bertos/drv/lm75.c b/bertos/drv/lm75.c index 3a30aadd..93c6509e 100644 --- a/bertos/drv/lm75.c +++ b/bertos/drv/lm75.c @@ -55,17 +55,32 @@ #include // Macro and data type to manage celsius degree #define SELECT_ADDRESS(addr) LM75_ADDRESS_BYTE | (addr << 1) +#define LM75_ADDRESS_BYTE 0x91 +#define LM75_PAD_BYTE 0x0 -deg_t lm75_read(addr_t sens_addr) + +#if !CONFIG_I2C_DISABLE_OLD_API + +deg_t lm75_read_1(uint8_t sens_addr) { uint8_t data[2]; int16_t degree; int16_t deci_degree; - i2c_start_w(SELECT_ADDRESS(sens_addr)); - i2c_put(LM75_PAD_BYTE); - i2c_start_r(SELECT_ADDRESS(sens_addr)); - i2c_recv(data, sizeof(data)); + if( !(i2c_start_w(SELECT_ADDRESS(sens_addr)) + && i2c_put(LM75_PAD_BYTE) + && i2c_start_r(SELECT_ADDRESS(sens_addr))) ) + { + i2c_stop(); + return EOF; + } + + if ( !i2c_recv(data, sizeof(data)) ) + { + i2c_stop(); + return EOF; + } + i2c_stop(); degree = (int16_t)data[0]; deci_degree = (int16_t)(((data[1] >> 7) & 1 ) * 5); @@ -75,11 +90,44 @@ deg_t lm75_read(addr_t sens_addr) return degree * 10 + deci_degree; } -void lm75_init(void) +void lm75_init_0(void) { // Check dependence MOD_CHECK(i2c); LM75_HW_INIT(); } +#endif /* !CONFIG_I2C_DISABLE_OLD_API */ + + +/* + * New API + */ +deg_t lm75_read_2(I2c *i2c, uint8_t sens_addr) +{ + uint8_t data[2]; + int16_t degree; + int16_t deci_degree; + i2c_start_w(i2c, SELECT_ADDRESS(sens_addr), 1, I2C_NOSTOP); + i2c_putc(i2c, LM75_PAD_BYTE); + i2c_start_r(i2c, SELECT_ADDRESS(sens_addr), sizeof(data), I2C_STOP); + i2c_read(i2c, data, sizeof(data)); + if (i2c_error(i2c)) + return EOF; + + degree = (int16_t)data[0]; + deci_degree = (int16_t)(((data[1] >> 7) & 1 ) * 5); + + LOG_INFO("[%d.%d C]\n", degree, deci_degree); + + return degree * 10 + deci_degree; +} + +void lm75_init_1(I2c *i2c) +{ + ASSERT(i2c); + + // Check dependence + LM75_HW_INIT(); +}