First version of new i2c bitbang API.
[bertos.git] / bertos / drv / lm75.c
index 3a30aadddb8e93af7c8d417ec074182cbf232193..5d24e0ae520224b348727e016982d0d1b7a2e64d 100644 (file)
 
 #define SELECT_ADDRESS(addr)   LM75_ADDRESS_BYTE | (addr << 1)
 
-deg_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);