void system_monitor_thread_main( wiced_thread_arg_t arg ) { UNUSED_PARAMETER(arg); memset(system_monitors, 0, sizeof(system_monitors)); if (wiced_rtos_init_semaphore(&system_monitor_thread_semaphore) != WICED_SUCCESS) { wiced_assert("semaphore init failed", 0); } /* - Can watch threads * Each thread can set a counter that is decremented every event. * Once any timer == 0, the watchdog is no longer kicked * * - Can watch packet buffer status * If no RX packets are available, take timestamp (T). If (current time - T) > X seconds, stop kicking watchdog. * X can be 10 second default. Time will be set to zero once RX buffer is freed * * - Can watch bus data credits * If no credits are available, take timestamp (B). If (current time - B) > X seconds, stop kicking watchdog. * This will be dependent on if WLAN is up. Timer will be set to 0 if credits become available. */ while (1) { int a; uint32_t current_time = host_rtos_get_time(); for (a = 0; a < MAXIMUM_NUMBER_OF_SYSTEM_MONITORS; ++a) { if (system_monitors[a] != NULL) { if ((current_time - system_monitors[a]->last_update) > system_monitors[a]->longest_permitted_delay) { /* A system monitor update period has been missed and hence explicitly resetting the MCU rather than waiting for the watchdog to bite */ wiced_framework_reboot(); } } } wiced_watchdog_kick(); wiced_rtos_get_semaphore(&system_monitor_thread_semaphore, DEFAULT_SYSTEM_MONITOR_PERIOD); } /* Should never get here */ wiced_rtos_deinit_semaphore(&system_monitor_thread_semaphore); WICED_END_OF_CURRENT_THREAD( ); }
static void gpio_interrupt_key_handler( void* arg ) { gpio_key_internal_t* key = (gpio_key_internal_t*)arg; if ( key != NULL ) { gpio_keypad_internal_t* keypad = key->owner; uint32_t current_time; wiced_watchdog_kick( ); wiced_time_get_time( ¤t_time ); if ( ( current_time - key->last_irq_timestamp > DEBOUNCE_TIME_MS ) && ( keypad->current_key_pressed == 0 ) ) { wiced_time_get_time( &key->last_irq_timestamp ); wiced_rtos_send_asynchronous_event( keypad->thread, key_pressed_event_handler, (void*)key ); } } }
uint32_t HAL_WLAN_SetNetWatchDog(uint32_t timeOutInMS) { wiced_watchdog_kick(); return 0; }