forked from gary/BCU
2
0
Fork 0
BCU/library/bsp/bsp_event.c

78 lines
2.2 KiB
C

#include "bsp_event.h"
#include "kit_data.h"
#include "kit_debug.h"
kit_ret_e bsp_event_register(EventItem *item, uint32_t enable_dly, uint32_t disable_dly, EventCall call)
{
kit_ret_e res = kKit_Ret_ParamErr;
EventParamArrary *param_arr;
KIT_ASSERT_PARAM((item != NULL) && (call != NULL));
if((item != NULL) && (call != NULL) && (item->cur_cnt < item->cnt))
{
param_arr = &item->param_arr[item->cur_cnt];
param_arr->pre_call = call;
param_arr->enable_dly = enable_dly;
param_arr->disable_dly = disable_dly;
item->cur_cnt++;
res = kKit_Ret_Ok;
}
return res;
}
void bsp_event_poll(EventItem *item, uint16_t base_time)
{
uint32_t i;
EventParamArrary *param;
KIT_ASSERT_PARAM(item != NULL);
KIT_ASSERT_PARAM(base_time > 0);
if(item != NULL)
{
for(i = 0; i < item->cnt; i++)
{
param = &item->param_arr[i];
if((param->pre_call != NULL) && (param->enable_dly != 0))
{
param->pre_call(item, i);
if(KIT_GET_BIT_32(item->flag, i) != 0)
{
if(item->disable_cond == true)
{
param->tick += base_time;
if(param->tick >= param->disable_dly)
{
KIT_CLR_BIT_32(item->flag, i);
param->tick = 0;
}
}
else
{
param->tick = 0;
}
}
else
{
if(item->enable_cond == true)
{
param->tick += base_time;
if(param->tick >= param->enable_dly)
{
KIT_SET_BIT_MASK_32(item->flag, i);
param->tick = 0;
}
}
else
{
param->tick = 0;
}
}
}
}
}
}