]> the.earth.li Git - temper-clone.git/blobdiff - main.c
Remove unused read_temp() function
[temper-clone.git] / main.c
diff --git a/main.c b/main.c
index 4e3d72c3c4667e5a55a9713d8eff3466b8d9e0b8..bcc4008fb06047bb719be722feeba1a856712947 100644 (file)
--- a/main.c
+++ b/main.c
@@ -30,6 +30,7 @@
 #include "usbdrv.h"
 #include "libs-device/osccal.h"
 
+#include "timer.h"
 #include "w1.h"
 
 typedef struct {
@@ -40,6 +41,8 @@ typedef struct {
 keyboard_report_t keyboard_report;
 
 uint8_t temp_state = 0;
+uint16_t last_temp = 0xFFFD;
+#define TEMP_INTERVAL (10 * 1000)
 
 uint8_t temp_report[8];
 bool have_temp_int = false;
@@ -218,36 +221,6 @@ void set_serial(void)
        }
 }
 
-uint16_t read_temp(void)
-{
-       uint8_t buf[9];
-
-       cli();
-       if (!w1_reset()) {
-               return 0xFFFF;
-               sei();
-       }
-
-       w1_write(0xCC);         /* SKIP ROM */
-       w1_write(0x44);         /* Convert T */
-
-       do {
-               w1_read(buf, 1);
-       } while (buf[0] != 0xFF);
-
-       if (!w1_reset()) {
-               return 0xFFFF;
-               sei();
-       }
-
-       w1_write(0xCC);         /* SKIP ROM */
-       w1_write(0xBE);         /* Read Scratchpad */
-       w1_read(buf, 9);
-       sei();
-
-       return buf[2] << 8 | buf[1];
-}
-
 usbMsgLen_t usbFunctionDescriptor(usbRequest_t *rq)
 {
        if (rq->wValue.bytes[1] == USBDESCR_STRING &&
@@ -335,9 +308,11 @@ usbMsgLen_t usbFunctionWrite(uint8_t * data, uchar len)
                if (data[1] == 0x80 && data[2] == 0x33 && data[3] == 1) {
                        /* Temperature query */
                        memset(temp_report, 0, 8);
-                       temp_state = 1;
+                       have_temp_int = true;
                        temp_report[0] = 0x80;
                        temp_report[1] = 2;
+                       temp_report[2] = last_temp >> 8;
+                       temp_report[3] = last_temp & 0xFF;
                } else if (data[1] == 0x82 && data[2] == 0x77 &&
                                data[3] == 1) {
                        /* Initialisation Query #1 */
@@ -369,11 +344,13 @@ int main(void)
 {
        unsigned char i;
        uint8_t buf[9];
+       unsigned long last_temp_time = 0;
 
        wdt_enable(WDTO_1S);
 
        w1_setup();
        set_serial();
+       timer_init();
 
        usbDeviceDisconnect();
        i = 0;
@@ -411,45 +388,43 @@ int main(void)
 
                if (temp_state == 1) {
                        if (w1_reset()) {
-                               temp_state = 2;
+                               temp_state++;
                        } else {
-                               temp_report[2] = 0xFF;
-                               temp_report[3] = 0xFF;
-                               have_temp_int = true;
                                temp_state = 0;
                        }
                } else if (temp_state == 2) {
                        w1_write(0xCC);         /* SKIP ROM */
-                       temp_state = 3;
+                       temp_state++;
                } else if (temp_state == 3) {
                        w1_write(0x44);         /* Convert T */
-                       temp_state = 4;
+                       temp_state++;
                } else if (temp_state == 4) {
                        if (w1_read_bit())
-                               temp_state = 5;
+                               temp_state++;
                } else if (temp_state == 5) {
                        if (w1_reset()) {
-                               temp_state = 6;
+                               temp_state++;
                        } else {
-                               temp_report[2] = 0xFF;
-                               temp_report[3] = 0xFE;
-                               have_temp_int = true;
                                temp_state = 0;
                        }
                } else if (temp_state == 6) {
                        w1_write(0xCC);         /* SKIP ROM */
-                       temp_state = 7;
+                       temp_state++;
                } else if (temp_state == 7) {
                        w1_write(0xBE);         /* Read Scratchpad */
-                       temp_state = 8;
+                       temp_state++;
                } else if (temp_state > 7 && temp_state < 17) {
                        buf[temp_state - 8] = w1_read_byte();
                        temp_state++;
                } else if (temp_state == 17) {
-                       temp_report[2] = buf[1] << 4 | buf[0] >> 4;
-                       temp_report[3] = buf[0] << 4;
-                       have_temp_int = true;
+                       last_temp = buf[1] << 12 | buf[0] << 4;
                        temp_state = 0;
+                       last_temp_time = millis();
+               }
+
+               if (temp_state == 0 &&
+                               (millis() - last_temp_time) > TEMP_INTERVAL) {
+                       temp_state = 1;
                }
        }
 }