1、问题点:当RCU网络状态异常的情况下,网络还处于协商状态下,还未进入正常通讯环节时,取电变化不会进行判断。这会导致取电变化上报与实际产生取电状态时间点对不上。 2、将BLV_C1F_Module代码上传至Gitea,之前代码修改记录请查看 .\BasicCode\Readme.txt
135 lines
3.0 KiB
C
135 lines
3.0 KiB
C
#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
|