You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.4 KiB
87 lines
2.4 KiB
#include "sw_timer.h"
|
|
|
|
|
|
|
|
|
|
typedef struct _timer_callback_info
|
|
{
|
|
SW_TIMER_CALLBACK_TYPE SW_Callback_Type;
|
|
uint32_t SW_Timer_StartTick;
|
|
uint32_t SW_Timer_PeriodCount;
|
|
void* pSW_Timer_Patameter;
|
|
SW_TIMER_CALLBACK_FN SW_Timer_CallbackFunction;
|
|
}SW_TIMER_INFO;
|
|
|
|
|
|
static SW_TIMER_INFO SW_Timer_Info[MAX_SW_TIMER_REGISTER_COUNT];
|
|
|
|
|
|
|
|
bool SW_Timer_Callback_Register(SW_TIMER_CALLBACK_TYPE type, uint32_t PeriodTime, SW_TIMER_CALLBACK_FN pTimerCallback)
|
|
{
|
|
uint8_t i;
|
|
bool ret = false;
|
|
|
|
for(i = 0 ; i < MAX_SW_TIMER_REGISTER_COUNT ; i++)
|
|
{
|
|
if(SW_Timer_Info[i].SW_Timer_CallbackFunction == NULL)
|
|
{
|
|
SW_Timer_Info[i].SW_Callback_Type = type;
|
|
SW_Timer_Info[i].SW_Timer_StartTick = millis();
|
|
SW_Timer_Info[i].SW_Timer_PeriodCount = PeriodTime;
|
|
SW_Timer_Info[i].SW_Timer_CallbackFunction = pTimerCallback;
|
|
ret = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
bool SW_Timer_Callback_UnRegister(SW_TIMER_CALLBACK_FN pSwTimerCallbackFunc)
|
|
{
|
|
uint8_t i;
|
|
bool ret = false;
|
|
|
|
for(i = 0 ; i < MAX_SW_TIMER_REGISTER_COUNT ; i++)
|
|
{
|
|
if(SW_Timer_Info[i].SW_Timer_CallbackFunction == pSwTimerCallbackFunc)
|
|
{
|
|
SW_Timer_Info[i].SW_Callback_Type = SW_TIMER_RUN_NONE;
|
|
SW_Timer_Info[i].SW_Timer_CallbackFunction = NULL;
|
|
ret = true;
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
void SW_Timer_Callback_Process(void)
|
|
{
|
|
uint8_t i;
|
|
uint32_t nowTickCount = millis();
|
|
|
|
for(i = 0 ; i < MAX_SW_TIMER_REGISTER_COUNT ; i++)
|
|
{
|
|
if(SW_Timer_Info[i].SW_Timer_CallbackFunction != NULL &&
|
|
SW_Timer_Info[i].SW_Callback_Type != SW_TIMER_RUN_NONE)
|
|
{
|
|
if((nowTickCount - SW_Timer_Info[i].SW_Timer_StartTick) >= SW_Timer_Info[i].SW_Timer_PeriodCount)
|
|
{
|
|
if(SW_Timer_Info[i].SW_Callback_Type == SW_TIMER_RUN_ONNY_ONCE)
|
|
{
|
|
SW_Timer_Info[i].SW_Timer_StartTick = 0xFFFFFFFF;
|
|
SW_Timer_Info[i].SW_Callback_Type = SW_TIMER_RUN_NONE;
|
|
SW_Timer_Info[i].SW_Timer_CallbackFunction();
|
|
SW_Timer_Info[i].SW_Timer_CallbackFunction = NULL;
|
|
}
|
|
else
|
|
{
|
|
SW_Timer_Info[i].SW_Timer_CallbackFunction();
|
|
SW_Timer_Info[i].SW_Timer_StartTick = nowTickCount;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|