#include "b6x.h" #include "drvs.h" #include "dbg.h" #include "sys_config.h" static Time_Events_t Time_Events[Time_Event_MAX]; tmr_tk_t Time_Event_tmr_id; void Event_Handle(uint16_t Event_List ,bool isOn,void *Parameter){ // uart_putc(UART1_PORT,'E'); // uart_putc(UART1_PORT,'0'+Event_List); // uart_putc(UART1_PORT,'0'+isOn); // uart_putc(UART1_PORT,'\n'); (void)Parameter; switch(Event_List){ case Buzzer_Event: Set_Status(IO_TTL_TX,isOn); break; case Pmode_Timeout_Event: if(!isOn){ sys_sta.Pmode =0; } break; case GRB_WS2812_Event: GRB_WS2812_Write_color(WS2812_GRBs.len, isOn ? WS2812_GRBs.GRBs : 0x0); break; default: break; } } static tmr_tk_t Time_Event_Handle(tmr_id_t id) { for (uint16_t i = 0; i < Time_Event_MAX; i++) { Time_Events_t *Events = &Time_Events[i]; if(1 < Events->delay){ Events->delay--; }else if (1 == Events->delay--) { switch (Events->mode) { case Time_MODE_OFF: // 关闭 Events->isOn = false; break; case Time_MODE_ON: // 打开 Events->isOn = true; if(Events->Ms_delayoff){ Events->mode = Time_MODE_OFF; Events->delay =1 + Events->Ms_delayoff; Events->Ms_delayoff =0; } break; case Time_MODE_BLINK: // 闪烁 if (Events->blinkCount > 0) { if (Events->isOn) { Events->isOn = false; Events->delay =1 + Events->Ms_off; if(0xffff != Events->blinkCount) {Events->blinkCount--;} } else { Events->isOn = true; Events->delay =1 + Events->Ms_on; } } else { Events->mode = Time_MODE_OFF; } break; } Event_Handle(i, Events->isOn,Events->Parameter); } } return (Time_delay_interval / 10); } void Time_Event_Init(void) { for (uint16_t i = 0; i < Time_Event_MAX; i++) { Time_Events[i].mode = Time_MODE_OFF; Time_Events[i].delay = 0; Time_Events[i].Ms_on = 0; Time_Events[i].Ms_off = 0; Time_Events[i].blinkCount = 0; Time_Events[i].isOn = false; Time_Events[i].Parameter=NULL; } Time_Event_tmr_id = sftmr_start(10, Time_Event_Handle); } void Time_Event_On(uint16_t ledIndex,void *Parameter) { Time_Events[ledIndex].mode = Time_MODE_ON; Time_Events[ledIndex].delay = 1; Time_Events[ledIndex].Parameter=Parameter; } void Time_Event_Off(uint16_t ledIndex,void *Parameter) { Time_Events[ledIndex].mode = Time_MODE_OFF; Time_Events[ledIndex].delay = 1; Time_Events[ledIndex].Parameter=Parameter; } void Time_Event_DelayOff(uint16_t ledIndex ,uint16_t Ms_delayoff,void *Parameter) { Time_Events[ledIndex].mode = Time_MODE_ON; Time_Events[ledIndex].delay = 1; Time_Events[ledIndex].Ms_delayoff =Ms_delayoff / Time_delay_interval; Time_Events[ledIndex].Parameter=Parameter; } void Time_Event_Cancel_DelayOff(uint16_t ledIndex) { Time_Events[ledIndex].delay = 0; Time_Events[ledIndex].Ms_delayoff =0; Time_Events[ledIndex].Parameter =NULL; } void Time_Event_Blink(uint16_t ledIndex, uint16_t Ms_on, uint16_t Ms_off, uint16_t blinkCount,void *Parameter) { Time_Events[ledIndex].mode = Time_MODE_BLINK; Time_Events[ledIndex].Ms_on = Ms_on / Time_delay_interval; Time_Events[ledIndex].Ms_off = Ms_off / Time_delay_interval; Time_Events[ledIndex].blinkCount = blinkCount; Time_Events[ledIndex].delay =1 + Ms_on / Time_delay_interval; Time_Events[ledIndex].Parameter=Parameter; }