component watchdog "Monitor an input bit or counter and set a flag if it stops updating"; pin in bit in-bit = 0; pin in s32 in-s32 = 0; pin in u32 in-u32 = 0; pin out bit out = 1; pin out bit not-out = 0; pin io bit reset = 0; param rw float timeout = 0.5; param rw float initial-timeout = 5; variable double timer=0; variable double timeout_value=0; variable hal_bit_t last_bit; variable hal_s32_t last_s32; variable hal_u32_t last_u32; variable int initialised = 0; function _; license "GPL"; author "Frank Tkalcevic"; ;; if ( !initialised ) { out = 1; not_out = 0; timer = 0; initialised = 1; timeout_value=initial_timeout; } else { if ( in_bit != last_bit ) { timeout_value=timeout; timer = 0; } if ( in_s32 != last_s32 ) { timeout_value=timeout; timer = 0; } if ( in_u32 != last_u32 ) { timeout_value=timeout; timer = 0; } timer += fperiod; if ( timer > timeout ) { out = 0; not_out = 1; } if ( reset ) { out = 1; not_out = 0; reset = 0; } } last_bit = in_bit; last_s32 = in_s32; last_u32 = in_u32;