]> the.earth.li Git - temper-clone.git/commitdiff
Reset 1-Wire state if we get a USB reset
authorJonathan McDowell <noodles@earth.li>
Tue, 8 May 2018 20:45:13 +0000 (21:45 +0100)
committerJonathan McDowell <noodles@earth.li>
Tue, 8 May 2018 20:45:13 +0000 (21:45 +0100)
A client can decide to reset us if we fail to reply to USB messages
appropriately while doing the 1-Wire bits for temperature retrieval.
This may leave us in the state were we have a message ready to go,
but the client isn't going to read it. If we see a USB reset, reset
our state and clear any indication that we have a message to go.

libs-device/osccal.h
main.c

index 3452aa77e8c8b70a24df6647186c1c1c529827a1..a1fb2effe6243c4bfc642dc14163f908bd356b7c 100644 (file)
@@ -43,7 +43,8 @@ deviation! All other frequency modules require at least 0.2% precision.
 
 #ifndef __ASSEMBLER__
 void    calibrateOscillatorASM(void);
-#define USB_RESET_HOOK(resetStarts)  if(!resetStarts){ calibrateOscillatorASM();}
+void    hadUsbReset(void);
+#define USB_RESET_HOOK(resetStarts)  if(!resetStarts){ calibrateOscillatorASM(); hadUsbReset();}
 #endif
 /* This function calibrates the RC oscillator so that the CPU runs at F_CPU.
  * It MUST be called immediately after the end of a USB RESET condition!
diff --git a/main.c b/main.c
index 0adfed8cc246c636c0180b32bffe295d9fdc20ca..61064a084cbcc45ddf358d7437676c26a2db0155 100644 (file)
--- a/main.c
+++ b/main.c
@@ -358,6 +358,13 @@ usbMsgLen_t usbFunctionWrite(uint8_t * data, uchar len)
        return 0;
 }
 
+void hadUsbReset(void)
+{
+       /* Reset our state machine back to having nothing to send */
+       temp_state = 0;
+       have_temp_int = false;
+}
+
 int main(void)
 {
        unsigned char i;