padelt / pcsensor-temper

libusb-based driver to read TEMPer USB HID devices (USB ID 0c45:7401)
22 stars 17 forks source link

Temperature is signed, especially below zero #4

Open btbouwens opened 9 years ago

btbouwens commented 9 years ago

Below freezing point I got readings of 255.82, which is obviously incorrect. I tried this, and it seems fine:

diff --git a/src/pcsensor.c b/src/pcsensor.c
index 56fb787..31018a2 100644
--- a/src/pcsensor.c
+++ b/src/pcsensor.c
@@ -258,7 +258,7 @@ void interrupt_read(usb_dev_handle *dev) {
 void interrupt_read_temperatura(usb_dev_handle *dev, float *tempC) {

     int r,i, temperature;
-    unsigned char answer[reqIntLen];
+    char answer[reqIntLen];
     bzero(answer, reqIntLen);

     r = usb_interrupt_read(dev, 0x82, answer, reqIntLen, timeout);
@@ -274,9 +274,9 @@ void interrupt_read_temperatura(usb_dev_handle *dev, float *tempC) {
       printf("\n");
     }

-    temperature = (answer[3] & 0xFF) + (answer[2] << 8);
+    temperature = (answer[3] & 0xFF) | (answer[2] << 8);
     temperature += calibration;
-    *tempC = temperature * (125.0 / 32000.0);
+    *tempC = temperature / 256.0;

 }