114 lines
3.7 KiB
C
114 lines
3.7 KiB
C
|
|
#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;
|
||
|
|
}
|
||
|
|
|