OB1203 basic mbed driver
Diff: OB1203.cpp
- 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 }