bleSDK_expansion_board/projects/blezongkong/src/app_Time_Event.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;
}