diff main.c @ 16:8b1aeff120e9

add max/min sanity checks
author Matt Johnston <matt@ucc.asn.au>
date Thu, 13 Jun 2013 00:22:37 +0800
parents 915be6f0ff13
children 21717153e0f1
line wrap: on
line diff
--- a/main.c	Thu Jun 13 00:14:20 2013 +0800
+++ b/main.c	Thu Jun 13 00:22:37 2013 +0800
@@ -64,11 +64,21 @@
 // OCR1A ticks COUNTER_DIV(=4) times a second, we divide it down.
 static uint8_t counter_div = 0;
 
+#define WATCHDOG_LONG_MIN (60L*40) // 40 mins
+#define WATCHDOG_LONG_MAX (60L*60*72) // 72 hours
+#define WATCHDOG_LONG_DEFAULT (60L*60*6) // 6 hours
+
+#define WATCHDOG_SHORT_MIN (60L*15) // 15 mins
+
+#define NEWBOOT_DEFAULT (60*10) // 10 minutes
+#define NEWBOOT_MIN (60*2) // 2 minutes
+#define NEWBOOT_MAX (60*30) // 30 mins
+
 // eeprom-settable parameters, default values defined here. 
 // all timeouts should be a multiple of TICK
-static uint32_t watchdog_long_limit = (60L*60*24); // 6 hours
+static uint32_t watchdog_long_limit = WATCHDOG_LONG_DEFAULT;
 static uint32_t watchdog_short_limit = 0;
-static uint32_t newboot_limit = 60*10; // 10 minutes
+static uint32_t newboot_limit = NEWBOOT_DEFAULT;
 
 // avr proves itself
 static uint8_t avr_keys[NKEYS][KEYLEN] = {{0}};
@@ -517,6 +527,25 @@
         eeprom_read(newboot_limit, newboot_limit);
    }
 
+   if (watchdog_long_limit < WATCHDOG_LONG_MIN 
+    || watchdog_long_limit > WATCHDOG_LONG_MAX)
+   {
+    watchdog_long_limit = WATCHDOG_LONG_DEFAULT;
+   }
+
+   if (watchdog_short_limit != 0
+    && watchdog_short_limit < WATCHDOG_SHORT_MIN)
+   {
+    watchdog_short_limit = 0;
+   }
+
+   if (newboot_limit < NEWBOOT_MIN || newboot_limit > NEWBOOT_MAX)
+   {
+    newboot_limit = NEWBOOT_DEFAULT;
+   }
+
+   _Static_assert(NEWBOOT_MAX < WATCHDOG_LONG_MIN, "newboot max shorter than watchdog min");
+
    eeprom_read(avr_keys, avr_keys);
 }