OB1203 basic mbed driver

Dependents:   OB1203_IDT

Revision:
6:337ee64ca7ab
Parent:
5:527556d05aa8
Child:
7:7d90f25c04fa
--- a/OB1203.cpp	Mon May 14 18:49:02 2018 +0000
+++ b/OB1203.cpp	Mon May 14 19:31:41 2018 +0000
@@ -316,11 +316,16 @@
     return uint32_t(data[start_byte+2])<<16 | int32_t(data[start_byte+1])<<8 | int32_t(data[start_byte]) ;
 }
 
+uint32_t OB1203::twoandhalfBytes2uint32(char *data, int start_byte) 
+{
+    //coverts a string of 3 bytes with LSB first into unsigned long MSB last
+    return (uint32_t)( ((data[start_byte+2] & 0x0F)<<16) | (int32_t(data[start_byte+1])<<8) | int32_t(data[start_byte]) ) ;
+}
 
 char OB1203::get_ls_data(uint32_t *data)
 {  
     char byte_data[21];
-    readBlock(OB1203_ADDR,REG_STATUS_0,byte_data,19);  
+    readBlock(OB1203_ADDR,REG_STATUS_0,byte_data,21);  
     #ifdef DEBUG
         pc.printf("%02x %02x  %02x %02x  %02x %02x %02x  %02x %02x %02x  %02x %02x %02x  %02x %02x  %02x %02x %02x %02x %02x $02x\r\n",
         byte_data[0],byte_data[1],byte_data[2],byte_data[3],
@@ -333,19 +338,19 @@
      
 
     //byte_data[0] is ps (not populated)
-    data[1] = bytes2uint32(byte_data,4); //w
-    data[2] = bytes2uint32(byte_data,7); //g
-    data[3] = bytes2uint32(byte_data,10); //b
-    data[4] = bytes2uint32(byte_data,13); //r
-    data[5] = bytes2uint32(byte_data,16); //c
-    data[6] = ((uint32_t)byte_data[19])<<8 | ((uint32_t)byte_data[20]); //temp data
+    data[1] = twoandhalfBytes2uint32(byte_data,4); //w
+    data[2] = twoandhalfBytes2uint32(byte_data,7); //g
+    data[3] = twoandhalfBytes2uint32(byte_data,10); //b
+    data[4] = twoandhalfBytes2uint32(byte_data,13); //r
+    data[5] = twoandhalfBytes2uint32(byte_data,16); //c
+    data[6] =  (uint32_t)((byte_data[20] & 0x0F)<<8) | (uint32_t)byte_data[19] ; //temp data
     return ( (byte_data[0] & LS_NEW_DATA) == 0x01 ? 1 : 0); //return 1 if new data or 0 if old data
 }
 
 char OB1203::get_ps_data(uint32_t *data)
 {  
     char byte_data[4];
-    readBlock(OB1203_ADDR,REG_STATUS_0,byte_data,19);  
+    readBlock(OB1203_ADDR,REG_STATUS_0,byte_data,4);  
     #ifdef DEBUG
         pc.printf( "%02x %02x %02x %02x\r\n", byte_data[0], byte_data[1], byte_data[2], byte_data[3] );
     #endif
@@ -368,12 +373,12 @@
     #endif
      
     data[0] = ((uint32_t)byte_data[3])<<8 | ((uint32_t)byte_data[2]); //ps
-    data[1] = bytes2uint32(byte_data,4); //w
-    data[2] = bytes2uint32(byte_data,7); //g
-    data[3] = bytes2uint32(byte_data,10); //b
-    data[4] = bytes2uint32(byte_data,13); //r
-    data[5] = bytes2uint32(byte_data,16); //c
-    data[6] = ((uint32_t)byte_data[19])<<8 | ((uint32_t)byte_data[20]); //temp data
+    data[1] = twoandhalfBytes2uint32(byte_data,4); //w
+    data[2] = twoandhalfBytes2uint32(byte_data,7); //g
+    data[3] = twoandhalfBytes2uint32(byte_data,10); //b
+    data[4] = twoandhalfBytes2uint32(byte_data,13); //r
+    data[5] = twoandhalfBytes2uint32(byte_data,16); //c
+    data[6] =  (uint32_t)((byte_data[20] & 0x0F)<<8) | (uint32_t)byte_data[19] ; //temp data
     return ( (byte_data[0] & LS_NEW_DATA) == 0x01 ? 1 : 0); //return 1 if new data or 0 if old data
 }