bleSDK_expansion_board/projects/blezongkong/src/app_Time_Event.c

114 lines
3.7 KiB
C
Raw Normal View History

#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 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 (Events->delay == 1) {
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;
if(0xffff != Events->blinkCount) {Events->blinkCount--;}
Events->delay =1 + Events->Ms_off / Time_delay_interval;
} else {
Events->isOn = true;
Events->delay =1 + Events->Ms_on / Time_delay_interval;
}
} else {
Events->mode = Time_MODE_OFF;
}
break;
}
Event_Handle(i, Events->isOn,Events->Parameter);
}
if(Events->delay >= 1){
Events->delay--;
}
}
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 = 1;
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_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 =1 + Ms_delayoff;
Time_Events[ledIndex].Parameter=Parameter;
}
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_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_Events[ledIndex].Ms_off = Ms_off;
Time_Events[ledIndex].blinkCount = blinkCount;
Time_Events[ledIndex].delay =1 + Ms_on / Time_delay_interval;
Time_Events[ledIndex].Parameter=Parameter;
}