drivers/hdc1000: Acquire exclusive access to I2C bus and minor bug fixes
fix doxygen warnings change default address
This commit is contained in:
parent
aa639486e2
commit
b540def4b1
@ -67,9 +67,13 @@ int hdc1000_test(hdc1000_t *dev)
|
|||||||
char reg[2];
|
char reg[2];
|
||||||
uint16_t tmp;
|
uint16_t tmp;
|
||||||
|
|
||||||
|
i2c_acquire(dev->i2c);
|
||||||
if (i2c_read_regs(dev->i2c, dev->addr, HDC1000_MANUFACTURER_ID, reg, 2) != 2) {
|
if (i2c_read_regs(dev->i2c, dev->addr, HDC1000_MANUFACTURER_ID, reg, 2) != 2) {
|
||||||
|
i2c_release(dev->i2c);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
i2c_release(dev->i2c);
|
||||||
|
|
||||||
tmp = ((uint16_t)reg[0] << 8) | reg[1];
|
tmp = ((uint16_t)reg[0] << 8) | reg[1];
|
||||||
if (tmp != HDC1000_MID_VALUE) {
|
if (tmp != HDC1000_MID_VALUE) {
|
||||||
return -1;
|
return -1;
|
||||||
@ -87,10 +91,13 @@ int hdc1000_init(hdc1000_t *dev, i2c_t i2c, uint8_t address)
|
|||||||
dev->addr = address;
|
dev->addr = address;
|
||||||
dev->initialized = false;
|
dev->initialized = false;
|
||||||
|
|
||||||
|
i2c_acquire(dev->i2c);
|
||||||
/* initialize the I2C bus */
|
/* initialize the I2C bus */
|
||||||
if (i2c_init_master(i2c, I2C_SPEED) < 0) {
|
if (i2c_init_master(i2c, I2C_SPEED) < 0) {
|
||||||
|
i2c_release(dev->i2c);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
i2c_release(dev->i2c);
|
||||||
|
|
||||||
if (hdc1000_test(dev)) {
|
if (hdc1000_test(dev)) {
|
||||||
return -2;
|
return -2;
|
||||||
@ -101,11 +108,14 @@ int hdc1000_init(hdc1000_t *dev, i2c_t i2c, uint8_t address)
|
|||||||
reg[0] = (uint8_t)(tmp >> 8);
|
reg[0] = (uint8_t)(tmp >> 8);
|
||||||
reg[1] = (uint8_t)tmp;
|
reg[1] = (uint8_t)tmp;
|
||||||
|
|
||||||
|
i2c_acquire(dev->i2c);
|
||||||
if (i2c_write_regs(dev->i2c, dev->addr, HDC1000_CONFG, reg, 2) != 2) {
|
if (i2c_write_regs(dev->i2c, dev->addr, HDC1000_CONFG, reg, 2) != 2) {
|
||||||
|
i2c_release(dev->i2c);
|
||||||
return -3;
|
return -3;
|
||||||
}
|
}
|
||||||
dev->initialized = true;
|
dev->initialized = true;
|
||||||
|
|
||||||
|
i2c_release(dev->i2c);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,9 +127,13 @@ int hdc1000_reset(hdc1000_t *dev)
|
|||||||
reg[1] = (uint8_t)tmp;
|
reg[1] = (uint8_t)tmp;
|
||||||
dev->initialized = false;
|
dev->initialized = false;
|
||||||
|
|
||||||
|
i2c_acquire(dev->i2c);
|
||||||
if (i2c_write_regs(dev->i2c, dev->addr, HDC1000_CONFG, reg, 2) != 2) {
|
if (i2c_write_regs(dev->i2c, dev->addr, HDC1000_CONFG, reg, 2) != 2) {
|
||||||
|
i2c_release(dev->i2c);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
i2c_release(dev->i2c);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -128,13 +142,18 @@ int hdc1000_startmeasure(hdc1000_t *dev)
|
|||||||
if (dev->initialized == false) {
|
if (dev->initialized == false) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
i2c_acquire(dev->i2c);
|
||||||
/* Trigger the measurements by executing a write access
|
/* Trigger the measurements by executing a write access
|
||||||
* to the address 0x00 (HDC1000_TEMPERATURE).
|
* to the address 0x00 (HDC1000_TEMPERATURE).
|
||||||
* Conversion Time is 6.50ms by 14 bit resolution.
|
* Conversion Time is 6.50ms by 14 bit resolution.
|
||||||
*/
|
*/
|
||||||
if (i2c_write_bytes(dev->i2c, dev->addr, HDC1000_TEMPERATURE, 1) != 1) {
|
if (i2c_write_bytes(dev->i2c, dev->addr, HDC1000_TEMPERATURE, 1) != 1) {
|
||||||
|
i2c_release(dev->i2c);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
i2c_release(dev->i2c);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,13 +164,17 @@ int hdc1000_read(hdc1000_t *dev, uint16_t *rawtemp, uint16_t *rawhum)
|
|||||||
if (dev->initialized == false) {
|
if (dev->initialized == false) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
i2c_acquire(dev->i2c);
|
||||||
if (i2c_read_bytes(dev->i2c, dev->addr, buf, 4) != 4) {
|
if (i2c_read_bytes(dev->i2c, dev->addr, buf, 4) != 4) {
|
||||||
|
i2c_release(dev->i2c);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
/* Register bytes are sent MSB first. */
|
/* Register bytes are sent MSB first. */
|
||||||
*rawtemp = ((uint16_t)buf[0] << 8) | buf[1];
|
*rawtemp = ((uint16_t)buf[0] << 8) | buf[1];
|
||||||
*rawhum = ((uint16_t)buf[2] << 8) | buf[3];
|
*rawhum = ((uint16_t)buf[2] << 8) | buf[3];
|
||||||
|
|
||||||
|
i2c_release(dev->i2c);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -18,7 +18,10 @@
|
|||||||
* be started by a write access to the address 0x00
|
* be started by a write access to the address 0x00
|
||||||
* (HDC1000_TEMPERATURE). After completing the measurement
|
* (HDC1000_TEMPERATURE). After completing the measurement
|
||||||
* the sensor will return to sleep mode. Typical
|
* the sensor will return to sleep mode. Typical
|
||||||
* Conversion Time by 14 bit resolution is 6.50ms.
|
* Conversion Time by 14 bit resolution is 6.50ms
|
||||||
|
* for humidity and 6.35ms for temperature.
|
||||||
|
* HDC1000_CONVERSION_TIME is twice as large to prevent
|
||||||
|
* the problems with timer resolution.
|
||||||
*
|
*
|
||||||
* @{
|
* @{
|
||||||
*
|
*
|
||||||
@ -41,11 +44,11 @@ extern "C"
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef HDC1000_I2C_ADDRESS
|
#ifndef HDC1000_I2C_ADDRESS
|
||||||
#define HDC1000_I2C_ADDRESS 0x41
|
#define HDC1000_I2C_ADDRESS 0x43 /**< Default Device Address */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef HDC1000_CONVERSION_TIME
|
#ifndef HDC1000_CONVERSION_TIME
|
||||||
#define HDC1000_CONVERSION_TIME 6500
|
#define HDC1000_CONVERSION_TIME 26000 /**< Default Conversion Time */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -109,6 +112,8 @@ int hdc1000_startmeasure(hdc1000_t *dev);
|
|||||||
* @brief Read sensor's data.
|
* @brief Read sensor's data.
|
||||||
*
|
*
|
||||||
* @param[in] dev device descriptor of sensor
|
* @param[in] dev device descriptor of sensor
|
||||||
|
* @param[out] rawtemp raw temperature value
|
||||||
|
* @param[out] rawhum raw humidity value
|
||||||
*
|
*
|
||||||
* @return 0 on success
|
* @return 0 on success
|
||||||
* @return -1 on error
|
* @return -1 on error
|
||||||
|
|||||||
@ -56,6 +56,7 @@ int main(void)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
vtimer_usleep(HDC1000_CONVERSION_TIME);
|
vtimer_usleep(HDC1000_CONVERSION_TIME);
|
||||||
|
|
||||||
hdc1000_read(&dev, &rawtemp, &rawhum);
|
hdc1000_read(&dev, &rawtemp, &rawhum);
|
||||||
printf("Raw data T: %5i RH: %5i\n", rawtemp, rawhum);
|
printf("Raw data T: %5i RH: %5i\n", rawtemp, rawhum);
|
||||||
|
|
||||||
@ -63,6 +64,7 @@ int main(void)
|
|||||||
printf("Data T: %d RH: %d\n", temp, hum);
|
printf("Data T: %d RH: %d\n", temp, hum);
|
||||||
|
|
||||||
vtimer_usleep(SLEEP);
|
vtimer_usleep(SLEEP);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user