#include "Watchdog.h"
+#include "Kernel.h"
#include <lpc17xx_wdt.h>
#include <mri.h>
+#include "gpio.h"
+extern GPIO leds[];
+
// TODO : comment this
// Basically, when stuff stop answering, reset, or enter MRI mode, or something
}
+// when watchdog triggers, set a led pattern and enter MRI which turns everything off into a safe state
+// TODO handle when MRI is disabled
extern "C" void WDT_IRQHandler(void)
{
- WDT_ClrTimeOutFlag();
+ if(THEKERNEL->is_using_leds()) {
+ // set led pattern to show we are in watchdog timeout
+ leds[0]= 0;
+ leds[1]= 1;
+ leds[2]= 0;
+ leds[3]= 1;
+ }
+
+ WDT_ClrTimeOutFlag(); // bootloader uses this flag to enter DFU mode
WDT_Feed();
__debugbreak();
}
kernel->streams->printf("WARNING Watchdog is disabled when DFU is enabled\n");
}else{
- // 5 second watchdog timeout (or config as seconds)
- float t= kernel->config->value( watchdog_timeout_checksum )->by_default(5.0F)->as_number();
+ // 10 second watchdog timeout (or config as seconds)
+ float t= kernel->config->value( watchdog_timeout_checksum )->by_default(10.0F)->as_number();
if(t > 0) {
- kernel->add_module( new Watchdog(t*1000000, WDT_RESET));
+ kernel->add_module( new Watchdog(t*1000000, WDT_MRI)); // WDT_RESET));
kernel->streams->printf("Watchdog enabled for %f seconds\n", t);
}else{
kernel->streams->printf("WARNING Watchdog is disabled\n");