#include "b6x.h" #include "drvs.h" #include "dbg.h" #include "sys_config.h" #define DBG_TIME_ENEVT 0 #if (DBG_TIME_ENEVT) #include "dbg.h" #define DEBUG(format, ...) debug("[TR_ET]" format "\r\n", ##__VA_ARGS__) #else #define DEBUG(format, ...) //#define debugHex(dat, len) #endif 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){ DEBUG("Pmode_Timeout_Event\n\nERROR\n\n"); // sys_sta.Pmode =0; } break; case GRB_WS2812_Event: if(0x01 == (sys_sta.Pmode | sys_sta.Smode)){ GRB_WS2812_Write_color(WS2812_GRBs.len, isOn ? WS2812_GRBs.GRBs : 0x0); }else{ GRB_WS2812_Write_color(WS2812_GRBs.len, isOn ? GRB_ORANGE : 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){ DEBUG("OffDelay:%d,delay:%d\n",i,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);//1; } 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_Events[i].Ms_delayoff =0; DEBUG("Delay:%d,%dms",i, Time_Events[i].Ms_delayoff); } Time_Event_tmr_id = sftmr_start(10, Time_Event_Handle); } void Time_Event_On(uint16_t ledIndex,void *Parameter) { DEBUG("On:%d",ledIndex); Time_Events[ledIndex].mode = Time_MODE_ON; Time_Events[ledIndex].delay = 1; // Time_Events[ledIndex].Ms_delayoff =0; Time_Events[ledIndex].Parameter=Parameter; } void Time_Event_Off(uint16_t ledIndex,void *Parameter) { DEBUG("Off:%d",ledIndex); Time_Events[ledIndex].mode = Time_MODE_OFF; Time_Events[ledIndex].delay = 1; // Time_Events[ledIndex].Ms_delayoff =0; Time_Events[ledIndex].Parameter=Parameter; } void Time_Event_DelayOff(uint16_t ledIndex ,uint16_t Ms_delayoff,void *Parameter) { DEBUG("Delay:%d,%dms",ledIndex, Ms_delayoff); if(0 == Ms_delayoff/Time_delay_interval){return;} 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) { DEBUG("Cancel:%d",ledIndex); Time_Events[ledIndex].mode = Time_MODE_OFF; 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) { DEBUG("Blink:%d,on%dms,off%dms,count%d",ledIndex, Ms_on, Ms_off, blinkCount); 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; }