X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fdrv%2Flm75.c;h=5d24e0ae520224b348727e016982d0d1b7a2e64d;hb=ec1f9b136d8b9ec44272ba7ab8ddc4b729589af2;hp=449a4dd2e1f541643be1bd7c0bc0c3a505704bce;hpb=80fef33198b667b00c49bc2f0b32a2aa0258d8a0;p=bertos.git diff --git a/bertos/drv/lm75.c b/bertos/drv/lm75.c index 449a4dd2..5d24e0ae 100644 --- a/bertos/drv/lm75.c +++ b/bertos/drv/lm75.c @@ -52,19 +52,30 @@ #include #include +#include // Macro and data type to manage celsius degree #define SELECT_ADDRESS(addr) LM75_ADDRESS_BYTE | (addr << 1) -deci_celsius_t lm75_read(addr_t sens_addr) +deg_t lm75_read(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);