From 72def895431ad7a08e635b11f3da738e2b2c4618 Mon Sep 17 00:00:00 2001
From: wujiazhi <1147861305@qq.com>
Date: Thu, 13 Jun 2024 11:31:04 +0800
Subject: [PATCH] add lower model test

---
 Function/KEY/key.c |  331 ++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 303 insertions(+), 28 deletions(-)

diff --git a/Function/KEY/key.c b/Function/KEY/key.c
index 9aa3b1b..199293e 100644
--- a/Function/KEY/key.c
+++ b/Function/KEY/key.c
@@ -1,44 +1,319 @@
 #include "key.h"
-#include "gpio.h"
+#include "multi_button.h"
+#include "uart.h"
+#include "valve_control.h"
+#include "extern_rtc.h"
+#include "e2p.h"
+#include "power_manage.h"
+#include "adc.h"
+#include "master_slave_inter.h"
+#include "ir_nec.h"
 #include "lcd.h"
+#include "low_pwr_test.h"
+#include "gprs.h"
+#include "administrator.h"
+#include "system_parameter.h"
+#include "system_log.h"
+#include "sundry.h"
+#include "tim.h"
+#include "working_time_calculate.h"
+#include "gpio.h"
+/******************************************************************************
+ *	����������
+ *-----------------------------------------------------------------------------
+ *	����B��Զ�����ͣ��軽����Ļ��
+ *	�㰴C��ģ���ȡ������Ȩ
+ *	�㰴A��������Ļ/��ҳ
+ *	˫��A����ȡ��ʾ������Ȩ
+ *	����A���ض��������л�ģʽ������/�춨/������ȡ�� 
+ * 	A + B����/�ط�
+ *	
+ *****************************************************************************/
+FlagStatus key_awaken_flag_g = RESET;
 
-/*******************************************************************************
- * Function Name: Key_GPIO_Init
- * Parameters: none
- * Return: none
- * Description: 
- ******************************************************************************/
-void Key_GPIO_Init(void)
+struct Button btn_B;//���밴��B�ṹ��
+struct Button btn_C;//���밴��C�ṹ�� //Ԥ��
+struct Button btn_A;//���밴��A�ṹ��
+
+struct Button btnA_B;//��ϰ���
+
+void KEY_IO_Init(void)
 {
-	InputtIO(KEY1_PORT,KEY1_PIN,IN_PULLUP);
-	InputtIO(KEY2_PORT,KEY2_PIN,IN_PULLUP);
-	InputtIO(KEY3_PORT,KEY3_PIN,IN_PULLUP);
-	InputtIO(KEY4_PORT,KEY4_PIN,IN_PULLUP);
+	CMU_PERCLK_SetableEx(PADCLK, ENABLE);  //PADʱ�ӣ�GPIO��ʹ�ܺ���
+	InputtIO( KEYA_S1_PORT, KEYA_S1_PIN, IN_PULLUP);//��Ϊ��������Ч���������������裬���ֶϿ�
+	InputtIO( KEYB_S2_PORT, KEYB_S2_PIN, IN_PULLUP);//��Ϊ��������Ч���������������裬���ֶϿ�
+	InputtIO( KEYC_S3_PORT, KEYC_S3_PIN, IN_PULLUP);
 }
 
 
-
-void keyPro(void)
+//����B״̬��ȡ�ӿ�
+uint8_t read_buttonB_GPIO(void)//B
 {
-	static uint8_t P_Key1Cnt=0,R_Key2Cnt=0,L_Key3Cnt=0;
-	
-	P_Key1Cnt = (KEY1_IO_READ==Bit_RESET)? P_Key1Cnt+1:0;
-	R_Key2Cnt = (KEY2_IO_READ==Bit_RESET)? R_Key2Cnt+1:0;
-	L_Key3Cnt = (KEY3_IO_READ==Bit_RESET)? L_Key3Cnt+1:0;
+	return KEY_B_READ;
+}
+//����C״̬��ȡ�ӿ�
+uint8_t read_buttonC_GPIO(void)//C
+{
+	return KEY_C_READ;
+}
+//����A״̬��ȡ�ӿ�
+uint8_t read_buttonA_GPIO(void)//A
+{
+	return KEY_A_READ;
+}
 
-	if(R_Key2Cnt== 5)
+//��ϰ���״̬��ȡ�ӿ�
+uint8_t read_buttonA_B_GPIO(void)
+{
+	return KEY_B_READ | KEY_A_READ;
+}
+
+//�����ص�
+void button_callback(void *button)
+{
+	uint32_t btn_event_val;
+	
+	btn_event_val = get_button_event((struct Button *)button); 
+	
+	switch(btn_event_val)
 	{
-		//�����Ҽ�����5������ѯģʽ
-		R_Key2Cnt = 0;
-		if(sys_display_para_g.sys_and_display_mode == NORMAL_MODE){
-			sys_display_para_g.sys_and_display_mode = DISPLAY_PARA;
-		}else if(sys_display_para_g.sys_and_display_mode == DISPLAY_PARA){
-			sys_display_para_g.sys_and_display_mode = NORMAL_MODE;
-		}else{
-			sys_display_para_g.sys_and_display_mode = NORMAL_MODE;
+		case PRESS_DOWN:
+				printf("---> key12 press down! <---\r\n"); 
+			break; 
+
+		case PRESS_UP: 
+				printf("***> key12 press up! <***\r\n");
+			break; 
+
+		case PRESS_REPEAT: 
+				printf("---> key12 press repeat! <---\r\n");
+			break; 
+
+		case SINGLE_CLICK: 
+				printf("---> key12 single click! <---\r\n");
+			break; 
+
+		case DOUBLE_CLICK: 
+				printf("***> key12 double click! <***\r\n");
+			break; 
+
+		case LONG_PRESS_START: 
+				printf("---> key12 long press start! <---\r\n");
+			break; 
+
+		case LONG_PRESS_HOLD: 
+				printf("***> key12 long press hold! <***\r\n");
+			break; 
+	}
+}
+//����1/S1/B�����¼��ص�����
+//void BTN_B_PRESS_DOWN_Handler(void* btn)
+//{
+//	printf("---> key1/S1/B press down! <---\r\n");
+//}
+////����1/S1/B�ɿ��¼��ص�����
+//void BTN_B_PRESS_UP_Handler(void* btn)
+//{
+//	printf("***> key1/S1/B press up! <***\r\n");
+//}
+//����1/S1/B�����¼��ص�����
+//void BTN_B_SINGLE_Click_Handler(void* btn)//����B
+//{
+//	printf("***> key11/S1/B single click! <***\r\n");
+//}
+//����1/S1/B�����¼��ص�����
+void BTN_B_LONG_PRESS_START_Handler(void* btn)//����B
+{
+	if((KEY_B_READ || KEY_A_READ) == 0)
+	{}
+	else
+	{
+#ifdef RS232_PRINTF			
+		printf("***> Զ�����ͣ��軽����Ļ�� <***\r\n");
+#endif		
+		if(sys_display_para_g.sys_and_display_mode == SET_PARA_MODE)
+			__LITH_BAT_WORKINGTIME_RECOVER__;
+		else if(__SYS_DELAY_SEC_FLAG_GET(sys_active_time) != SET)
+		{
+			gprs_soft_para_g.gprs_send_type_flag = GPRS_MEANS_KEY;
+			key_save_send_data_flag_g = SET;
 		}
 	}
+}
+
+//����C�����¼��ص�����
+void BTN_C_SINGLE_Click_Handler(void* btn)//Ԥ������C 
+{
+#ifdef RS232_PRINTF		
+	printf("***> ��ȡ������Ȩ <***\r\n");
+#endif	
+	if(sys_some_flag_g.uncap_flag == RESET && sys_display_para_g.sys_and_display_mode != SET_PARA_MODE)
+	{
+		__SYS_DELAY_SEC_TIME_SET_(mode_flag_active_time,10);
+		__SYS_PARA_FLAG_SET_(uncap_flag);
+	}
+}
+////����C�����¼��ص�����
+//void BTN_C_LONG_PRESS_START_Handler(void* btn)
+//{
+//}
+
+//����A�����¼��ص�����
+void BTN_A_SINGLE_Click_Handler(void* btn)//����A
+{
+	//���𰴼��ж�
+	//��������/��Ļʱ����Ϊ�ⲿ�жϣ����Ѻ��Ϊ��ʱ����ѯ���������������жϱ�־���ᵼ�¶�ΰ���ʱ�����������ٴν���һ���ж�
+	GPIO_EXTI_EXTIISR_ClrEx(KEYA_S1_PORT, KEYA_S1_PIN);
+
+#ifdef RS232_PRINTF		
+	printf("***> ������Ļ/��ҳ <***\r\n");
+#endif	
+	if(sys_display_para_g.sys_and_display_mode == NORMAL_MODE)
+	{
+		lcd_wake_up_flag_g = 1;
+		if(__SYS_DELAY_SEC_TIME_GET_(sys_active_time) < SYS_WAKE_UP_TIME)
+			__SYS_DELAY_SEC_TIME_SET_(sys_active_time,SYS_WAKE_UP_TIME);//���û���ʱ������
+		if(key_awaken_flag_g != SET)
+		{
+			if(++sys_display_para_g.display_page_status.normal_page_status > PRESS_SC_TOTAL)
+				sys_display_para_g.display_page_status.normal_page_status = SC_INSTANT_TOTAL;
+		}
+		else
+		{
+			lcd_wake_up_flag_g = 0;
+			key_awaken_flag_g = RESET;
+		}
+	}
+	else if(sys_display_para_g.sys_and_display_mode == DISPLAY_PARA)
+	{
+		lcd_wake_up_flag_g = 1;
+		if(__SYS_DELAY_SEC_TIME_GET_(sys_active_time) < DISPLAY_PARA_TIME)
+			__SYS_DELAY_SEC_TIME_SET_(sys_active_time, DISPLAY_PARA_TIME); //�oDISPLAY_PARA_TIME��Ļ���ʱ��
+		if(++sys_display_para_g.display_page_status.para_page_status > SEC_CORR_OLD_PARA_5)
+			sys_display_para_g.display_page_status.para_page_status = METER_NUM;
+	}	
+}
+//����A˫���¼��ص�����
+void BTN_A_DOUBLE_Click_Handler(void* btn)
+{
+	//���𰴼��ж�
+	GPIO_EXTI_EXTIISR_ClrEx(KEYA_S1_PORT, KEYA_S1_PIN);
 	
+#ifdef RS232_PRINTF		
+	printf("***> ��ȡ��ʾ������Ȩ <***\r\n");
+#endif	
+	if(sys_some_flag_g.para_display_flag == RESET && sys_display_para_g.sys_and_display_mode != SET_PARA_MODE)
+	{
+		__SYS_DELAY_SEC_TIME_SET_(mode_flag_active_time,10);
+		__SYS_PARA_FLAG_SET_(para_display_flag);
+	}
+}
+//����A�����¼��ص�����
+void BTN_A_LONG_PRESS_START_Handler(void* btn)
+{
+	//���𰴼��ж�
+	GPIO_EXTI_EXTIISR_ClrEx(KEYA_S1_PORT, KEYA_S1_PIN);
+
+	if((KEY_B_READ || KEY_A_READ) == 0)	
+	{}
+	else
+	{
+#ifdef RS232_PRINTF			
+		printf("***> �л�ģʽ������/�춨/������ȡ�� <***\r\n");
+#endif		
+		if(sys_display_para_g.sys_and_display_mode == NORMAL_MODE && sys_some_flag_g.uncap_flag == SET)
+			sys_display_para_g.temp_sys_mode_flag = CNV_PARA_MODE_ENTER;
+		else if(sys_display_para_g.sys_and_display_mode == NORMAL_MODE && sys_some_flag_g.para_display_flag == SET)
+			sys_display_para_g.temp_sys_mode_flag = CNV_DISPLAY_MODE_ENTER;
+		else if(sys_display_para_g.sys_and_display_mode == NORMAL_MODE &&  __SYS_STATUS_BYTES_GET(media_status) == AIR)
+			sys_display_para_g.temp_sys_mode_flag = CNV_CAL_MODE_ENTER;
+		else if(sys_display_para_g.sys_and_display_mode == SET_PARA_MODE)
+			sys_display_para_g.temp_sys_mode_flag = CNV_PARA_MODE_EXIT;
+		else if(sys_display_para_g.sys_and_display_mode == CALIB_MODE)
+			sys_display_para_g.temp_sys_mode_flag = CNV_CAL_MODE_EXIT;
+		else if(sys_display_para_g.sys_and_display_mode == DISPLAY_PARA)       
+			sys_display_para_g.temp_sys_mode_flag = CNV_DISPLAY_MODE_EXIT;
+		else
+			sys_mode_conversion_show_g = ERROR_1;
+		sys_some_flag_g.uncap_flag = sys_some_flag_g.para_display_flag = RESET;
+//		__SYS_PARA_FLAG_CLEAR_(uncap_flag);
+//		__SYS_PARA_FLAG_CLEAR_(para_display_flag);
+	}
+}
+
+
+void BTNA_B_LONG_PRESS_START_Handler(void* btn)
+{
+	//���𰴼��ж�
+	GPIO_EXTI_EXTIISR_ClrEx(KEYA_S1_PORT, KEYA_S1_PIN);
+
+#ifdef RS232_PRINTF		
+	printf("---> key1/S1/B + key2/S3/A long press start! <---\r\n");
+#endif	
+	if(__SYS_STATUS_BYTES_GET(valve_state) == VALVE_OP)//��Ŀǰ״̬�ǿ�
+	{
+		if(__SYS_STATUS_BYTES_GET(account_state) == 0)//���
+			sys_valve_ctl_id_g = V_KEY_CL;	
+		else
+			sys_mode_conversion_show_g = ERROR_1;
+	}
+	else if(__SYS_STATUS_BYTES_GET(valve_state) == VALVE_CL)
+	{
+		if(__SYS_STATUS_BYTES_GET(valve_lock) == 0) //�ж��Ƿ����
+			pwr_vol_g.lith_flag  = LMS_OPEN_VALVE_BEFORE;//			sys_valve_ctl_id_g = V_KEY_OP;
+		else
+			sys_mode_conversion_show_g = ERROR_1;
+	}
+}
+
+void CalMode_Exit_A_LongHandler(void)
+{
+	__IO static uint8_t cnt_long = 0;
+	if(KEY_A_READ == 0)
+	{
+		// 9 * 0.25 = 2.25��
+		if((cnt_long++ >= 9) && (sys_display_para_g.sys_and_display_mode == CALIB_MODE))
+		{
+			//���𰴼��ж�
+			GPIO_EXTI_EXTIISR_ClrEx(KEYA_S1_PORT, KEYA_S1_PIN);
+			cnt_long = 0;
+			sys_display_para_g.temp_sys_mode_flag = CNV_CAL_MODE_EXIT;
+		}
+	}else
+		cnt_long = 0;	
+}
+
+//�������ܳ�ʼ��
+void Key_Config_Init(void)
+{
+	//��ʼ����������
+	button_init(&btn_B, read_buttonB_GPIO, 0);
+	button_init(&btn_C, read_buttonC_GPIO, 0);
+	button_init(&btn_A, read_buttonA_GPIO, 0);
+	button_init(&btnA_B, read_buttonA_B_GPIO, 0);
+	//ע�ᰴ���¼�
+//	button_attach(&btn1, PRESS_DOWN,       BTN1_PRESS_DOWN_Handler);//����
+//	button_attach(&btn1, PRESS_UP,         BTN1_PRESS_UP_Handler);//�ɿ�
+//	button_attach(&btn1, PRESS_REPEAT,     BTN1_PRESS_REPEAT_Handler);
+//	button_attach(&btn1, SINGLE_CLICK,     BTN1_SINGLE_Click_Handler);
 	
+	button_attach(&btn_B, LONG_PRESS_START, BTN_B_LONG_PRESS_START_Handler);//��������һ��
+//	button_attach(&btn1, LONG_PRESS_HOLD,  BTN1_LONG_PRESS_HOLD_Handler);
+	
+	button_attach(&btn_C, SINGLE_CLICK,     BTN_C_SINGLE_Click_Handler);
+//	button_attach(&btn2, LONG_PRESS_START, BTN2_LONG_PRESS_START_Handler);//��������һ��
+	
+	button_attach(&btn_A, SINGLE_CLICK,     BTN_A_SINGLE_Click_Handler);
+	button_attach(&btn_A, DOUBLE_CLICK,     BTN_A_DOUBLE_Click_Handler);//˫��
+	button_attach(&btn_A, LONG_PRESS_START, BTN_A_LONG_PRESS_START_Handler);//��������һ��
+
+//	ע�ᰴť�¼��ص�����
+	button_attach(&btnA_B, LONG_PRESS_START, BTNA_B_LONG_PRESS_START_Handler);
+
+	//��������
+	button_start(&btn_B);
+	button_start(&btn_C);
+	button_start(&btn_A);
+	button_start(&btnA_B);
 }
 

--
Gitblit v1.9.3