X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fdrv%2Flm75.c;h=fd44202492b2c0fe67ae1a2091a0eb26d3a23c0c;hb=e25abecb6a6ff52917d44d1331e5af831aeceb9c;hp=449a4dd2e1f541643be1bd7c0bc0c3a505704bce;hpb=80fef33198b667b00c49bc2f0b32a2aa0258d8a0;p=bertos.git diff --git a/bertos/drv/lm75.c b/bertos/drv/lm75.c index 449a4dd2..fd442024 100644 --- a/bertos/drv/lm75.c +++ b/bertos/drv/lm75.c @@ -52,33 +52,43 @@ #include #include +#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 -deci_celsius_t lm75_read(addr_t sens_addr) + +#if !CONFIG_I2C_DISABLE_OLD_API + +deg_t lm75_read_1(uint8_t sens_addr) +{ + return lm75_read_2(&local_i2c_old_api, sens_addr); +} +#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(SELECT_ADDRESS(sens_addr)); - i2c_put(LM75_PAD_BYTE); - i2c_start_r(SELECT_ADDRESS(sens_addr)); - i2c_recv(data, sizeof(data)); + 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)); - degree = (int16_t)data[0]; - deci_degree = (int16_t)(((data[1] >> 7) & 1 ) * 5); + if (i2c_error(i2c)) + return EOF; - LOG_INFO("[%d.%d C]\n", degree, deci_degree); + deci_degree = ((data[0] << 8) | data[1]); + deci_degree >>= 7; + deci_degree *= 5; - return degree * 10 + deci_degree; -} + LOG_INFO("[%d.%d C]\n", deci_degree / 10, ABS(deci_degree % 10)); -void lm75_init(void) -{ - // Check dependence - MOD_CHECK(i2c); - LM75_HW_INIT(); + return deci_degree; } - -