summaryrefslogtreecommitdiff
path: root/src/driver
diff options
context:
space:
mode:
authorDaniel Friesel <daniel.friesel@uos.de>2019-10-18 10:38:48 +0200
committerDaniel Friesel <daniel.friesel@uos.de>2019-10-18 10:38:48 +0200
commite391c1bc244838bb050ade946e709f671cd9cf94 (patch)
treef3b5e0260f95f886f54be213098f3362b7f8c815 /src/driver
parent8e0cde61737f46ba492768d86c54cff998da07a1 (diff)
Add preliminary version of HDC1080 driver (not working reliably yet)
Diffstat (limited to 'src/driver')
-rw-r--r--src/driver/hdc1080.cc51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/driver/hdc1080.cc b/src/driver/hdc1080.cc
new file mode 100644
index 0000000..8da2ba7
--- /dev/null
+++ b/src/driver/hdc1080.cc
@@ -0,0 +1,51 @@
+#include "driver/hdc1080.h"
+#include "arch.h"
+#if defined(MULTIPASS_ARCH_HAS_I2C) && !defined(DRIVER_SOFTI2C)
+#include "driver/i2c.h"
+#else
+#include "driver/soft_i2c.h"
+#endif
+
+float HDC1080::getTemp()
+{
+ txbuf[0] = 0x00;
+
+ i2c.xmit(address, 1, txbuf, 0, rxbuf);
+
+ arch.delay_ms(10);
+
+ i2c.xmit(address, 0, txbuf, 2, rxbuf);
+
+ return (((unsigned int)rxbuf[0] << 8) | rxbuf[1]) * .00251770019531250000 - 40.;
+}
+
+float HDC1080::getRH()
+{
+ txbuf[0] = 0x01;
+
+ i2c.xmit(address, 1, txbuf, 0, rxbuf);
+
+ arch.delay_ms(10);
+
+ i2c.xmit(address, 0, txbuf, 2, rxbuf);
+
+ return (((unsigned int)rxbuf[0] << 8) | rxbuf[1]) * .00152587890625000000;
+}
+
+unsigned int HDC1080::getManufacturerID()
+{
+ txbuf[0] = 0xfe;
+ i2c.xmit(address, 1, txbuf, 2, rxbuf);
+ return (unsigned int)rxbuf[0] << 8 | rxbuf[1];
+}
+
+void HDC1080::init()
+{
+ txbuf[0] = 0x02;
+ txbuf[1] = 0x08;
+ txbuf[2] = 0x00;
+ i2c.xmit(address, 3, txbuf, 0, rxbuf);
+ arch.delay_ms(15);
+}
+
+HDC1080 hdc1080;