キー検出プログラム


/*******************************************************************
 *   > File Name: Key_control.c
 *   > Author: fly
 *   > Mail: [email protected]
 *   > Create Time: 2019年03月29日 星期五 11时59分29秒
 ******************************************************************/
#include "Key_control.h"

#if (1)//(_PLATFORM_BOARD == PLATFORM_SAMOON_CARDVR_WIFI) || (_PLATFORM_BOARD == PLATFORM_SAMOON_CARDVR_UVC)
static u32 gkeyon_count[3] = {0};
static u32 glongkey[3]     = {0};
static u32 gsuperlongkey[3] = {0};

#if defined(CUSTOMER_HMVARU_GQ900W) || defined(CUSTOMER_HLUA_RU)
#define LONG_PRESS_TIME       (150)
#else
#define LONG_PRESS_TIME       (300)  //300*10=3sec
#endif

#if defined(CUSTOMER_OWLTECH)
#define	SUPER_LONG_PRESS_TIME		(15*100)
#else
#define	SUPER_LONG_PRESS_TIME		(600)
#endif

#if (1)
void keyFunc_snapshot(void)
{
	if((!syn_status.CardErr) && \
	(gm_sdc_api_action(SD_0,GM_SDC_ACTION_IS_CARD_WRITABLE,NULL,NULL) == 0) \
	        && (gm_sdc_api_action(SD_0,GM_SDC_ACTION_IS_APP_INIT_DONE,NULL,NULL) == 1))
	{
		event_send(EVENT_GPIOKEY, GKEY_SNAPSHOT, FROM_NORMAL);
	}
}
void keyFunc_lockFile(void)
{
	if((!syn_status.CardErr) && \
	(gm_sdc_api_action(SD_0,GM_SDC_ACTION_IS_CARD_WRITABLE,NULL,NULL) == 0) \
	        && (gm_sdc_api_action(SD_0,GM_SDC_ACTION_IS_APP_INIT_DONE,NULL,NULL) == 1))
	{
		if(u32CarDVR_mode == 0)
		{
			event_send(EVENT_GSENSOR,0,FROM_NORMAL);
		}
	}
}
void keyFunc_switchWifi(void)
{
	NetworkLedReset = 1;
	sm_wifi_power_control(!network_state);
}
void keyFunc_defaultSettings(void)
{
	app_default_setting();
}
void keyFunc_Record(void)
{
	if(u32CarDVR_mode == 0)       //0:recording
	{
		ui_send(UI_HANDLE_RECORD_STOP);
		gt_filerecord_stop();
	}
	else
	{
		gt_filerecord_start();
		ui_send(UI_HANDLE_RECORD_START);
	}
}
void gpiokey_check()
{
	int i=0;

	for(i=0; i<3; i++)
	{
		if(!gm_gpio_get_value(KEY_1_GPIO_VALUE+i))
		{
			gkeyon_count[i]++;
			/*printf("FUNC: %s , LINE: %d , gkeyon_count[%d] = %d
",\ __func__, __LINE__, gkeyon_count[i], i);*/ if(gkeyon_count[i] >= LONG_PRESS_TIME) { if(!glongkey[i]) { glongkey[i] = 1; if(i == 2) { printf("FUNC: %s , LINE: %d , GPIO %d key long press [%d]!", \ __func__, __LINE__, (KEY_1_GPIO_VALUE+i), gkeyon_count[i]); keyFunc_switchWifi(); } } else if(gkeyon_count[i] >= SUPER_LONG_PRESS_TIME) { if(!gsuperlongkey[i]) { gsuperlongkey[i] = 1; if(i == 2) { printf("FUNC: %s , LINE: %d , GPIO %d key long press [%d]!", \ __func__, __LINE__, (KEY_1_GPIO_VALUE+i), gkeyon_count[i]); keyFunc_defaultSettings(); } } } } } else { if(glongkey[i]) { glongkey[i] = 0; if(gsuperlongkey[i]) { gsuperlongkey[i] = 0; if(i == 2) { __FUNC_TRACK__; } } else if(i == 2) { __FUNC_TRACK__; } } else { if(gkeyon_count[i] > 5) //short key { if(i == 2) { printf("FUNC: %s , LINE: %d , GPIO %d key long press [%d]!", \ __func__, __LINE__, (KEY_1_GPIO_VALUE+i), gkeyon_count[i]); keyFunc_snapshot(); } } } gkeyon_count[i] = 0; } } } #endif #endif #if(DISABLE) static u32 gkeyon_count=0,glongkey=0; void gpiokey_check() { if(!gm_gpio_get_value(17)) //press key 1 count++ { gkeyon_count++; if(gkeyon_count >= 200) { if(!glongkey) { event_send(EVENT_GPIOKEY,GKEY_LONG,FROM_NORMAL); glongkey = 1; } } } else //Release key 0 { if(glongkey) { event_send(EVENT_GPIOKEY,GKEY_RELEASE,FROM_NORMAL); glongkey = 0; } else { if(gkeyon_count > 5) //short key event_send(EVENT_GPIOKEY,GKEY_SNAPSHOT,FROM_NORMAL); } gkeyon_count = 0; } } #endif