257 lines
7.2 KiB
C
257 lines
7.2 KiB
C
/*
|
||
* File: __GP22Gas_KEY_APP_C
|
||
* Author:
|
||
*
|
||
* Created on:2015-5-18
|
||
*/
|
||
|
||
#ifdef __cplusplus
|
||
extern "C"
|
||
{
|
||
#endif
|
||
/*--------------------------------Including-------------------------------------------*/
|
||
#include "UWater_key_app.h"
|
||
#include "UWater_frame_app.h"
|
||
#include "UWater_timer1uS_driver.h"
|
||
#include "UWater_valve_driver.h"
|
||
|
||
/*------------------------------ Variable Define -------------------------------------*/
|
||
static u8 s_g_key_sys_state; //按键应用状态机状态变量
|
||
static u8 g_menu_change_msg; //切菜单MSG;
|
||
static u8 g_key_res = 0;
|
||
static u8 s_key_iropen = 0;
|
||
static u8 s_old_tch_state;
|
||
u8 s_valve_close_key_cnt=0;
|
||
/*************************************************************************************
|
||
* @fun_name: void KeyMainMachineDriver(void)
|
||
* @brief : 按键模块应用层处理机;
|
||
* @param[in] : None
|
||
* @param[out] :None
|
||
* @retval : None
|
||
* @other : 处于MainSpace,处于main函数主循环中。
|
||
*************************************************************************************/
|
||
void KeyMachineApp(void)
|
||
{
|
||
switch (s_g_key_sys_state)
|
||
{
|
||
case KEY_SYS_S0:
|
||
{
|
||
g_key_res = KeyCheckMsg();
|
||
switch (g_key_res)
|
||
{
|
||
case NO_EVENT:
|
||
{
|
||
if(((FrameCheckParaApp(FramePara_FuncCfg0_3)>>24)&0xFF) != s_old_tch_state)
|
||
{
|
||
s_old_tch_state = FrameCheckParaApp(FramePara_FuncCfg0_3)>>24;
|
||
if(((FrameCheckParaApp(FramePara_FuncCfg0_3)>>24)&0xFF) == 0xAA)
|
||
{
|
||
FrameSetMsgApp(MsgTouchKeyReset);
|
||
}
|
||
else
|
||
{
|
||
Gpio_WriteOutputIO(TCH_KEY_POWER_GPIO, TCH_KEY_POWER_PIN, FALSE);//关闭按键开关
|
||
}
|
||
}
|
||
if(FrameCheckMsgApp(MsgTouchKeyReset) &&(((FrameCheckParaApp(FramePara_FuncCfg0_3)>>24)&0xFF) == 0xAA))
|
||
{
|
||
FrameClearMsgApp(MsgTouchKeyReset);
|
||
if(TchKey_GetPressLimitState() == 0)
|
||
{
|
||
EnableNvic(TCH_KEY_IRQ, TCH_KEY_PRIORITY, FALSE);
|
||
Gpio_WriteOutputIO(TCH_KEY_POWER_GPIO,TCH_KEY_POWER_PIN,FALSE);
|
||
Set100msTimer(TIMER_100MS_TOUCH_RESET,10);//1s
|
||
s_g_key_sys_state = KEY_SYS_S1;
|
||
}
|
||
s_valve_close_key_cnt=0;//关阀状态特殊按键次数限制每小时清0
|
||
}
|
||
else
|
||
{
|
||
s_g_key_sys_state = KEY_SYS_S0;
|
||
}
|
||
}
|
||
break;
|
||
case SHORT_PRESS:
|
||
{
|
||
KeyClearMsg(1);
|
||
g_key_res = 0;
|
||
g_menu_change_msg |= MENU_TWO;
|
||
s_key_iropen = TRUE;
|
||
FrameSetMsgApp(Msg_FactoryBleActive);//厂区唤醒蓝牙
|
||
s_g_key_sys_state = KEY_SYS_S0;
|
||
}
|
||
break;
|
||
case LONG_PRESS:
|
||
{
|
||
KeyClearMsg(2);
|
||
g_key_res = 0;
|
||
if (LcdCheckMeumApp() == ((((u16)A1) << 8) | A1B4) &&FrameCheckParaApp(FramePara_EnableTestFunc)) //在瞬时流量界面长按进入累计时间界面切换到检定
|
||
{
|
||
g_menu_change_msg = g_menu_change_msg | MENU_TEST;
|
||
s_g_key_sys_state = KEY_SYS_S0;
|
||
}
|
||
else
|
||
{
|
||
#if MODULE_BLE_USED
|
||
#else
|
||
if (LcdCheckMeumApp() == ((((u16)A3) << 8) | A3B2)) // A3B1长按进入A3B2发起上报
|
||
{
|
||
g_menu_change_msg |= MENU_ACTIVE_RF;
|
||
}
|
||
#endif
|
||
g_menu_change_msg |= MENU_ONE;
|
||
s_g_key_sys_state = KEY_SYS_S0;
|
||
}
|
||
}
|
||
break;
|
||
case LONGLONG_PRESS:
|
||
{
|
||
KeyClearMsg(4);
|
||
g_key_res = 0;
|
||
#if defined(VALVE)
|
||
//关阀状态减少应急开阀和上报的按键难度
|
||
if((ValveGetState() == VALVE_STATE_CLOSE_EMERGENCY)||(ValveGetState() == VALVE_STATE_CLOSE))
|
||
{
|
||
if(s_valve_close_key_cnt<2)//每小时限制2次
|
||
{
|
||
FrameSetMsgApp(Msg_ValveOpenEmergency);//应急开阀消息
|
||
g_menu_change_msg |= MENU_ACTIVE_RF;
|
||
s_valve_close_key_cnt++;
|
||
}
|
||
}
|
||
#endif
|
||
s_g_key_sys_state = KEY_SYS_S0;
|
||
}
|
||
break;
|
||
case ERR_PRESS:
|
||
{
|
||
KeyClearMsg(3);
|
||
g_key_res = 0;
|
||
g_menu_change_msg |= MENU_DEFAULT;
|
||
s_g_key_sys_state = KEY_SYS_S0;
|
||
}
|
||
break;
|
||
default:
|
||
KeyClearMsg(1);
|
||
KeyClearMsg(2);
|
||
KeyClearMsg(3);
|
||
KeyClearMsg(4);
|
||
KeyClearMsg(5);
|
||
KeyClearMsg(6);
|
||
KeyClearMsg(7);
|
||
KeyClearMsg(8);
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
case KEY_SYS_S1:
|
||
{
|
||
if(TRUE ==Check100msTimer(TIMER_100MS_TOUCH_RESET))
|
||
{
|
||
Gpio_WriteOutputIO(TCH_KEY_POWER_GPIO,TCH_KEY_POWER_PIN,TRUE);
|
||
EnableNvic(TCH_KEY_IRQ, TCH_KEY_PRIORITY, TRUE);
|
||
s_g_key_sys_state = KEY_SYS_S0;
|
||
}
|
||
}
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
}
|
||
|
||
/***********************应用层按键管理初始化***************************
|
||
Function: void KeyInitApp(void)
|
||
Description: 应用层按键管理初始化;
|
||
Input: 无;
|
||
Return: 无;
|
||
Others: 处于MainSpace,第一类接口:初始化接口。
|
||
*****************************************************************/
|
||
void KeyInitApp(void)
|
||
{
|
||
s_g_key_sys_state = KEY_SYS_S0; //按键应用状态机状态变量
|
||
g_menu_change_msg = FALSE; //切菜单MSG,初始化为0;
|
||
g_key_res = 0;
|
||
}
|
||
|
||
/***********************查询按键对LCD的MSG输出***************************
|
||
|
||
Function: u8 KeyCheckLcdMsgApp(void)
|
||
Description: 查询按键对LCD的MSG输出;
|
||
Input: 无;
|
||
Return: bit0=1:切2级菜单MSG;bit1=1:切1级菜单MSG;bit2=1:切默认菜单;bit3=1:切检定状态菜单<E88F9C>bit4=1:短按键开阀;bit5=1:按键使能无线进入活跃期MSG for GSM APP
|
||
Others: 处于MainSpace,第二类接口:工作接口。
|
||
****************************************************************/
|
||
u8 KeyCheckLcdMsgApp(u8 msg)
|
||
{
|
||
return (g_menu_change_msg & msg);
|
||
}
|
||
|
||
/***********************清除按键对LCD的MSG输出***************************
|
||
|
||
Function: u8 KeyClearLcdMessageApp (u8)
|
||
Description: 清除按键对LCD的MSG输出;
|
||
Input: 清除MSG 0:切2级菜单MSG;1:切1级菜单MSG;2:切默认菜单;3:切检定状态菜单; 4:短按键开阀 5:按键使能无线进入活跃期MSG for GSM APP
|
||
Return: TRUE:操作成功;FALSE:操作失败;
|
||
Others: 处于MainSpace,第二类接口:工作接口。
|
||
****************************************************************/
|
||
u8 KeyClearLcdMsgApp(u8 msg)
|
||
{
|
||
g_menu_change_msg &= (~msg);
|
||
return TRUE;
|
||
}
|
||
|
||
/***********************查询模块是否允许休眠*****************
|
||
Function: u8 KeyIfSleepApp(void)
|
||
Description: 查询模块是否允许休眠;
|
||
Input: 无;
|
||
Return: TRUE:允许休眠; FALSE:不允许休眠。
|
||
Others: 处于MainSpace,第三类接口:休眠前接口。
|
||
****************************************************************/
|
||
u8 KeyIfSleepApp(void)
|
||
{
|
||
if (s_g_key_sys_state == KEY_SYS_S0)
|
||
return TRUE;
|
||
else
|
||
return FALSE;
|
||
}
|
||
/***********************设置按键唤醒红外消息***************************
|
||
Function: void KeySetLcdMsgApp(u8 msg)
|
||
Description: 设置按键唤醒红外10S
|
||
Input: 无
|
||
Return: 无;
|
||
Others:
|
||
*****************************************************************/
|
||
void KeySetLcdMsgApp(u8 msg)
|
||
{
|
||
g_menu_change_msg |= msg;
|
||
}
|
||
|
||
/***********************查询是否有按键唤醒红外10S***************************
|
||
Function: void KeyCheckIrOpenMsg(void)
|
||
Description: 查询是否有按键唤醒红外10S
|
||
Input: 无
|
||
Return: s_key_iropen;
|
||
Others:
|
||
*****************************************************************/
|
||
u8 KeyCheckIrOpenMsg(void)
|
||
{
|
||
return s_key_iropen;
|
||
}
|
||
|
||
/***********************清楚按键唤醒红外通信10s标志***************************
|
||
Function: void KeyClearIrOpenMsg(void)
|
||
Description: 清楚按键唤醒红外通信10s标志
|
||
Input: 无;
|
||
Return: 无;
|
||
Others:
|
||
*****************************************************************/
|
||
void KeyClearIrOpenMsg(void)
|
||
{
|
||
s_key_iropen = FALSE;
|
||
}
|
||
|
||
|
||
|
||
|