Files
BLV_C1F_Module/BasicCode/Drive/KEY/key.c
caocong 95916b9995 fix:修改UDP通讯中,取电变化上报机制
1、问题点:当RCU网络状态异常的情况下,网络还处于协商状态下,还未进入正常通讯环节时,取电变化不会进行判断。这会导致取电变化上报与实际产生取电状态时间点对不上。
2、将BLV_C1F_Module代码上传至Gitea,之前代码修改记录请查看 .\BasicCode\Readme.txt
2026-01-23 09:23:12 +08:00

507 lines
20 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "includes.h"
#include "BLV_Nor_Dev_LVoutputFun.h"
#include "BLV_485_Dev_C12DimFun.h"
#include "BLV_Nor_Dev_HVoutFun.h"
///************2022.11.22 林开锐 增加侧面键功能函数开始************/
//#define SIDE_KEY_INIT 0x80 //侧面键初始化完成
//#define C12_SIDE_KEY 0x40 //C12侧面键
//#define C5_SIDE_KEY 0x20 //C5侧面键
//#define SIDE_KEY_FUNCTION 0x60 //按键功能
///*******************************************************************************
//* Function Name : Side_Key_C12
//* Description : C12侧面键
//* Input : lvoutput_addr - 弱电输出设备存在链表地址
// c12dimming_addr - C12调光设备存在链表地址
// relay_addr - 强电继电器设备存在链表地址
//* Return : none
//*******************************************************************************/
//void Side_Key_C12(uint32_t lvoutput_addr,uint32_t c12dimming_addr,uint32_t relay_addr)
//{
// static uint8_t press = 0; //按键按下次数
// uint8_t lvoutput_write_flag = 0, c12dimming_write_flag = 0, relay_write_flag = 0; //弱电输出C12调光强电继电器写入SRAM标志 0不写入 1写入
// Device_Public_Information_G LVOUTPUT_public_info; //弱电输出共有属性
// NOR_LVOUTPUT_INFO LVOUTPUT_private_info; //弱电输出私有属性
// Device_Public_Information_G C12DIMMING_public_info; //C12调光共有属性
// RS485_LED_INFO C12DIMMING_private_info; //C12调光私有属性
// Device_Public_Information_G RELAY_public_info; //继电器共有属性
// NOR_HVOUT_INFO RELAY_private_info; //继电器私有属性
//
// memset(&LVOUTPUT_public_info, 0, sizeof(Device_Public_Information_G)); //初始化弱电输出公有属性
// memset(&LVOUTPUT_private_info, 0, sizeof(NOR_LVOUTPUT_INFO)); //初始化弱电输出私有属性
// SRAM_DMA_Read_Buff((uint8_t *)&LVOUTPUT_public_info, sizeof(Device_Public_Information_G), lvoutput_addr); //读取弱电输出共有属性
// SRAM_DMA_Read_Buff((uint8_t *)&LVOUTPUT_private_info, sizeof(NOR_LVOUTPUT_INFO), lvoutput_addr + Dev_Privately); //读取弱电输出私有属性
//
// memset(&C12DIMMING_public_info, 0, sizeof(Device_Public_Information_G)); //初始化C12调光公有属性
// memset(&C12DIMMING_private_info, 0, sizeof(RS485_LED_INFO)); //初始化C12调光回路属性
// SRAM_DMA_Read_Buff((uint8_t *)&C12DIMMING_public_info, sizeof(Device_Public_Information_G), c12dimming_addr); //读取C12调光共有属性
// SRAM_DMA_Read_Buff((uint8_t *)&C12DIMMING_private_info, sizeof(RS485_LED_INFO), c12dimming_addr + Dev_Privately); //读取C12调光私有属性
//
// memset(&RELAY_public_info, 0, sizeof(Device_Public_Information_G)); //初始化继电器公有属性
// memset(&RELAY_private_info, 0, sizeof(NOR_HVOUT_INFO)); //初始化继电器回路属性
// SRAM_DMA_Read_Buff((uint8_t *)&RELAY_public_info, sizeof(Device_Public_Information_G), relay_addr); //读取继电器共有属性
// SRAM_DMA_Read_Buff((uint8_t *)&RELAY_private_info, sizeof(NOR_HVOUT_INFO), relay_addr + Dev_Privately); //读取继电器私有属性
// press++;
// if(press > 27) press = 1; //超过27次清除状态27次之后,按键次数设为1
// if(press > 0 && press <= 12) //打开C12板上调光
// {
// if(press > 0 && press <= 6) //前5次控弱电输出之后就不控
// {
// LVOUTPUT_private_info.DevLVoutputState[0] = 0x00;
// LVOUTPUT_private_info.DevLVoutputState[1] = 0x00;
// LVOUTPUT_private_info.DevLVoutputState[2] = 0x00;
// LVOUTPUT_private_info.DevLVoutputState[3] = 0x00;
// LVOUTPUT_private_info.DevLVoutputState[4] = 0x00;
// if(press != 6) UINT64DATACONVER(LVOUTPUT_private_info.DevLVoutputState) |= (0x01<<(press-1)); //第1~5次控制弱电输出0~4状态
// lvoutput_write_flag = 1; //弱电输出写入
// }
// memset(C12DIMMING_private_info.DevSendBuf, 0x00, 12); //C12调光亮度赋值亮度值0相当于关
// C12DIMMING_private_info.DevSendBuf[press-1] = 0x50; //C12调光亮度赋值
// c12dimming_write_flag = 1; //C12调光写入
// }
// if(press > 12 && press <= 25) //打开C12板上继电器
// {
// if(press == 13)
// {
// memset(C12DIMMING_private_info.DevSendBuf, 0x00, 12); //C12调光亮度赋值亮度值0相当于关
// c12dimming_write_flag = 1; //C12调光写入
// }
// UINT64DATACONVER(RELAY_private_info.DevHVoutState) &= ~(0x1FFF); //关闭继电器0~11
// UINT64DATACONVER(RELAY_private_info.DevHVoutState) |= (0x01<<(press - 13)); //打开继电器
// relay_write_flag = 1; //强电继电器写入
// }
// if(press == 26) //C12调光和继电器全开
// {
// UINT64DATACONVER(LVOUTPUT_private_info.DevLVoutputState) |= 0x1F; //打开弱电输出0~4状态
// memset(C12DIMMING_private_info.DevSendBuf, 0x50, 12); //C12调光亮度赋值
// UINT64DATACONVER(RELAY_private_info.DevHVoutState) |= 0x1FFF; //打开继电器
// lvoutput_write_flag = 1; //弱电输出写入
// c12dimming_write_flag = 1; //C12调光写入
// relay_write_flag = 1; //强电继电器写入
// }
// if(press == 27) //C12调光和继电器全关
// {
// UINT64DATACONVER(LVOUTPUT_private_info.DevLVoutputState) &= ~(0x1F); //关闭弱电输出0~4状态
// memset(C12DIMMING_private_info.DevSendBuf, 0x00, 12); //C12调光亮度赋值亮度值0相当于关
// UINT64DATACONVER(RELAY_private_info.DevHVoutState) &= ~(0x1FFF); //关闭继电器0~11
// lvoutput_write_flag = 1; //弱电输出写入
// c12dimming_write_flag = 1; //C12调光写入
// relay_write_flag = 1; //强电继电器写入
// }
// if(lvoutput_write_flag == 1) //弱电输出写入SRAM
// {
// LVOUTPUT_public_info.check = 0x00; //弱电输出共有属性校验清0
// LVOUTPUT_public_info.check = DoubleData_CheckSum((uint8_t *)&LVOUTPUT_public_info, sizeof(Device_Public_Information_G), \
// (uint8_t *)&LVOUTPUT_private_info, sizeof(NOR_LVOUTPUT_INFO)); //计算校验
// SRAM_DMA_Write_Buff((uint8_t *)&LVOUTPUT_public_info, sizeof(Device_Public_Information_G), lvoutput_addr); //保存弱电输出共有属性到SRAM
// SRAM_DMA_Write_Buff((uint8_t *)&LVOUTPUT_private_info, sizeof(NOR_LVOUTPUT_INFO), lvoutput_addr + Dev_Privately); //保存弱电输出私有属性到SRAM
// }
// if(c12dimming_write_flag == 1) //C12调光写入SRAM
// {
// C12DIMMING_public_info.check = 0x00; //C12共有属性校验清0
// C12DIMMING_public_info.check = DoubleData_CheckSum((uint8_t *)&C12DIMMING_public_info, sizeof(Device_Public_Information_G), \
// (uint8_t *)&C12DIMMING_private_info, sizeof(RS485_LED_INFO)); //计算校验
// SRAM_DMA_Write_Buff((uint8_t *)&C12DIMMING_public_info, sizeof(Device_Public_Information_G), c12dimming_addr); //保存C12共有属性到SRAM
// SRAM_DMA_Write_Buff((uint8_t *)&C12DIMMING_private_info, sizeof(RS485_LED_INFO), c12dimming_addr + Dev_Privately); //保存C12私有属性到SRAM
// }
// if(relay_write_flag == 1) //强电继电器写入SRAM
// {
// RELAY_public_info.check = 0x00; //继电器共有属性校验清0
// RELAY_public_info.check = DoubleData_CheckSum((uint8_t *)&RELAY_public_info, sizeof(Device_Public_Information_G), \
// (uint8_t *)&RELAY_private_info, sizeof(NOR_HVOUT_INFO)); //计算校验
// SRAM_DMA_Write_Buff((uint8_t *)&RELAY_public_info, sizeof(Device_Public_Information_G), relay_addr); //保存继电器共有属性到SRAM
// SRAM_DMA_Write_Buff((uint8_t *)&RELAY_private_info, sizeof(NOR_HVOUT_INFO), relay_addr + Dev_Privately); //保存继电器私有属性到SRAM
// }
// Dbg_Print(DBG_BIT_LOGIC_STATUS_bit,"侧面键按下次数为:%d",press);
//}
///*******************************************************************************
//* Function Name : Side_Key_C5
//* Description : C5侧面键
//* Input : lvoutput_addr - 弱电输出设备存在链表地址
// hvout_addr - 强电继电器设备存在链表地址
//* Return : none
//*******************************************************************************/
//void Side_Key_C5(uint32_t lvoutput_addr,uint32_t relay_addr)
//{
// static uint8_t press = 0; //按键按下次数
// uint8_t lvoutput_write_flag = 0; //弱电输出写入SRAM标志 0不写入 1写入
// Device_Public_Information_G LVOUTPUT_public_info; //弱电输出共有属性
// NOR_LVOUTPUT_INFO LVOUTPUT_private_info; //弱电输出私有属性
// Device_Public_Information_G RELAY_public_info; //继电器共有属性
// NOR_HVOUT_INFO RELAY_private_info; //继电器私有属性
//
// memset(&LVOUTPUT_public_info, 0, sizeof(Device_Public_Information_G)); //初始化弱电输出公有属性
// memset(&LVOUTPUT_private_info, 0, sizeof(NOR_LVOUTPUT_INFO)); //初始化弱电输出私有属性
// SRAM_DMA_Read_Buff((uint8_t *)&LVOUTPUT_public_info, sizeof(Device_Public_Information_G), lvoutput_addr); //读取弱电输出共有属性
// SRAM_DMA_Read_Buff((uint8_t *)&LVOUTPUT_private_info, sizeof(NOR_LVOUTPUT_INFO), lvoutput_addr + Dev_Privately); //读取弱电输出私有属性
//
// memset(&RELAY_public_info, 0, sizeof(Device_Public_Information_G)); //初始化继电器公有属性
// memset(&RELAY_private_info, 0, sizeof(NOR_HVOUT_INFO)); //初始化继电器私有属性
// SRAM_DMA_Read_Buff((uint8_t *)&RELAY_public_info, sizeof(Device_Public_Information_G), relay_addr); //读取继电器共有属性
// SRAM_DMA_Read_Buff((uint8_t *)&RELAY_private_info, sizeof(NOR_HVOUT_INFO), relay_addr + Dev_Privately); //读取继电器私有属性
// press++;
// if(press > 26) press = 1; //超过26次清除状态26次之后,按键次数设为1
// if(press > 0 && press <= 24) //C5板上弱电输出和继电器
// {
// if(press > 0 && press <= 6) //前5次控弱电输出之后就不控
// {
// UINT64DATACONVER(LVOUTPUT_private_info.DevLVoutputState) &= ~(0x1F); //关闭弱电输出0~4状态
// if(press != 6) UINT64DATACONVER(LVOUTPUT_private_info.DevLVoutputState) |= (0x01<<(press-1)); //第1~5次控制弱电输出0~4状态
// lvoutput_write_flag = 1; //弱电输出写入
// }
// UINT64DATACONVER(RELAY_private_info.DevHVoutState) &= ~(0xFFFFFF); //关闭继电器0~23
// UINT64DATACONVER(RELAY_private_info.DevHVoutState) |= (0x01<<(press-1)); //打开继电器
// }
// if(press == 25) //弱电输出和继电器全开
// {
// UINT64DATACONVER(LVOUTPUT_private_info.DevLVoutputState) |= 0x1F; //打开弱电输出0~4状态
// UINT64DATACONVER(RELAY_private_info.DevHVoutState) |= 0xFFFFFF; //打开继电器0~23
// lvoutput_write_flag = 1; //弱电输出写入
// }
// if(press == 26) //弱电输出和继电器全关
// {
// UINT64DATACONVER(LVOUTPUT_private_info.DevLVoutputState) &= ~(0x1F); //关闭弱电输出0~4状态
// UINT64DATACONVER(RELAY_private_info.DevHVoutState) &= ~(0xFFFFFF); //关闭继电器0~23
// lvoutput_write_flag = 1; //弱电输出写入
// }
// if(lvoutput_write_flag == 1) //弱电输出写入SRAM
// {
// LVOUTPUT_public_info.check = 0x00; //弱电输出共有属性校验清0
// LVOUTPUT_public_info.check = DoubleData_CheckSum((uint8_t *)&LVOUTPUT_public_info, sizeof(Device_Public_Information_G), \
// (uint8_t *)&LVOUTPUT_private_info, sizeof(NOR_LVOUTPUT_INFO)); //计算校验
// SRAM_DMA_Write_Buff((uint8_t *)&LVOUTPUT_public_info, sizeof(Device_Public_Information_G), lvoutput_addr); //保存弱电输出共有属性到SRAM
// SRAM_DMA_Write_Buff((uint8_t *)&LVOUTPUT_private_info, sizeof(NOR_LVOUTPUT_INFO), lvoutput_addr + Dev_Privately); //保存弱电输出私有属性到SRAM
// }
// RELAY_public_info.check = 0x00; //继电器共有属性校验清0
// RELAY_public_info.check = DoubleData_CheckSum((uint8_t *)&RELAY_public_info, sizeof(Device_Public_Information_G), (uint8_t *)&RELAY_private_info, \
// sizeof(NOR_HVOUT_INFO)); //计算校验
// SRAM_DMA_Write_Buff((uint8_t *)&RELAY_public_info, sizeof(Device_Public_Information_G), relay_addr); //保存继电器共有属性到SRAM
// SRAM_DMA_Write_Buff((uint8_t *)&RELAY_private_info, sizeof(NOR_HVOUT_INFO), relay_addr + Dev_Privately); //保存继电器私有属性到SRAM
// Dbg_Print(DBG_BIT_LOGIC_STATUS_bit,"侧面键按下次数为:%d",press);
//}
///*******************************************************************************
//* Function Name : Side_Key_Fun
//* Description : 侧面键功能函数包含C5和C12侧面键
//* Input : none
//* Return : none
//*******************************************************************************/
//void Side_Key_Fun(void)
//{
// static uint8_t side_key = 0x00; //bit7侧面按键初始化完成标志 bit6~5C5和C12按键功能 bit4~0按键按下次数
// static uint32_t lvoutput_addr = 0x00, c12dimming_addr = 0x00, relay_addr = 0x00; //用于保存弱电输出C12调光强电继电器设备存在存放的SRAM地址
//
// if((side_key & SIDE_KEY_INIT) == 0x00) //只判断一次
// {
// uint8_t data[7]; //保存设置的底板型号
//
// side_key |= SIDE_KEY_INIT; //侧面键初始化完成
// memset(data,0,7); //初始化变量
// Flash_Read(&data[0],7,FLASH_MCU_Control_Revision_ADDRESS); //读底板信息
// if(strcmp((const char *)data,"BLV-C12") == 0) //C12底板
// {
// side_key |= C12_SIDE_KEY; //C12侧面键功能
// Dbg_Print(DBG_BIT_LOGIC_STATUS_bit,"C12底板");
// for(uint8_t i = 0; i < (SRAM_Read_DW(SRAM_BUS_Device_List_Addr) / SRAM_Device_List_Size); i++) //找BUS设备存在链表
// {
// if((SRAM_Read_Byte(SRAM_Device_List_Start_Addr + (i * SRAM_Device_List_Size) + Dev_Type) == DEV_RS485_PWM) && \
// (SRAM_Read_Byte(SRAM_Device_List_Start_Addr + (i * SRAM_Device_List_Size) + Dev_Protocol) == 0x05))
// {
// c12dimming_addr = SRAM_Device_List_Start_Addr+(i*SRAM_Device_List_Size); //保存C12调光设备存放地址
// }
// if((SRAM_Read_Byte(SRAM_Device_List_Start_Addr + (i * SRAM_Device_List_Size) + Dev_Type) == Dev_Host_HVout) && \
// (SRAM_Read_Byte(SRAM_Device_List_Start_Addr + (i * SRAM_Device_List_Size) + Dev_Protocol) == 0x01))
// {
// relay_addr = SRAM_Device_List_Start_Addr+(i*SRAM_Device_List_Size); //保存强电继电器设备存放地址
// }
// }
// for(uint8_t i = (SRAM_Read_DW(SRAM_ACTIVE_Device_List_Addr) / SRAM_Device_List_Size); \
// i < (SRAM_Read_DW(SRAM_NORMAL_Device_List_Addr) / SRAM_Device_List_Size); i++) //找普通设备存在链表
// {
// if((SRAM_Read_Byte(SRAM_Device_List_Start_Addr + (i * SRAM_Device_List_Size) + Dev_Type) == Dev_Host_LVoutput) && \
// (SRAM_Read_Byte(SRAM_Device_List_Start_Addr + (i * SRAM_Device_List_Size) + Dev_Protocol) == 0x00))
// {
// lvoutput_addr = SRAM_Device_List_Start_Addr + (i * SRAM_Device_List_Size); //保存强电继电器设备存放地址
// break; //找到就直接退出
// }
// }
// }
// if(strcmp((const char *)data,"BLV-C5") == 0) //C5底板
// {
// side_key |= C5_SIDE_KEY; //C5侧面键功能
// Dbg_Print(DBG_BIT_LOGIC_STATUS_bit,"C5底板");
// for(uint8_t i = 0; i < (SRAM_Read_DW(SRAM_BUS_Device_List_Addr) / SRAM_Device_List_Size); i++) //找BUS设备存在链表
// {
// if((SRAM_Read_Byte(SRAM_Device_List_Start_Addr + (i * SRAM_Device_List_Size) + Dev_Type) == Dev_Host_HVout) && \
// (SRAM_Read_Byte(SRAM_Device_List_Start_Addr + (i * SRAM_Device_List_Size) + Dev_Protocol) == 0x01))
// {
// relay_addr = SRAM_Device_List_Start_Addr+(i*SRAM_Device_List_Size); //保存强电继电器设备存放地址
// break;
// }
// }
// for(uint8_t i = (SRAM_Read_DW(SRAM_ACTIVE_Device_List_Addr) / SRAM_Device_List_Size); \
// i < (SRAM_Read_DW(SRAM_NORMAL_Device_List_Addr) / SRAM_Device_List_Size); i++) //找普通设备存在链表
// {
// if((SRAM_Read_Byte(SRAM_Device_List_Start_Addr + (i * SRAM_Device_List_Size) + Dev_Type) == Dev_Host_LVoutput) && \
// (SRAM_Read_Byte(SRAM_Device_List_Start_Addr + (i * SRAM_Device_List_Size) + Dev_Protocol) == 0x00))
// {
// lvoutput_addr = SRAM_Device_List_Start_Addr + (i * SRAM_Device_List_Size); //保存强电继电器设备存放地址
// break; //找到就直接退出
// }
// }
// }
// }
// if(((side_key & SIDE_KEY_INIT) == SIDE_KEY_INIT) && ((side_key & SIDE_KEY_FUNCTION) != 0x00)) //侧面键初始化完成,已设置侧面键功能
// {
// switch(side_key & SIDE_KEY_FUNCTION) //C12、C5侧面键判断
// {
// case C12_SIDE_KEY: //C12侧面键
// Side_Key_C12(lvoutput_addr, c12dimming_addr, relay_addr); //C12侧面键
// break;
// case C5_SIDE_KEY:
// Side_Key_C5(lvoutput_addr, relay_addr); //C5侧面键
// break;
// }
// }
//}
/************2022.11.22 林开锐 增加侧面键功能函数结束************/
/*对于BLV-C5-V05,BLV-C12-V04硬件版本之后才有一个测试按键
这测试按键原来是BUS485的使能引脚BUS端口取消了485才空出PB11该引脚
*/
#ifndef MCU_Local_Test_Button_EN
void Multipexing_IO_Init(void)
{
}
void Multipexing_IO_Task(void)
{
}
#else
/*2022-05-10 复用*/
MultIO_State_t g_mult_io;
/*******************************************************************************
* Function Name : Multipexing_IO_Init
* Description : 复用IO初始化
* Input :
* Return : None
*******************************************************************************/
void Multipexing_IO_Init(void)
{
memset(&g_mult_io,0,sizeof(MultIO_State_t));
MultIO_Pin1_ModeCfg(MultIO_INPUT);
MultIO_Pin1_H;
}
/*******************************************************************************
* Function Name : Multipexing_IO_Output
* Description : 设置IO输出状态
*******************************************************************************/
void Multipexing_IO_Output(uint8_t CHx,uint8_t state)
{
switch(CHx)
{
case MultIO_CH1:
if(state == MultIO_Pin_High)
{
MultIO_Pin1_H;
}else if(state == MultIO_Pin_Low){
MultIO_Pin1_L;
}
break;
}
}
/*******************************************************************************
* Function Name : Multipexing_Get_IO_State
* Description : 获取IO输入状态
*******************************************************************************/
uint8_t Multipexing_Get_IO_State(uint8_t CHx)
{
uint8_t rev = 0;
switch(CHx)
{
case MultIO_CH1:
if(MultIO_Pin1_Read != 0x00)
{
rev = MultIO_Pin_High;
}else {
rev = MultIO_Pin_Low;
}
break;
}
return rev;
}
void Multipexing_IO_Scan_Task(void)
{
// for(uint8_t i=0; i<MultIO_CHN_Max; i++)
// {
// switch(g_mult_io.input_state[i])
// {
// case INPUT_STA_S0:
// if( Multipexing_Get_IO_State(i) == MultIO_Input_PRESS )
// {
// if(g_mult_io.delayCnt[i] < MultIO_Input_DELAY_COUNT)
// {
// g_mult_io.delayCnt[i]++;
// }
// else
// {
// g_mult_io.input_state[i] = INPUT_STA_S1; //消抖后
// g_mult_io.input_time[i] = 0;
// g_mult_io.delayCnt[i] = 0;
// }
// }
// else
// {
// g_mult_io.delayCnt[i] = 0;
// g_mult_io.input_state[i] = INPUT_STA_S0;
// g_mult_io.input_val[i] = INPUT_NOT;
// }
// break;
// case INPUT_STA_S1:
// g_mult_io.input_time[i] ++;
// if( g_mult_io.input_time[i] < MultIO_Input_DELAY_COUNT_LONG )
// {
// if( Multipexing_Get_IO_State(i) == MultIO_Input_LOOSEN ) //松开
// {
// g_mult_io.input_val[i] = INPUT_SHORT_PRESS; //短按松开
// g_mult_io.input_time[i] = 0;
// g_mult_io.input_state[i] = INPUT_STA_S0;
// }
// }
// else
// {
// g_mult_io.input_state[i] = INPUT_STA_S2;
// g_mult_io.input_time[i] = 0;
// g_mult_io.input_val[i] = INPUT_CONT_LONG_PRESS; //长按按下
// }
// break;
//
// case INPUT_STA_S2:
// if( Multipexing_Get_IO_State(i) == MultIO_Input_LOOSEN )
// {
// g_mult_io.input_state[i] = INPUT_STA_S0;
// g_mult_io.input_val[i] = INPUT_LONG_PRESS_LOOSEN; //长按松开
// }
// break;
// }
// }
/*硬件版本号BLV-C5-V08 将复用IO作为断电检测引脚 修改输入检测机制 2025-03-24*/
for(uint8_t i=0; i<MultIO_CHN_Max; i++)
{
if( Multipexing_Get_IO_State(i) == MultIO_Input_PRESS )
{
g_mult_io.delayCnt[i]++;
g_mult_io.delayOffCnt[i] = 0x00;
if(g_mult_io.delayCnt[i] >= MultIO_Input_DELAY_COUNT)
{
g_mult_io.delayCnt[i] = 0x00;
g_mult_io.input_val[i] = INPUT_SHORT_PRESS;
}
}
else
{
g_mult_io.delayCnt[i] = 0x00;
g_mult_io.delayOffCnt[i]++;
if(g_mult_io.delayOffCnt[i] >= MultIO_Input_DELAY_COUNT)
{
g_mult_io.delayOffCnt[i] = 0x00;
g_mult_io.input_val[i] = INPUT_NOT;
}
}
}
}
/*******************************************************************************
* Function Name : Multipexing_IO_Task
* Description : 复用IO任务 输入检测10ms ,然后切换到输出模式40ms
*******************************************************************************/
void Multipexing_IO_Task(void)
{
static uint32_t Multipexing_test_tick = 0;
switch(g_mult_io.State)
{
case MultIO_IDLE: //空闲状态
if(SysTick_1ms - g_mult_io.wait_tick >= MultIO_OutPut_Time)
{
g_mult_io.State = MultIO_Input_Mode;
}
break;
case MultIO_Input_Mode: //输入模式
MultIO_Pin1_ModeCfg(MultIO_INPUT);
Multipexing_IO_Scan_Task();
g_mult_io.State = MultIO_Output_Mode;
g_mult_io.wait_tick = SysTick_1ms;
break;
case MultIO_Output_Mode: //输出模式
g_mult_io.State = MultIO_IDLE;
g_mult_io.wait_tick = SysTick_1ms;
/*设置输出*/
for(uint8_t i=0;i<MultIO_CHN_Max;i++)
{
MultIO_Pin1_ModeCfg(MultIO_OUTPUT);
Multipexing_IO_Output(i,g_mult_io.output_state[i]);
}
break;
}
if(SysTick_1ms - Multipexing_test_tick >= 1000)
{
Multipexing_test_tick = SysTick_1ms;
if(g_mult_io.output_state[0] == MultIO_Pin_High)
{
g_mult_io.output_state[0] = MultIO_Pin_Low;
}else {
g_mult_io.output_state[0] = MultIO_Pin_High;
}
}
if(g_mult_io.input_val[0] != g_mult_io.last_input_val[0] ){
g_mult_io.last_input_val[0] = g_mult_io.input_val[0];
if(g_mult_io.input_val[0] == INPUT_SHORT_PRESS)
{
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"检测到设备 电源已断电");
}else if(g_mult_io.input_val[0] == INPUT_NOT){
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"检测到设备 电源已恢复");
}
}
}
#endif