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

135 lines
3.0 KiB
C
Raw Permalink 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.
#ifndef KEY_H_
#define KEY_H_
#include "stdint.h"
#define KEY_TEST1_Status GPIOB_ReadPortPin(GPIO_Pin_20)
#define KEY_TEST2_Status GPIOB_ReadPortPin(GPIO_Pin_19)
#define KEY_TEST3_Status GPIOB_ReadPortPin(GPIO_Pin_18)
#define KEY_PRESS 0x00
#define KEY_LOOSEN 0x01
#define KEY_DELAY_COUNT 2
#define KEY_DELAY_COUNT_LONG 100
typedef enum
{
KEY_CH1,
KEY_CHN_MAX,
}KEY_CHN_e;
typedef enum
{
KEY_STA_S0 = 0,
KEY_STA_S1 = 1,
KEY_STA_S2 = 2,
}KEY_STA_e;
typedef enum
{
KEY_VAL_NOT, //没按下
KEY_VAL_SHORT_PRESS, //单击
KEY_VAL_CONT_LONG_PRESS, //连续长按
KEY_VAL_SINGLE_LONG_PRESS, //长按单击
KEY_VAL_LONG_PRESS_LOOSEN, //长按松开
}KEY_VAL_e;
typedef struct
{
uint8_t KEY_STA[KEY_CHN_MAX];
uint8_t key_val[KEY_CHN_MAX]; //0:没动作, 1:短按松开, 2:长按连击, 3:长按松开
uint8_t key_longPress[KEY_CHN_MAX]; //0:没动作, 1:长按单击
uint8_t key_time[KEY_CHN_MAX];
uint8_t delayCnt[KEY_CHN_MAX];
}KEY_t;
/****************复用IO定义*****************/
#define MultIO_OUTPUT 1
#define MultIO_INPUT 2
#define MultIO_Pin1 GPIO_Pin_11 //PB11
#define MultIO_Pin1_ModeCfg(x) { if(x == MultIO_OUTPUT){GPIOB_ModeCfg(MultIO_Pin1, GPIO_ModeOut_PP_20mA);}else if(x == MultIO_INPUT){GPIOB_ModeCfg(MultIO_Pin1, GPIO_ModeIN_PU);} }
#define MultIO_Pin1_H GPIOB_SetBits(MultIO_Pin1)
#define MultIO_Pin1_L GPIOB_ResetBits(MultIO_Pin1)
#define MultIO_Pin1_Read GPIOB_ReadPortPin(MultIO_Pin1) /* GPIOB端口引脚状态0-引脚低电平,(!0)-引脚高电平 */
/*******************************************/
#define MultIO_OutPut_Time 5
#define MultIO_InPut_Time 12
#define MultIO_InPut_ScanTime 5
#define MultIO_Pin_High 0x01
#define MultIO_Pin_Low 0x00
#define MultIO_Input_PRESS MultIO_Pin_Low
#define MultIO_Input_LOOSEN MultIO_Pin_High
#define MultIO_Input_DELAY_COUNT 20
#define MultIO_Input_DELAY_COUNT_LONG 600
typedef enum
{
MultIO_CH1,
MultIO_CHN_Max,
}MultIO_Pin_CH_e;
/*按键相关定义*/
typedef enum
{
INPUT_NOT, //没按下
INPUT_SHORT_PRESS, //单击
INPUT_CONT_LONG_PRESS, //长按
INPUT_SINGLE_LONG_PRESS, //长按单击
INPUT_LONG_PRESS_LOOSEN, //长按松开
}MULTIO_INPUT_VAL_e;
typedef enum
{
INPUT_STA_S0 = 0,
INPUT_STA_S1 = 1,
INPUT_STA_S2 = 2,
}MULTIO_INPUT_STATE_e;
typedef enum
{
MultIO_IDLE,
MultIO_Input_Mode,
MultIO_Output_Mode,
}MultIO_State_e;
typedef struct
{
uint8_t State; //状态机状态
uint8_t reset_flag; //复位标志
uint8_t output_state[MultIO_CHN_Max];
uint8_t input_state[MultIO_CHN_Max];
uint8_t input_val[MultIO_CHN_Max]; //0:没动作, 1:短按松开, 2:长按连击, 3:长按松开
uint8_t last_input_val[MultIO_CHN_Max];
uint8_t delayCnt[MultIO_CHN_Max];
uint8_t delayOffCnt[MultIO_CHN_Max];
uint16_t input_time[MultIO_CHN_Max];
uint32_t wait_tick;
}MultIO_State_t;
void Key_Init(void);
void Multipexing_IO_Init(void);
void Multipexing_IO_Task(void);
#endif