153 lines
5.0 KiB
C
153 lines
5.0 KiB
C
#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;
|
|
}
|
|
|