#include "timer.h" #include "stdint.h" #include "string.h" #define HAL_TIMER_NUM 32 typedef struct { HAL_TimerCB_fp s_sTimerCallback; uint8_t position; int timerReload; int tick; } HAL_TIMER_CALLBACK; static HAL_TIMER_CALLBACK Timer_Callback[HAL_TIMER_NUM]; void timer_tick_check(void) { int i; for (i = 0; i < HAL_TIMER_NUM; i++) { if (Timer_Callback[i].s_sTimerCallback != NULL) { if (++Timer_Callback[i].tick >= Timer_Callback[i].timerReload) { Timer_Callback[i].tick = 0; Timer_Callback[i].s_sTimerCallback(); } } } } uint8_t timer_register(HAL_TimerCB_fp callback, int timerReload) { uint8_t handle = 0; int i; for (i = 0; i < HAL_TIMER_NUM; i++) { if (Timer_Callback[i].s_sTimerCallback == callback) { Timer_Callback[i].timerReload = timerReload; Timer_Callback[i].tick = 0; handle = i; return handle; } } for (i = 0; i < HAL_TIMER_NUM; i++) { if (Timer_Callback[i].s_sTimerCallback == NULL) { Timer_Callback[i].s_sTimerCallback = callback; Timer_Callback[i].position = i; Timer_Callback[i].timerReload = timerReload; Timer_Callback[i].tick = 0; handle = i; break; } } return handle; } int timer_unregister(uint8_t *handle) { uint8_t timer_index = *handle; if (handle == NULL) { return -1; } if (timer_index > HAL_TIMER_NUM) { return -2; } if (0xff != timer_index) { Timer_Callback[timer_index].s_sTimerCallback = NULL; Timer_Callback[timer_index].timerReload = 0; Timer_Callback[timer_index].tick = 0; *handle = 0xff; } return 0; }