X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fdrv%2Fwdt.h;h=faba48d9c6a36c16f832b351ff3aa4e66452483f;hb=976d522209efc4c11a019ae6b34657b6b3f59ba0;hp=15965e44cdda16b41e6a33dd0b99d34190de668b;hpb=4cc44c9888a0336b9d01121ec0b7ad95f4a76195;p=bertos.git diff --git a/bertos/drv/wdt.h b/bertos/drv/wdt.h index 15965e44..faba48d9 100644 --- a/bertos/drv/wdt.h +++ b/bertos/drv/wdt.h @@ -30,137 +30,96 @@ * * --> * - * \version $Id$ * * \author Bernie Innocenti * - * \brief Watchdog interface + * \brief Watchdog module, supplies a simple API to manage wdt on supported target. + * + * $WIZ$ module_name = "wdt" + * $WIZ$ module_configuration = "bertos/cfg/cfg_wdt.h" + * $WIZ$ module_supports = "avr" */ #ifndef DRV_WDT_H #define DRV_WDT_H #include "cfg/cfg_wdt.h" + #include // INLINE -#include "cfg/cfg_arch.h" /* Configury sanity check */ #if !defined(CONFIG_WATCHDOG) || (CONFIG_WATCHDOG != 0 && CONFIG_WATCHDOG != 1) #error CONFIG_WATCHDOG must be defined to either 0 or 1 #endif -#if CONFIG_WATCHDOG +#if OS_HOSTED #include #include #if OS_QT - #if _QT < 4 - #include - #else #include - #endif #elif OS_POSIX #include - #elif CPU_AVR - #include - #include // BV() - #if CPU_AVR_ATMEGA1281 // Name is different in atmega1281 - #define WDTCR WDTCSR - #endif - #elif defined(ARCH_FREERTOS) && (ARCH & ARCH_FREERTOS) - #include /* taskYIELD() */ #else #error unknown CPU #endif +#elif CONFIG_WATCHDOG + #include CPU_HEADER(wdt) #endif /* CONFIG_WATCHDOG */ -/** - * Reset the watchdog timer. - */ -INLINE void wdt_reset(void) -{ -#if CONFIG_WATCHDOG - #if OS_QT - // Let Qt handle events - ASSERT(qApp); - qApp->processEvents(); - #elif OS_POSIX - static struct timeval tv = { 0, 0 }; - select(0, NULL, NULL, NULL, &tv); - #elif defined(ARCH_FREERTOS) && (ARCH & ARCH_FREERTOS) - vTaskDelay(1); - #elif CPU_AVR - __asm__ __volatile__ ("wdr"); - #else - #error unknown CPU - #endif -#endif /* CONFIG_WATCHDOG */ -} -/** - * Set watchdog timer timeout. - * - * \param timeout 0: 16.3ms, 7: 2.1s - */ -INLINE void wdt_init(uint8_t timeout) -{ -#if CONFIG_WATCHDOG - #if OS_QT - // Create a dummy QApplication object - if (!qApp) - { - int argc; - new QApplication(argc, (char **)NULL); - } - (void)timeout; - #elif OS_POSIX - (void)timeout; // NOP - #elif defined(ARCH_FREERTOS) && (ARCH & ARCH_FREERTOS) - /* nop */ - #elif CPU_AVR - WDTCR |= BV(WDCE) | BV(WDE); - WDTCR = timeout; - #else - #error unknown CPU - #endif -#else - (void)timeout; -#endif /* CONFIG_WATCHDOG */ -} +#if OS_HOSTED || !CONFIG_WATCHDOG -INLINE void wdt_start(void) -{ -#if CONFIG_WATCHDOG - #if OS_QT - // NOP - #elif OS_POSIX - // NOP - #elif defined(ARCH_FREERTOS) && (ARCH & ARCH_FREERTOS) - /* nop */ - #elif CPU_AVR - WDTCR |= BV(WDE); - #else - #error unknown CPU - #endif -#endif /* CONFIG_WATCHDOG */ -} + /** + * Reset the watchdog timer. + */ + INLINE void wdt_reset(void) + { + #if CONFIG_WATCHDOG + #if OS_POSIX + static struct timeval tv = { 0, 0 }; + select(0, NULL, NULL, NULL, &tv); + #endif + #endif /* CONFIG_WATCHDOG */ + } -INLINE void wdt_stop(void) -{ -#if CONFIG_WATCHDOG - #if OS_QT - // NOP - #elif OS_POSIX - // NOP - #elif defined(ARCH_FREERTOS) && (ARCH & ARCH_FREERTOS) - /* nop */ - #elif CPU_AVR - WDTCR |= BV(WDCE) | BV(WDE); - WDTCR &= ~BV(WDE); - #else - #error unknown CPU - #endif -#endif /* CONFIG_WATCHDOG */ -} + /** + * Start the watchdog timer that fire at the select + * timeout. + * + * \param timeout this value is target dependant. + * See the target documentation for more details. + */ + INLINE void wdt_start(uint32_t timeout) + { + #if CONFIG_WATCHDOG + #if OS_QT + // Create a dummy QApplication object + if (!qApp) + { + int argc; + new QApplication(argc, (char **)NULL); + } + (void)timeout; + #elif OS_POSIX + (void)timeout; // NOP + #endif + #endif /* CONFIG_WATCHDOG */ + (void)timeout; // NOP + } + + INLINE void wdt_stop(void) + { + #if CONFIG_WATCHDOG + #if OS_QT + // NOP + #elif OS_POSIX + // NOP + #else + #error unknown CPU + #endif + #endif /* CONFIG_WATCHDOG */ + } +#endif /* OS_HOSTED || !CONFIG_WATCHDOG */ #endif /* DRV_WDT_H */