From: Jim Morris Date: Mon, 9 Nov 2015 21:03:57 +0000 (-0800) Subject: make watch dog timeout enter mri mode X-Git-Url: http://git.hcoop.net/clinton/Smoothieware.git/commitdiff_plain/0333ccb42f97d7a352e6ff255a8b47ef42261a63 make watch dog timeout enter mri mode set a led pattern to indicate what happened --- diff --git a/src/libs/Watchdog.cpp b/src/libs/Watchdog.cpp index 1bee2648..c031fb13 100644 --- a/src/libs/Watchdog.cpp +++ b/src/libs/Watchdog.cpp @@ -1,9 +1,13 @@ #include "Watchdog.h" +#include "Kernel.h" #include #include +#include "gpio.h" +extern GPIO leds[]; + // TODO : comment this // Basically, when stuff stop answering, reset, or enter MRI mode, or something @@ -31,9 +35,19 @@ void Watchdog::on_idle(void*) } +// 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(); } diff --git a/src/main.cpp b/src/main.cpp index 41e7ecf6..39ee9577 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -208,10 +208,10 @@ void init() { 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");