Motoo Tanaka / HDC1000

Dependents:   test_HDC1000

Committer:
Rhyme
Date:
Mon Apr 17 07:37:19 2017 +0000
Revision:
1:f2c04c5b28ab
Parent:
0:1db0d0071723
Child:
2:f574cd898cba
u2f functions added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:1db0d0071723 1 #include "mbed.h"
Rhyme 0:1db0d0071723 2 #include "HDC1000.h"
Rhyme 0:1db0d0071723 3
Rhyme 0:1db0d0071723 4 #define REG_TEMPERATURE 0x00
Rhyme 0:1db0d0071723 5 #define REG_HUMIDITY 0x01
Rhyme 0:1db0d0071723 6 #define REG_CONFIGURATION 0x02
Rhyme 0:1db0d0071723 7 #define REG_ID_FIRST_WORD 0xFB
Rhyme 0:1db0d0071723 8 #define REG_ID_SECOND_WORD 0xFC
Rhyme 0:1db0d0071723 9 #define REG_ID_LAST_BYTE 0xFD
Rhyme 0:1db0d0071723 10 #define REG_MANUFACTURE_ID 0xFE
Rhyme 0:1db0d0071723 11 #define REG_DEVICE_ID 0xFF
Rhyme 0:1db0d0071723 12
Rhyme 0:1db0d0071723 13 /* Bit field of Configuration register */
Rhyme 0:1db0d0071723 14 /* bit[15] RST Sowtware Rest Bit 0: Normal 1: Reset
Rhyme 0:1db0d0071723 15 * bit[14:13] (Reserved) must be 00
Rhyme 0:1db0d0071723 16 * bit[12] MODE 0:Aquire Temp/Hum separately(16bit each) 1:Aquire both Temp/Hum same time (32bit)
Rhyme 0:1db0d0071723 17 * bit[11] BTST Battery Test(?) 0:VDD > 2.8V 1:VDD < 2.8V
Rhyme 0:1db0d0071723 18 * bit[10] TRES Temperature Resolution 0:14bit 1:11bit
Rhyme 0:1db0d0071723 19 * bit[9:8] HRES Humidity Resolution 00:14bit 01:11bit 10:8bit
Rhyme 0:1db0d0071723 20 * bit[7:0] (Reserved) must be 00000000
Rhyme 0:1db0d0071723 21 */
Rhyme 0:1db0d0071723 22 #define BIT_RESET 0x8000
Rhyme 0:1db0d0071723 23 #define BIT_MODE 0x1000
Rhyme 0:1db0d0071723 24 #define BIT_BTST 0x0800
Rhyme 0:1db0d0071723 25 #define BIT_TRES 0x0400
Rhyme 0:1db0d0071723 26 #define BIT_HRES14 0x0000
Rhyme 0:1db0d0071723 27 #define BIT_HRES11 0x0100
Rhyme 0:1db0d0071723 28 #define BIT_HRES08 0x0200
Rhyme 0:1db0d0071723 29
Rhyme 0:1db0d0071723 30 HDC1000::HDC1000(PinName sda, PinName scl, PinName rdy, int addr) : m_i2c(sda, scl), m_rdy(rdy), m_addr(addr<<1) {
Rhyme 0:1db0d0071723 31 // HDC1000::HDC1000(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr<<1) {
Rhyme 0:1db0d0071723 32 // activate the peripheral
Rhyme 0:1db0d0071723 33
Rhyme 0:1db0d0071723 34 }
Rhyme 0:1db0d0071723 35
Rhyme 0:1db0d0071723 36 HDC1000::~HDC1000(void)
Rhyme 0:1db0d0071723 37 {
Rhyme 0:1db0d0071723 38 }
Rhyme 0:1db0d0071723 39
Rhyme 0:1db0d0071723 40 void HDC1000::reset(void)
Rhyme 0:1db0d0071723 41 {
Rhyme 0:1db0d0071723 42 uint16_t conf = 0x8000 ;
Rhyme 0:1db0d0071723 43 setConfig(conf) ;
Rhyme 0:1db0d0071723 44 }
Rhyme 0:1db0d0071723 45
Rhyme 1:f2c04c5b28ab 46 float HDC1000::u2f_temp(uint16_t utemp)
Rhyme 1:f2c04c5b28ab 47 {
Rhyme 1:f2c04c5b28ab 48 float ftemp ;
Rhyme 1:f2c04c5b28ab 49
Rhyme 1:f2c04c5b28ab 50 utemp = (utemp >> 2) & 0x3FFF ;
Rhyme 1:f2c04c5b28ab 51 // note: the data sheet suggests to use 0x10000 for denominator
Rhyme 1:f2c04c5b28ab 52 // but to allow 100% I chose 0xFFFF instead, I may be wrong
Rhyme 1:f2c04c5b28ab 53 ftemp = ((float)(utemp)/ (float)0x3FFF)*165.0 - 40.0 ;
Rhyme 1:f2c04c5b28ab 54 return( ftemp ) ;
Rhyme 1:f2c04c5b28ab 55 }
Rhyme 1:f2c04c5b28ab 56
Rhyme 1:f2c04c5b28ab 57 float HDC1000::u2f_hume(uint16_t uhume)
Rhyme 1:f2c04c5b28ab 58 {
Rhyme 1:f2c04c5b28ab 59 float fhume ;
Rhyme 1:f2c04c5b28ab 60 uhume = (uhume>>2) & 0x3FFF ;
Rhyme 1:f2c04c5b28ab 61
Rhyme 1:f2c04c5b28ab 62 // note: the data sheet suggests to use 0x10000 for denominator
Rhyme 1:f2c04c5b28ab 63 // but to allow 100% I chose 0xFFFF instead, I may be wrong
Rhyme 1:f2c04c5b28ab 64 fhume = ((float)(uhume) / (float)0x3FFF) * 100.0 ;
Rhyme 1:f2c04c5b28ab 65 return( fhume ) ;
Rhyme 1:f2c04c5b28ab 66 }
Rhyme 1:f2c04c5b28ab 67
Rhyme 0:1db0d0071723 68 float HDC1000::readTemperature(void)
Rhyme 0:1db0d0071723 69 {
Rhyme 0:1db0d0071723 70 uint16_t utemp, uhum ;
Rhyme 0:1db0d0071723 71 int32_t ltemp ;
Rhyme 0:1db0d0071723 72 int mode ;
Rhyme 0:1db0d0071723 73 float ftemp ;
Rhyme 0:1db0d0071723 74
Rhyme 0:1db0d0071723 75 mode = getMode() ;
Rhyme 0:1db0d0071723 76 switch(mode) {
Rhyme 0:1db0d0071723 77 case 0: /* temp or hum can be acquired */
Rhyme 0:1db0d0071723 78 utemp = getTemperature() ;
Rhyme 0:1db0d0071723 79 break ;
Rhyme 0:1db0d0071723 80 case 1: /* temp and hum can be acquired */
Rhyme 0:1db0d0071723 81 getData(&utemp, &uhum) ;
Rhyme 0:1db0d0071723 82 break ;
Rhyme 0:1db0d0071723 83 default:
Rhyme 0:1db0d0071723 84 printf("Error: unexpected mode %d\n",mode) ;
Rhyme 0:1db0d0071723 85 break ;
Rhyme 0:1db0d0071723 86 }
Rhyme 1:f2c04c5b28ab 87
Rhyme 1:f2c04c5b28ab 88 printf("utemp = 0x%04X ", utemp) ;
Rhyme 1:f2c04c5b28ab 89 ftemp = u2f_temp(utemp) ;
Rhyme 1:f2c04c5b28ab 90 /*
Rhyme 1:f2c04c5b28ab 91 ltemp = (utemp >> 2) & 0x3FFF ;
Rhyme 1:f2c04c5b28ab 92
Rhyme 0:1db0d0071723 93 // note: the data sheet suggests to use 0x10000 for denominator
Rhyme 0:1db0d0071723 94 // but to allow 100% I chose 0xFFFF instead, I may be wrong
Rhyme 0:1db0d0071723 95 ftemp = ((float)(ltemp)/ (float)0x3FFF)*165.0 - 40.0 ;
Rhyme 1:f2c04c5b28ab 96 */
Rhyme 0:1db0d0071723 97 return( ftemp ) ;
Rhyme 0:1db0d0071723 98 }
Rhyme 0:1db0d0071723 99
Rhyme 0:1db0d0071723 100 float HDC1000::readHumidity(void)
Rhyme 0:1db0d0071723 101 {
Rhyme 0:1db0d0071723 102 uint16_t utemp, uhume ;
Rhyme 0:1db0d0071723 103 int mode ;
Rhyme 0:1db0d0071723 104 int32_t lhume ;
Rhyme 1:f2c04c5b28ab 105 float fhume ;
Rhyme 0:1db0d0071723 106
Rhyme 0:1db0d0071723 107 mode = getMode() ;
Rhyme 0:1db0d0071723 108 switch(mode) {
Rhyme 0:1db0d0071723 109 case 0: /* temp or hum can be acquired */
Rhyme 0:1db0d0071723 110 uhume = getHumidity() ;
Rhyme 0:1db0d0071723 111 break ;
Rhyme 0:1db0d0071723 112 case 1: /* temp and hum can be acquired */
Rhyme 0:1db0d0071723 113 getData(&utemp, &uhume) ;
Rhyme 0:1db0d0071723 114 break ;
Rhyme 0:1db0d0071723 115 default:
Rhyme 0:1db0d0071723 116 printf("Error: unexpected mode %d\n",mode) ;
Rhyme 0:1db0d0071723 117 break ;
Rhyme 0:1db0d0071723 118 }
Rhyme 1:f2c04c5b28ab 119
Rhyme 1:f2c04c5b28ab 120 printf("uhume = 0x%04X\n", uhume) ;
Rhyme 1:f2c04c5b28ab 121 fhume = u2f_hume(uhume) ;
Rhyme 1:f2c04c5b28ab 122 /*
Rhyme 1:f2c04c5b28ab 123 lhume = (uhume>>2) & 0x3FFF ;
Rhyme 1:f2c04c5b28ab 124
Rhyme 0:1db0d0071723 125 // note: the data sheet suggests to use 0x10000 for denominator
Rhyme 0:1db0d0071723 126 // but to allow 100% I chose 0xFFFF instead, I may be wrong
Rhyme 0:1db0d0071723 127 fhum = ((float)(lhume) / (float)0x3FFF) * 100.0 ;
Rhyme 1:f2c04c5b28ab 128 */
Rhyme 1:f2c04c5b28ab 129 return( fhume ) ;
Rhyme 0:1db0d0071723 130 }
Rhyme 0:1db0d0071723 131
Rhyme 0:1db0d0071723 132 void HDC1000::readData(float *ftemp, float *fhume)
Rhyme 0:1db0d0071723 133 {
Rhyme 0:1db0d0071723 134 uint16_t utemp, uhume ;
Rhyme 0:1db0d0071723 135 getData(&utemp, &uhume) ;
Rhyme 0:1db0d0071723 136 printf("utemp: 0x%04X, uhume: 0x%04X\n", utemp, uhume) ;
Rhyme 1:f2c04c5b28ab 137 *ftemp = u2f_temp(utemp) ;
Rhyme 1:f2c04c5b28ab 138 *fhume = u2f_hume(uhume) ;
Rhyme 1:f2c04c5b28ab 139 #if 0
Rhyme 0:1db0d0071723 140 utemp = (utemp >> 2) & 0x3FFF ;
Rhyme 0:1db0d0071723 141 uhume = (uhume >> 2) & 0x3FFF ;
Rhyme 0:1db0d0071723 142 *ftemp = ((float)(utemp)/ (float)0x3FFF)*165.0 - 40.0 ;
Rhyme 0:1db0d0071723 143 *fhume = ((float)(uhume) / (float)0x3FFF) * 100.0 ;
Rhyme 1:f2c04c5b28ab 144 #endif
Rhyme 0:1db0d0071723 145 }
Rhyme 0:1db0d0071723 146 /* for mode 0 */
Rhyme 0:1db0d0071723 147 uint16_t HDC1000::getTemperature(void)
Rhyme 0:1db0d0071723 148 {
Rhyme 0:1db0d0071723 149 uint16_t temp ;
Rhyme 0:1db0d0071723 150 uint8_t data[2] ;
Rhyme 0:1db0d0071723 151 float delay ;
Rhyme 0:1db0d0071723 152 data[0] = REG_TEMPERATURE ;
Rhyme 0:1db0d0071723 153 data[1] = (m_addr << 1) | 0x01 ;
Rhyme 0:1db0d0071723 154 m_i2c.write(m_addr, (const char*)data, 2, true);
Rhyme 0:1db0d0071723 155 while(m_rdy == 1) { } /* wait for rdy */
Rhyme 0:1db0d0071723 156
Rhyme 0:1db0d0071723 157 // delay = getTDelay() ;
Rhyme 0:1db0d0071723 158 // wait_us(1000 * delay) ;
Rhyme 0:1db0d0071723 159
Rhyme 0:1db0d0071723 160 m_i2c.read(m_addr, (char *)data, 2);
Rhyme 0:1db0d0071723 161 temp = (data[0] << 8) | data[1] ;
Rhyme 0:1db0d0071723 162 return( temp ) ;
Rhyme 0:1db0d0071723 163 }
Rhyme 0:1db0d0071723 164
Rhyme 0:1db0d0071723 165 uint16_t HDC1000::getHumidity(void)
Rhyme 0:1db0d0071723 166 {
Rhyme 0:1db0d0071723 167 uint16_t hume ;
Rhyme 0:1db0d0071723 168 uint8_t data[2] ;
Rhyme 0:1db0d0071723 169 float delay ;
Rhyme 0:1db0d0071723 170 // readRegs(REG_HUMIDITY, data, 2) ;
Rhyme 0:1db0d0071723 171 data[0] = REG_HUMIDITY ;
Rhyme 0:1db0d0071723 172 data[1] = (m_addr << 1) | 0x01 ;
Rhyme 0:1db0d0071723 173 m_i2c.write(m_addr, (const char*)data, 2, true);
Rhyme 0:1db0d0071723 174
Rhyme 0:1db0d0071723 175 while(m_rdy == 1) { } /* wait for rdy */
Rhyme 0:1db0d0071723 176 // delay = getHDelay() ;
Rhyme 0:1db0d0071723 177 // wait_us(1000 * delay) ;
Rhyme 0:1db0d0071723 178 // wait(0.1) ;
Rhyme 0:1db0d0071723 179
Rhyme 0:1db0d0071723 180 m_i2c.read(m_addr, (char *)data, 2);
Rhyme 0:1db0d0071723 181 hume = (data[0] << 8) | data[1] ;
Rhyme 0:1db0d0071723 182 return( hume ) ;
Rhyme 0:1db0d0071723 183 }
Rhyme 0:1db0d0071723 184
Rhyme 0:1db0d0071723 185 /* for mode 1 */
Rhyme 0:1db0d0071723 186 void HDC1000::getData(uint16_t *temp, uint16_t *hume)
Rhyme 0:1db0d0071723 187 {
Rhyme 0:1db0d0071723 188 float delay ;
Rhyme 0:1db0d0071723 189 uint8_t data[4] = { 0, 0, 0, 0 } ;
Rhyme 0:1db0d0071723 190 int mode ;
Rhyme 0:1db0d0071723 191
Rhyme 0:1db0d0071723 192 mode = getMode() ;
Rhyme 0:1db0d0071723 193 if (mode == 0) {
Rhyme 0:1db0d0071723 194 *temp = getTemperature() ;
Rhyme 0:1db0d0071723 195 *hume = getHumidity() ;
Rhyme 0:1db0d0071723 196 } else { /* mode == 1 */
Rhyme 0:1db0d0071723 197 data[0] = REG_TEMPERATURE ;
Rhyme 0:1db0d0071723 198 data[1] = (m_addr << 1) | 0x01 ;
Rhyme 0:1db0d0071723 199 m_i2c.write(m_addr,(const char *)data, 2, false);
Rhyme 0:1db0d0071723 200
Rhyme 0:1db0d0071723 201 while(m_rdy == 1) { } /* wait for rdy */
Rhyme 0:1db0d0071723 202 // delay = getTDelay() + getHDelay() ;
Rhyme 0:1db0d0071723 203 // wait_us(1000 * delay) ;
Rhyme 0:1db0d0071723 204
Rhyme 0:1db0d0071723 205 // m_i2c.write(m_addr,(const char *)data, 1, true);
Rhyme 0:1db0d0071723 206 // while(m_rdy == 1) { } /* wait for rdy */
Rhyme 0:1db0d0071723 207 m_i2c.read(m_addr, (char *)data, 4);
Rhyme 0:1db0d0071723 208 *temp = (data[0] << 8) | data[1] ;
Rhyme 0:1db0d0071723 209 *hume = (data[2] << 8) | data[3] ;
Rhyme 0:1db0d0071723 210 }
Rhyme 0:1db0d0071723 211 }
Rhyme 0:1db0d0071723 212
Rhyme 0:1db0d0071723 213 void HDC1000::setConfig(uint16_t conf)
Rhyme 0:1db0d0071723 214 {
Rhyme 0:1db0d0071723 215 uint8_t data[3] ;
Rhyme 0:1db0d0071723 216 data[0] = REG_CONFIGURATION ;
Rhyme 0:1db0d0071723 217 data[1] = (conf >> 8) & 0xFF ;
Rhyme 0:1db0d0071723 218 data[2] = conf & 0xFF ;
Rhyme 0:1db0d0071723 219 writeRegs(data, 3) ;
Rhyme 0:1db0d0071723 220 }
Rhyme 0:1db0d0071723 221
Rhyme 0:1db0d0071723 222 uint16_t HDC1000::getConfig(void)
Rhyme 0:1db0d0071723 223 {
Rhyme 0:1db0d0071723 224 uint8_t data[2] ;
Rhyme 0:1db0d0071723 225 uint16_t conf ;
Rhyme 0:1db0d0071723 226 readRegs(REG_CONFIGURATION, data, 2) ;
Rhyme 0:1db0d0071723 227 conf = (data[0] << 8) | data[1] ;
Rhyme 0:1db0d0071723 228 return( conf ) ;
Rhyme 0:1db0d0071723 229 }
Rhyme 0:1db0d0071723 230
Rhyme 0:1db0d0071723 231 void HDC1000::setMode(int mode)
Rhyme 0:1db0d0071723 232 {
Rhyme 0:1db0d0071723 233 uint16_t conf ;
Rhyme 0:1db0d0071723 234 conf = getConfig() ;
Rhyme 0:1db0d0071723 235 if (mode) {
Rhyme 0:1db0d0071723 236 conf |= BIT_MODE ;
Rhyme 0:1db0d0071723 237 } else {
Rhyme 0:1db0d0071723 238 conf ^= BIT_MODE ;
Rhyme 0:1db0d0071723 239 }
Rhyme 0:1db0d0071723 240 setConfig( conf ) ;
Rhyme 0:1db0d0071723 241 }
Rhyme 0:1db0d0071723 242
Rhyme 0:1db0d0071723 243 int HDC1000::getMode(void)
Rhyme 0:1db0d0071723 244 {
Rhyme 0:1db0d0071723 245 uint16_t conf ;
Rhyme 0:1db0d0071723 246 int mode ;
Rhyme 0:1db0d0071723 247 conf = getConfig() ;
Rhyme 0:1db0d0071723 248 if (conf & BIT_MODE) {
Rhyme 0:1db0d0071723 249 mode = 1 ;
Rhyme 0:1db0d0071723 250 } else {
Rhyme 0:1db0d0071723 251 mode = 0 ;
Rhyme 0:1db0d0071723 252 }
Rhyme 0:1db0d0071723 253 return( mode ) ;
Rhyme 0:1db0d0071723 254 }
Rhyme 0:1db0d0071723 255
Rhyme 0:1db0d0071723 256 void HDC1000::setTres(int tres)
Rhyme 0:1db0d0071723 257 {
Rhyme 0:1db0d0071723 258 uint16_t conf ;
Rhyme 0:1db0d0071723 259 conf = getConfig() ;
Rhyme 0:1db0d0071723 260 if (tres) {
Rhyme 0:1db0d0071723 261 conf |= BIT_TRES ;
Rhyme 0:1db0d0071723 262 } else {
Rhyme 0:1db0d0071723 263 conf ^= BIT_TRES ;
Rhyme 0:1db0d0071723 264 }
Rhyme 0:1db0d0071723 265 }
Rhyme 0:1db0d0071723 266
Rhyme 0:1db0d0071723 267 int HDC1000::getTres(void)
Rhyme 0:1db0d0071723 268 {
Rhyme 0:1db0d0071723 269 uint16_t conf ;
Rhyme 0:1db0d0071723 270 int tres ;
Rhyme 0:1db0d0071723 271 conf = getConfig() ;
Rhyme 0:1db0d0071723 272 if (conf & BIT_TRES) {
Rhyme 0:1db0d0071723 273 tres = 1 ;
Rhyme 0:1db0d0071723 274 } else {
Rhyme 0:1db0d0071723 275 tres = 0 ;
Rhyme 0:1db0d0071723 276 }
Rhyme 0:1db0d0071723 277 return( tres ) ;
Rhyme 0:1db0d0071723 278 }
Rhyme 0:1db0d0071723 279
Rhyme 0:1db0d0071723 280 void HDC1000::setHres(int hres)
Rhyme 0:1db0d0071723 281 {
Rhyme 0:1db0d0071723 282 uint16_t conf ;
Rhyme 0:1db0d0071723 283 conf = getConfig() ;
Rhyme 0:1db0d0071723 284 conf ^= (BIT_HRES11 | BIT_HRES08) ;
Rhyme 0:1db0d0071723 285 conf |= ((hres & 0x03) << 8) ;
Rhyme 0:1db0d0071723 286 }
Rhyme 0:1db0d0071723 287
Rhyme 0:1db0d0071723 288 int HDC1000::getHres(void)
Rhyme 0:1db0d0071723 289 {
Rhyme 0:1db0d0071723 290 uint16_t conf ;
Rhyme 0:1db0d0071723 291 int hres ;
Rhyme 0:1db0d0071723 292 conf = getConfig() ;
Rhyme 0:1db0d0071723 293 hres = (conf >> 8)&0x03 ;
Rhyme 0:1db0d0071723 294 return( hres ) ;
Rhyme 0:1db0d0071723 295 }
Rhyme 0:1db0d0071723 296
Rhyme 0:1db0d0071723 297 void HDC1000::getSerialID(uint8_t data[])
Rhyme 0:1db0d0071723 298 {
Rhyme 0:1db0d0071723 299 uint8_t udata[2] ;
Rhyme 0:1db0d0071723 300 readRegs(REG_ID_FIRST_WORD, &data[0], 2) ;
Rhyme 0:1db0d0071723 301 readRegs(REG_ID_SECOND_WORD, &data[2], 2) ;
Rhyme 0:1db0d0071723 302 readRegs(REG_ID_LAST_BYTE, udata, 2) ;
Rhyme 0:1db0d0071723 303 data[4] = udata[0] ;
Rhyme 0:1db0d0071723 304 }
Rhyme 0:1db0d0071723 305
Rhyme 0:1db0d0071723 306 uint16_t HDC1000::getManufactureID(void) /* 0x5449 : Texas Instruments */
Rhyme 0:1db0d0071723 307 {
Rhyme 0:1db0d0071723 308 uint8_t data[2] ;
Rhyme 0:1db0d0071723 309 uint16_t id ;
Rhyme 0:1db0d0071723 310 readRegs(REG_MANUFACTURE_ID, data, 2) ;
Rhyme 0:1db0d0071723 311 id = (data[0] << 8) | data[1] ;
Rhyme 0:1db0d0071723 312 return( id ) ;
Rhyme 0:1db0d0071723 313 }
Rhyme 0:1db0d0071723 314
Rhyme 0:1db0d0071723 315 uint16_t HDC1000::getDeviceID(void) /* 0x1000 */
Rhyme 0:1db0d0071723 316 {
Rhyme 0:1db0d0071723 317 uint8_t data[2] ;
Rhyme 0:1db0d0071723 318 uint16_t id ;
Rhyme 0:1db0d0071723 319 readRegs(REG_DEVICE_ID, data, 2) ;
Rhyme 0:1db0d0071723 320 id = (data[0] << 8) | data[1] ;
Rhyme 0:1db0d0071723 321 return( id ) ;
Rhyme 0:1db0d0071723 322 }
Rhyme 0:1db0d0071723 323
Rhyme 0:1db0d0071723 324 float HDC1000::getTDelay(void)
Rhyme 0:1db0d0071723 325 {
Rhyme 0:1db0d0071723 326 int tres ;
Rhyme 0:1db0d0071723 327 float tdelay ;
Rhyme 0:1db0d0071723 328
Rhyme 0:1db0d0071723 329 tres = getTres() ;
Rhyme 0:1db0d0071723 330 switch(tres) {
Rhyme 0:1db0d0071723 331 case 0: /* 14bit */
Rhyme 0:1db0d0071723 332 tdelay = 6.35 ;
Rhyme 0:1db0d0071723 333 break ;
Rhyme 0:1db0d0071723 334 case 1: /* 11bit */
Rhyme 0:1db0d0071723 335 tdelay = 3.65 ;
Rhyme 0:1db0d0071723 336 break ;
Rhyme 0:1db0d0071723 337 default:
Rhyme 0:1db0d0071723 338 tdelay = 6.35 ;
Rhyme 0:1db0d0071723 339 break ;
Rhyme 0:1db0d0071723 340 }
Rhyme 0:1db0d0071723 341 return(tdelay) ;
Rhyme 0:1db0d0071723 342 }
Rhyme 0:1db0d0071723 343
Rhyme 0:1db0d0071723 344 float HDC1000::getHDelay(void)
Rhyme 0:1db0d0071723 345 {
Rhyme 0:1db0d0071723 346 int hres ;
Rhyme 0:1db0d0071723 347 float hdelay ;
Rhyme 0:1db0d0071723 348
Rhyme 0:1db0d0071723 349 hres = getHres() ;
Rhyme 0:1db0d0071723 350 switch(hres) {
Rhyme 0:1db0d0071723 351 case 0: /* 14bit */
Rhyme 0:1db0d0071723 352 hdelay = 6.5 ;
Rhyme 0:1db0d0071723 353 break ;
Rhyme 0:1db0d0071723 354 case 1: /* 11bit */
Rhyme 0:1db0d0071723 355 hdelay = 3.85 ;
Rhyme 0:1db0d0071723 356 break ;
Rhyme 0:1db0d0071723 357 case 2: /* 8bit */
Rhyme 0:1db0d0071723 358 hdelay = 2.5 ;
Rhyme 0:1db0d0071723 359 break ;
Rhyme 0:1db0d0071723 360 default:
Rhyme 0:1db0d0071723 361 hdelay = 6.5 ; /* let's use the longest value */
Rhyme 0:1db0d0071723 362 break ;
Rhyme 0:1db0d0071723 363 }
Rhyme 0:1db0d0071723 364 return(hdelay) ;
Rhyme 0:1db0d0071723 365 }
Rhyme 0:1db0d0071723 366
Rhyme 0:1db0d0071723 367 float HDC1000::getDelay(void)
Rhyme 0:1db0d0071723 368 {
Rhyme 0:1db0d0071723 369 float tdelay, hdelay ;
Rhyme 0:1db0d0071723 370 tdelay = getTDelay() ;
Rhyme 0:1db0d0071723 371 hdelay = getHDelay() ;
Rhyme 0:1db0d0071723 372 return( tdelay + hdelay ) ;
Rhyme 0:1db0d0071723 373 }
Rhyme 0:1db0d0071723 374
Rhyme 0:1db0d0071723 375 void HDC1000::readRegs(int addr, uint8_t * data, int len) {
Rhyme 0:1db0d0071723 376 char t[1] = {addr};
Rhyme 0:1db0d0071723 377 m_i2c.write(m_addr, t, 1, true);
Rhyme 0:1db0d0071723 378 m_i2c.read(m_addr, (char *)data, len) ;
Rhyme 0:1db0d0071723 379 }
Rhyme 0:1db0d0071723 380
Rhyme 0:1db0d0071723 381 void HDC1000::writeRegs(uint8_t * data, int len) {
Rhyme 0:1db0d0071723 382 m_i2c.write(m_addr, (char *)data, len);
Rhyme 0:1db0d0071723 383 }