633 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			633 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /*
 | ||
|     System Input Callback
 | ||
| 
 | ||
|     System Callback for Input Module.
 | ||
| 
 | ||
|     @file       SysInput_Exe.c
 | ||
|     @ingroup    mIPRJSYS
 | ||
| 
 | ||
|     @note
 | ||
| 
 | ||
|     Copyright   Novatek Microelectronics Corp. 2010.  All rights reserved.
 | ||
| */
 | ||
| 
 | ||
| ////////////////////////////////////////////////////////////////////////////////
 | ||
| #include "PrjInc.h"
 | ||
| #include "GxInput.h"
 | ||
| #include "KeyDef.h"
 | ||
| #include "UIApp/MovieStamp/MovieStampAPI.h"
 | ||
| #include "UIApp/MovieStamp/MovieStamp.h"
 | ||
| 
 | ||
| #if 0
 | ||
| #include "SysCommon.h"
 | ||
| #include "AppCommon.h"
 | ||
| ////////////////////////////////////////////////////////////////////////////////
 | ||
| #include "UIFrameworkExt.h"
 | ||
| #include "UICommon.h"
 | ||
| #include "AppLib.h"
 | ||
| #include "GxInput.h"
 | ||
| #include "GxPower.h"
 | ||
| #if (IPCAM_FUNC != ENABLE)
 | ||
| #include "SoundData.h"
 | ||
| #endif
 | ||
| #if (GSENSOR_FUNCTION == ENABLE)
 | ||
| #include "GSensor.h"
 | ||
| #endif
 | ||
| //global debug level: PRJ_DBG_LVL
 | ||
| #include "PrjCfg.h"
 | ||
| #endif
 | ||
| 
 | ||
| //local debug level: THIS_DBGLVL
 | ||
| #define THIS_DBGLVL         2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER
 | ||
| ///////////////////////////////////////////////////////////////////////////////
 | ||
| #define __MODULE__          SysInputExe
 | ||
| #define __DBGLVL__          ((THIS_DBGLVL>=PRJ_DBG_LVL)?THIS_DBGLVL:PRJ_DBG_LVL)
 | ||
| #define __DBGFLT__          "*" //*=All, [mark]=CustomClass
 | ||
| #include <kwrap/debug.h>
 | ||
| ///////////////////////////////////////////////////////////////////////////////
 | ||
| 
 | ||
| #include "SysInput_API.h"
 | ||
| 
 | ||
| //#NT#Refine code for continue key
 | ||
| #define    BURSTKEY_DEBOUNCE     800//ms
 | ||
| #define    BURSTKEY_INTERVAL     200//ms
 | ||
| #define TOUCH_TIMER_CNT           2// 1//20ms
 | ||
| #define    DOUBLECLICK_INTERVAL     500//ms
 | ||
| 
 | ||
| int SX_TIMER_DET_KEY_ID = -1;
 | ||
| int SX_TIMER_DET_TOUCH_ID = -1;
 | ||
| int SX_TIMER_DET_PWR_ID = -1;
 | ||
| int SX_TIMER_DET_MODE_ID = -1;
 | ||
| int SX_TIMER_AUTO_INPUT_ID = -1;
 | ||
| int SX_TIMER_DET_GSENSOR_ID = -1;
 | ||
| int SX_TIMER_DET_MOVIESTAMP_ID = -1;
 | ||
| 
 | ||
| void UI_DetPwrKey(void);
 | ||
| void UI_DetNormalKey(void);
 | ||
| void UI_DetStatusKey(void);
 | ||
| void UI_DetCustom1Key(void);
 | ||
| 
 | ||
| #if (POWERKEY_FUNCTION == ENABLE)
 | ||
| SX_TIMER_ITEM(Input_DetPKey, UI_DetPwrKey, 5, FALSE)
 | ||
| #endif
 | ||
| #if (NORMALKEY_FUNCTION == ENABLE)
 | ||
| SX_TIMER_ITEM(Input_DetNKey, UI_DetNormalKey, 1, FALSE)
 | ||
| #endif
 | ||
| #if (STATUSKEY_FUNCTION == ENABLE)
 | ||
| SX_TIMER_ITEM(Input_DetSKey, UI_DetStatusKey, 7, FALSE)
 | ||
| #endif
 | ||
| #if (GSENSOR_FUNCTION == ENABLE)
 | ||
| SX_TIMER_ITEM(Input_DetC1Key, UI_DetCustom1Key, 3, FALSE)
 | ||
| #endif
 | ||
| #if defined(_TOUCH_ON_)
 | ||
| SX_TIMER_ITEM(Input_DetTP, GxTouch_DetTP, TOUCH_TIMER_CNT, FALSE)
 | ||
| #endif
 | ||
| 
 | ||
| SX_TIMER_ITEM(Input_DetMovieStamp, MovieStampTsk_TrigUpdate, MOVIE_STAMP_CHK_TIME/20, FALSE)
 | ||
| 
 | ||
| 
 | ||
| static BOOL         m_uiAnyKeyUnlockEn        = FALSE;
 | ||
| 
 | ||
| #if defined(_TOUCH_ON_)
 | ||
| static TOUCH_OBJ g_TouchTable[] = {
 | ||
| 	{TP_GESTURE_PRESS,         NVTEVT_PRESS,        DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	{TP_GESTURE_MOVE,          NVTEVT_MOVE,         0},
 | ||
| 	{TP_GESTURE_HOLD,          NVTEVT_HOLD,         0},
 | ||
| 	{TP_GESTURE_RELEASE,       NVTEVT_RELEASE,      DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	{TP_GESTURE_CLICK,         NVTEVT_CLICK,        0},
 | ||
| 	{TP_GESTURE_SLIDE_LEFT,    NVTEVT_SLIDE_LEFT,   0},
 | ||
| 	{TP_GESTURE_SLIDE_RIGHT,   NVTEVT_SLIDE_RIGHT,  0},
 | ||
| 	{TP_GESTURE_SLIDE_UP,      NVTEVT_SLIDE_UP,     0},
 | ||
| 	{TP_GESTURE_SLIDE_DOWN,    NVTEVT_SLIDE_DOWN,   0}
 | ||
| };
 | ||
| #endif
 | ||
| 
 | ||
| #if (1)//defined(_KEY_METHOD_4KEY_)
 | ||
| static KEY_OBJ g_KeyTable[] = {
 | ||
| #if (0)//defined(_UI_STYLE_CARDV_)
 | ||
| 	//POWER KEY
 | ||
| 	{FLGKEY_KEY_POWER,    KEY_PRESS,       NVTEVT_KEY_POWER_REL,        0,                0},
 | ||
| 	//NORMAL KEY
 | ||
| 	{FLGKEY_MENU,         KEY_PRESS,       NVTEVT_KEY_MENU,         NVTEVT_KEY_PRESS,     DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	{FLGKEY_MODE,         KEY_RELEASE,     NVTEVT_KEY_MODE,         NVTEVT_KEY_RELEASE,     0},
 | ||
| 	{FLGKEY_UP,           KEY_PRESS,       NVTEVT_KEY_UP,           NVTEVT_KEY_PRESS,     DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	{FLGKEY_UP,           KEY_CONTINUE,    NVTEVT_KEY_UP,           NVTEVT_KEY_CONTINUE,     0},
 | ||
| 	{FLGKEY_UP,           KEY_RELEASE,     NVTEVT_KEY_UP,           NVTEVT_KEY_RELEASE,     0},
 | ||
| 	{FLGKEY_DOWN,         KEY_PRESS,       NVTEVT_KEY_DOWN,         NVTEVT_KEY_PRESS,     DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	{FLGKEY_DOWN,         KEY_CONTINUE,    NVTEVT_KEY_DOWN,         NVTEVT_KEY_CONTINUE,     0},
 | ||
| 	{FLGKEY_DOWN,         KEY_RELEASE,     NVTEVT_KEY_DOWN,         NVTEVT_KEY_RELEASE,     0},
 | ||
| 	{FLGKEY_SHUTTER2,     KEY_PRESS,       NVTEVT_KEY_SHUTTER2,     NVTEVT_KEY_PRESS,     DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	{FLGKEY_SHUTTER2,     KEY_RELEASE,     NVTEVT_KEY_SHUTTER2,     NVTEVT_KEY_RELEASE,     0},
 | ||
| 	{FLGKEY_ENTER,        KEY_PRESS,       NVTEVT_KEY_ENTER,        NVTEVT_KEY_PRESS,     DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	{FLGKEY_ENTER,        KEY_RELEASE,     NVTEVT_KEY_ENTER,        NVTEVT_KEY_RELEASE,     0},
 | ||
| 	{FLGKEY_CUSTOM1,      KEY_PRESS,       NVTEVT_KEY_CUSTOM1,      NVTEVT_KEY_PRESS,       DEMOSOUND_SOUND_NONE},
 | ||
| 	{FLGKEY_CUSTOM1,      KEY_RELEASE,     NVTEVT_KEY_CUSTOM1,      NVTEVT_KEY_RELEASE,     0},
 | ||
| #else// _UI_STYLE_SPORTCAM_
 | ||
| 	//POWER KEY
 | ||
| 	{FLGKEY_KEY_POWER,    KEY_RELEASE,     NVTEVT_KEY_POWER_REL,        0,                0},
 | ||
| 	//NORMAL KEY
 | ||
| 	{FLGKEY_UP,           KEY_PRESS,       NVTEVT_KEY_PREV,           NVTEVT_KEY_PRESS,     DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	{FLGKEY_UP,           KEY_CONTINUE,    NVTEVT_KEY_PREV,           NVTEVT_KEY_CONTINUE,     0},
 | ||
| 	{FLGKEY_UP,           KEY_RELEASE,     NVTEVT_KEY_PREV,           NVTEVT_KEY_RELEASE,     0},
 | ||
| 	{FLGKEY_DOWN,         KEY_PRESS,       NVTEVT_KEY_NEXT,         NVTEVT_KEY_PRESS,     DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	{FLGKEY_DOWN,         KEY_CONTINUE,    NVTEVT_KEY_NEXT,         NVTEVT_KEY_CONTINUE,     0},
 | ||
| 	{FLGKEY_DOWN,         KEY_RELEASE,     NVTEVT_KEY_NEXT,         NVTEVT_KEY_RELEASE,     0},
 | ||
| 	// {FLGKEY_LEFT,         KEY_PRESS,       NVTEVT_KEY_MOVIE,         NVTEVT_KEY_PRESS,     DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	//{FLGKEY_LEFT,         KEY_CONTINUE,    NVTEVT_KEY_PREV,         NVTEVT_KEY_CONTINUE,     0},
 | ||
| 	//{FLGKEY_LEFT,         KEY_RELEASE,     NVTEVT_KEY_PREV,         NVTEVT_KEY_RELEASE,     0},
 | ||
| 	{FLGKEY_LEFT,         KEY_PRESS,       NVTEVT_KEY_LEFT,         NVTEVT_KEY_PRESS,     DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	{FLGKEY_LEFT,         KEY_CONTINUE,    NVTEVT_KEY_LEFT,         NVTEVT_KEY_CONTINUE,     0},
 | ||
| 	{FLGKEY_LEFT,         KEY_RELEASE,     NVTEVT_KEY_LEFT,         NVTEVT_KEY_RELEASE,     0},
 | ||
| 	{FLGKEY_SHUTTER2,     KEY_PRESS,       NVTEVT_KEY_SELECT,     NVTEVT_KEY_PRESS,     DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	{FLGKEY_SHUTTER2,     KEY_CONTINUE,     NVTEVT_KEY_SELECT,     NVTEVT_KEY_CONTINUE,     0},
 | ||
|     {FLGKEY_SHUTTER2,     KEY_RELEASE,     NVTEVT_KEY_SELECT,     NVTEVT_KEY_RELEASE,     0},
 | ||
| 	// {FLGKEY_RIGHT,        KEY_PRESS,       NVTEVT_KEY_SELECT,        NVTEVT_KEY_PRESS,     DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	// {FLGKEY_RIGHT,        KEY_CONTINUE,    NVTEVT_KEY_SELECT,        NVTEVT_KEY_CONTINUE,     0},
 | ||
| 	// {FLGKEY_RIGHT,        KEY_RELEASE,     NVTEVT_KEY_SELECT,        NVTEVT_KEY_RELEASE,     0},
 | ||
| 	{FLGKEY_RIGHT,        KEY_PRESS,       NVTEVT_KEY_RIGHT,        NVTEVT_KEY_PRESS,     DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	{FLGKEY_RIGHT,        KEY_CONTINUE,    NVTEVT_KEY_RIGHT,        NVTEVT_KEY_CONTINUE,     0},
 | ||
| 	{FLGKEY_RIGHT,        KEY_RELEASE,     NVTEVT_KEY_RIGHT,        NVTEVT_KEY_RELEASE,     0},
 | ||
| 	{FLGKEY_CUSTOM1,      KEY_PRESS,       NVTEVT_KEY_CUSTOM1,      NVTEVT_KEY_PRESS,       DEMOSOUND_SOUND_NONE},
 | ||
| 	{FLGKEY_CUSTOM1,      KEY_RELEASE,     NVTEVT_KEY_CUSTOM1,      NVTEVT_KEY_RELEASE,     0},
 | ||
| 	{FLGKEY_DATAREADY,    KEY_PRESS,       NVTEVT_KEY_DATAREADY,    NVTEVT_KEY_PRESS,       DEMOSOUND_SOUND_NONE},
 | ||
| 	{FLGKEY_DATAREADY,	  KEY_RELEASE,	   NVTEVT_KEY_DATAREADY,	NVTEVT_KEY_RELEASE, 	0},
 | ||
| 	{FLGKEY_MENU,        KEY_PRESS,       NVTEVT_KEY_MENU,        NVTEVT_KEY_PRESS,     DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	{FLGKEY_MENU,        KEY_CONTINUE,    NVTEVT_KEY_MENU,        NVTEVT_KEY_CONTINUE,     0},
 | ||
| 	{FLGKEY_MENU,        KEY_RELEASE,     NVTEVT_KEY_MENU,        NVTEVT_KEY_RELEASE,     0},
 | ||
| 
 | ||
| #endif
 | ||
| };
 | ||
| #else
 | ||
| //_KEY_METHOD_2KEY_ (for SPORTCAM only)
 | ||
| static KEY_OBJ g_KeyTable[] = {
 | ||
| 	//POWER KEY
 | ||
| 	{FLGKEY_KEY_POWER,    KEY_RELEASE,     NVTEVT_KEY_POWER_REL,        0,                0},
 | ||
| 	//NORMAL KEY
 | ||
| 	{FLGKEY_ENTER,        KEY_PRESS,       NVTEVT_KEY_ENTER,        NVTEVT_KEY_PRESS,     DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	{FLGKEY_MENU,         KEY_PRESS,       NVTEVT_KEY_MENU,         NVTEVT_KEY_PRESS,     DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	{FLGKEY_MODE,         KEY_PRESS,       NVTEVT_KEY_MODE,         NVTEVT_KEY_PRESS,     DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	{FLGKEY_PLAYBACK,     KEY_PRESS,       NVTEVT_KEY_PLAYBACK,     NVTEVT_KEY_PRESS,     DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	{FLGKEY_UP,           KEY_PRESS,       NVTEVT_KEY_UP,           NVTEVT_KEY_PRESS,     DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	{FLGKEY_UP,           KEY_CONTINUE,    NVTEVT_KEY_UP,           NVTEVT_KEY_CONTINUE,     0},
 | ||
| 	{FLGKEY_UP,           KEY_RELEASE,     NVTEVT_KEY_UP,           NVTEVT_KEY_RELEASE,     0},
 | ||
| 	{FLGKEY_DOWN,         KEY_PRESS,       NVTEVT_KEY_DOWN,         NVTEVT_KEY_PRESS,     DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	{FLGKEY_DOWN,         KEY_CONTINUE,    NVTEVT_KEY_DOWN,         NVTEVT_KEY_CONTINUE,     0},
 | ||
| 	{FLGKEY_DOWN,         KEY_RELEASE,     NVTEVT_KEY_DOWN,         NVTEVT_KEY_RELEASE,     0},
 | ||
| 	{FLGKEY_LEFT,         KEY_PRESS,       NVTEVT_KEY_SELECT,         NVTEVT_KEY_PRESS,     DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	{FLGKEY_LEFT,         KEY_CONTINUE,    NVTEVT_KEY_SELECT,         NVTEVT_KEY_CONTINUE,     0},
 | ||
| 	{FLGKEY_LEFT,         KEY_RELEASE,     NVTEVT_KEY_SELECT,         NVTEVT_KEY_RELEASE,     0},
 | ||
| 	{FLGKEY_RIGHT,        KEY_PRESS,       NVTEVT_KEY_NEXT,        NVTEVT_KEY_PRESS,     DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	{FLGKEY_RIGHT,        KEY_CONTINUE,    NVTEVT_KEY_NEXT,        NVTEVT_KEY_CONTINUE,     0},
 | ||
| 	{FLGKEY_RIGHT,        KEY_RELEASE,     NVTEVT_KEY_NEXT,        NVTEVT_KEY_RELEASE,     0},
 | ||
| 	{FLGKEY_DOWN,         KEY_PRESS,       NVTEVT_KEY_DOWN,         NVTEVT_KEY_PRESS,     DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	{FLGKEY_DOWN,         KEY_CONTINUE,    NVTEVT_KEY_DOWN,         NVTEVT_KEY_CONTINUE,     0},
 | ||
| 	{FLGKEY_DOWN,         KEY_RELEASE,     NVTEVT_KEY_DOWN,         NVTEVT_KEY_RELEASE,     0},
 | ||
| 	{FLGKEY_ZOOMIN,       KEY_PRESS,       NVTEVT_KEY_ZOOMIN,       NVTEVT_KEY_PRESS,     DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	{FLGKEY_ZOOMIN,       KEY_CONTINUE,    NVTEVT_KEY_ZOOMIN,       NVTEVT_KEY_CONTINUE,     0},
 | ||
| 	{FLGKEY_ZOOMIN,       KEY_RELEASE,     NVTEVT_KEY_ZOOMIN,       NVTEVT_KEY_RELEASE,     0},
 | ||
| 	{FLGKEY_ZOOMOUT,      KEY_PRESS,       NVTEVT_KEY_ZOOMOUT,      NVTEVT_KEY_PRESS,     DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	{FLGKEY_ZOOMOUT,      KEY_CONTINUE,    NVTEVT_KEY_ZOOMOUT,      NVTEVT_KEY_CONTINUE,     0},
 | ||
| 	{FLGKEY_ZOOMOUT,      KEY_RELEASE,     NVTEVT_KEY_ZOOMOUT,      NVTEVT_KEY_RELEASE,     0},
 | ||
| 	{FLGKEY_SHUTTER2,     KEY_PRESS,       NVTEVT_KEY_SHUTTER2,     NVTEVT_KEY_PRESS,     DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	{FLGKEY_SHUTTER2,     KEY_RELEASE,     NVTEVT_KEY_SHUTTER2,     NVTEVT_KEY_RELEASE,     0},
 | ||
| 	{FLGKEY_SHUTTER1,     KEY_PRESS,       NVTEVT_KEY_SHUTTER1,     NVTEVT_KEY_PRESS,     DEMOSOUND_SOUND_KEY_TONE},
 | ||
| 	{FLGKEY_SHUTTER1,     KEY_RELEASE,     NVTEVT_KEY_SHUTTER1,     NVTEVT_KEY_RELEASE,     0},
 | ||
| 	{FLGKEY_CUSTOM1,      KEY_PRESS,       NVTEVT_KEY_CUSTOM1,      NVTEVT_KEY_PRESS,       DEMOSOUND_SOUND_NONE},
 | ||
| 	{FLGKEY_CUSTOM1,      KEY_RELEASE,     NVTEVT_KEY_CUSTOM1,      NVTEVT_KEY_RELEASE,     0},
 | ||
| };
 | ||
| #endif
 | ||
| void KeySoundCB(UINT32 uiSoundID)
 | ||
| {
 | ||
| 	if (uiSoundID) {
 | ||
| #if(UI_FUNC==ENABLE)
 | ||
| 		UISound_Play(uiSoundID);
 | ||
| #endif
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| UINT32 Input_GroupStatus2Event(UINT32 status)
 | ||
| {
 | ||
| 	UINT32 i = 0;
 | ||
| 	for (i = 0; i < sizeof(g_KeyTable) / sizeof(KEY_OBJ); i++) {
 | ||
| 		if ((g_KeyTable[i].uiKeyFlag == STATUS_KEY_GROUP1) && (g_KeyTable[i].status == status)) {
 | ||
| 			return g_KeyTable[i].uiKeyEvent;
 | ||
| 		}
 | ||
| 	}
 | ||
| 	return 0;
 | ||
| }
 | ||
| 
 | ||
| /**
 | ||
|   convert GPIO key to UI key event
 | ||
|   [InputCB internal API]
 | ||
| 
 | ||
|   @param UINT32 keys: Input key code detected from GPIO mapping
 | ||
|   @return UINT32: NVTEVT
 | ||
| **/
 | ||
| #if 0
 | ||
| static UINT32 Input_Key2Evt(UINT32 keys)
 | ||
| {
 | ||
| 	if (keys & FLGKEY_MOVIE) {
 | ||
| 		return NVTEVT_KEY_MOVIE;
 | ||
| 	}
 | ||
| 	if (keys & FLGKEY_I) {
 | ||
| 		return NVTEVT_KEY_I;
 | ||
| 	}
 | ||
| 	if (keys & FLGKEY_MODE) {
 | ||
| 		return NVTEVT_KEY_MODE;
 | ||
| 	}
 | ||
| 	if (keys & FLGKEY_PLAYBACK) {
 | ||
| 		return NVTEVT_KEY_PLAYBACK;
 | ||
| 	}
 | ||
| 	if (keys & FLGKEY_MENU) {
 | ||
| 		return NVTEVT_KEY_MENU;
 | ||
| 	}
 | ||
| 	if (keys & FLGKEY_FACEDETECT) {
 | ||
| 		return NVTEVT_KEY_FACEDETECT;
 | ||
| 	}
 | ||
| 	if (keys & FLGKEY_DEL) {
 | ||
| 		return NVTEVT_KEY_DEL;
 | ||
| 	}
 | ||
| 	if (keys & FLGKEY_LEFT) {
 | ||
| 		return NVTEVT_KEY_LEFT;
 | ||
| 	}
 | ||
| 	if (keys & FLGKEY_RIGHT) {
 | ||
| 		return NVTEVT_KEY_RIGHT;
 | ||
| 	}
 | ||
| 	if (keys & FLGKEY_ENTER) {
 | ||
| 		return NVTEVT_KEY_ENTER;
 | ||
| 	}
 | ||
| 	if (keys & FLGKEY_SHUTTER1) {
 | ||
| 		return NVTEVT_KEY_SHUTTER1;
 | ||
| 	}
 | ||
| 	if (keys & FLGKEY_SHUTTER2) {
 | ||
| 		return NVTEVT_KEY_SHUTTER2;
 | ||
| 	}
 | ||
| 	if (keys & FLGKEY_ZOOMOUT) {
 | ||
| 		return NVTEVT_KEY_ZOOMOUT;
 | ||
| 	}
 | ||
| 	if (keys & FLGKEY_ZOOMIN) {
 | ||
| 		return NVTEVT_KEY_ZOOMIN;
 | ||
| 	}
 | ||
| 	if (keys & FLGKEY_UP) {
 | ||
| 		return NVTEVT_KEY_UP;
 | ||
| 	}
 | ||
| 	if (keys & FLGKEY_DOWN) {
 | ||
| 		return NVTEVT_KEY_DOWN;
 | ||
| 	} else {
 | ||
| 		return NVTEVT_NULL;
 | ||
| 	}
 | ||
| }
 | ||
| #endif
 | ||
| //just for backward compatible
 | ||
| void Input_SetKeyMask(KEY_STATUS uiMode, UINT32 uiMask)
 | ||
| {
 | ||
| 	SysMan_SetKeyMask(uiMode, uiMask);
 | ||
| }
 | ||
| UINT32 Input_GetKeyMask(KEY_STATUS uiMode)
 | ||
| {
 | ||
| 	return SysMan_GetKeyMask(uiMode);
 | ||
| }
 | ||
| void Input_SetKeySoundMask(KEY_STATUS uiMode, UINT32 uiMask)
 | ||
| {
 | ||
| 	SysMan_SetKeySoundMask(uiMode, uiMask);
 | ||
| }
 | ||
| UINT32 Input_GetKeySoundMask(KEY_STATUS uiMode)
 | ||
| {
 | ||
| 	return SysMan_GetKeySoundMask(uiMode);
 | ||
| }
 | ||
| 
 | ||
| /**
 | ||
|     reset all mask,usually in new winodw onOpen
 | ||
| */
 | ||
| void Input_ResetMask(void)
 | ||
| {
 | ||
| 	// Set key mask as default
 | ||
| 	SysMan_SetKeyMask(KEY_PRESS, FLGKEY_KEY_MASK_DEFAULT);
 | ||
| 	SysMan_SetKeyMask(KEY_RELEASE, FLGKEY_KEY_MASK_DEFAULT);
 | ||
| 	SysMan_SetKeyMask(KEY_CONTINUE, FLGKEY_KEY_MASK_DEFAULT);
 | ||
| #if defined(_TOUCH_ON_) || defined(_UI_STYLE_LVGL_)
 | ||
| 	SysMan_SetTouchMask(TOUCH_MASK_DEFAULT);
 | ||
| #endif
 | ||
| 	SysMan_SetKeySoundMask(KEY_PRESS, FLGKEY_SOUND_MASK_DEFAULT);
 | ||
| 	SysMan_SetKeySoundMask(KEY_RELEASE, FLGKEY_KEY_MASK_NULL);
 | ||
| 	SysMan_SetKeySoundMask(KEY_CONTINUE, FLGKEY_SOUND_MASK_DEFAULT);
 | ||
| }
 | ||
| /**
 | ||
|     for some case,press any key unlock all,and post NVTEVT_KEY_PRESS
 | ||
|     ex:Timelapse or smile detect
 | ||
| */
 | ||
| void Input_SetAnyKeyUnlock(BOOL en)
 | ||
| {
 | ||
| 	m_uiAnyKeyUnlockEn = en;
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| UINT32 Input_Key2Mode(UINT32 keys)
 | ||
| {
 | ||
| #if (STATUSKEY_FUNCTION == ENABLE)
 | ||
| 	switch (keys) {
 | ||
| 	case NVTEVT_KEY_STATUS1:
 | ||
| 		return DSC_MODE_MOVIE;
 | ||
| 	case NVTEVT_KEY_STATUS2:
 | ||
| 		return DSC_MODE_PHOTO_MANUAL;
 | ||
| 	case NVTEVT_KEY_STATUS3:
 | ||
| 		return DSC_MODE_PHOTO_MANUAL;
 | ||
| 	case NVTEVT_KEY_STATUS4:
 | ||
| 		return DSC_MODE_PHOTO_MANUAL;
 | ||
| 	case NVTEVT_KEY_STATUS5:
 | ||
| 		return DSC_MODE_PHOTO_MANUAL;
 | ||
| 	case NVTEVT_KEY_STATUS6:
 | ||
| 		return DSC_MODE_PHOTO_SCENE;
 | ||
| 	case NVTEVT_KEY_STATUS7:
 | ||
| 		return DSC_MODE_PHOTO_MANUAL;
 | ||
| 	case NVTEVT_KEY_STATUS8:
 | ||
| 		return DSC_MODE_PHOTO_MANUAL;
 | ||
| 	case NVTEVT_KEY_STATUS9:
 | ||
| 		return DSC_MODE_PHOTO_MANUAL;
 | ||
| 	case NVTEVT_KEY_STATUS10:
 | ||
| 		return DSC_MODE_PHOTO_MANUAL;
 | ||
| 	default:
 | ||
| 		return DSC_MODE_PHOTO_AUTO;
 | ||
| 	}
 | ||
| #else
 | ||
| 	return 0;
 | ||
| #endif
 | ||
| }
 | ||
| extern SX_CMD_ENTRY key[];
 | ||
| #if defined(_NVT_ETHREARCAM_RX_)
 | ||
| extern SX_CMD_ENTRY ts[];
 | ||
| #endif
 | ||
| #if (defined(_NVT_ETHREARCAM_TX_) ||defined(_NVT_ETHREARCAM_RX_))
 | ||
| extern void EthCamNet_DataRecvDet(void);
 | ||
| extern int SX_TIMER_ETHCAM_DATARECVDET_ID;
 | ||
| #if defined(_NVT_ETHREARCAM_RX_)
 | ||
| SX_TIMER_ITEM(ETHCAM_DataRecvDet, EthCamNet_DataRecvDet, 100, FALSE)
 | ||
| #else
 | ||
| SX_TIMER_ITEM(ETHCAM_DataRecvDet, EthCamNet_DataRecvDet, 25, FALSE)
 | ||
| #endif
 | ||
| #endif
 | ||
| 
 | ||
| #if (defined(_NVT_ETHREARCAM_RX_))
 | ||
| #include "UIApp/EthCamCmdParser/EthCamCmdParser.h"
 | ||
| #if (ETH_REARCAM_CAPS_COUNT>=2)
 | ||
| extern void EthCamNet_EthHubLinkDetInit(void);
 | ||
| extern void EthCamNet_EthHubLinkDet(void);
 | ||
| extern int SX_TIMER_ETHCAM_ETHHUB_LINKDET_ID;
 | ||
| SX_TIMER_ITEM(ETHCAM_EthHubLinkDet, EthCamNet_EthHubLinkDet, 50, FALSE)
 | ||
| #endif
 | ||
| extern void EthCamNet_EthernetLinkDet(void);
 | ||
| extern int SX_TIMER_ETHCAM_ETHERNETLINKDET_LINKDET_ID;
 | ||
| SX_TIMER_ITEM(ETHCAM_EthernetLinkDet, EthCamNet_EthernetLinkDet, 25, FALSE)
 | ||
| 
 | ||
| #endif
 | ||
| void System_OnInputInit(void)
 | ||
| {
 | ||
| 	//PHASE-1 : Init & Open Drv or DrvExt
 | ||
| 	{
 | ||
| 		GxKey_RegCB(Key_CB);         //Register CB function of GxInput
 | ||
| #if defined(_TOUCH_ON_)
 | ||
| 		GxTouch_RegCB(Touch_CB);     //Register CB function of GxInput
 | ||
| #endif
 | ||
| 		GxKey_Init();
 | ||
| #if (defined(_NVT_ETHREARCAM_RX_) ||defined(_NVT_ETHREARCAM_TX_))
 | ||
| 		SX_TIMER_ETHCAM_DATARECVDET_ID = SxTimer_AddItem(&Timer_ETHCAM_DataRecvDet);
 | ||
| #endif
 | ||
| #if (defined(_NVT_ETHREARCAM_RX_))
 | ||
| 		EthCamCmd_InstallID(ETH_REARCAM_CAPS_COUNT);
 | ||
| 		EthsockCliIpc_InstallID(ETH_REARCAM_CAPS_COUNT);
 | ||
| 
 | ||
| 		SX_TIMER_ETHCAM_ETHERNETLINKDET_LINKDET_ID = SxTimer_AddItem(&Timer_ETHCAM_EthernetLinkDet);
 | ||
| 		SxTimer_SetFuncActive(SX_TIMER_ETHCAM_ETHERNETLINKDET_LINKDET_ID, TRUE);
 | ||
| #if (ETH_REARCAM_CAPS_COUNT>=2)
 | ||
| 		EthCamNet_EthHubLinkDetInit();
 | ||
| 		SX_TIMER_ETHCAM_ETHHUB_LINKDET_ID = SxTimer_AddItem(&Timer_ETHCAM_EthHubLinkDet);
 | ||
| #endif
 | ||
| 
 | ||
| #endif
 | ||
| 
 | ||
| 	}
 | ||
| 	//PHASE-2 : Init & Open Lib or LibExt
 | ||
| 	{
 | ||
| 		//1.3]cwinit-E
 | ||
| 		//2.3]cwCB-E,
 | ||
| 		GxKey_SetContDebounce(BURSTKEY_DEBOUNCE / SxTimer_GetData(SXTIMER_TIMER_BASE));
 | ||
| 		GxKey_SetRepeatInterval(BURSTKEY_INTERVAL / SxTimer_GetData(SXTIMER_TIMER_BASE));
 | ||
| 		SysMan_RegKeySoundCB(KeySoundCB);
 | ||
| 		SysMan_RegKeyTable(g_KeyTable, sizeof(g_KeyTable) / sizeof(KEY_OBJ));
 | ||
| 		//3.<2E>gu<67>DUSxJobaA<61>XE ---------> System Job
 | ||
| 		//4.<2E>gu<67>DUSxTimeraA<61>XE ---------> Detect Job
 | ||
| 
 | ||
| #if (POWERKEY_FUNCTION == ENABLE)
 | ||
| 		SX_TIMER_DET_PWR_ID = SxTimer_AddItem(&Timer_Input_DetPKey);
 | ||
| #endif
 | ||
| #if (NORMALKEY_FUNCTION == ENABLE)
 | ||
| 		SX_TIMER_DET_KEY_ID = SxTimer_AddItem(&Timer_Input_DetNKey);
 | ||
| #endif
 | ||
| #if (STATUSKEY_FUNCTION == ENABLE)
 | ||
| 		SX_TIMER_DET_MODE_ID = SxTimer_AddItem(&Timer_Input_DetSKey);
 | ||
| #endif
 | ||
| #if (GSENSOR_FUNCTION == ENABLE)
 | ||
| 		SX_TIMER_DET_GSENSOR_ID = SxTimer_AddItem(&Timer_Input_DetC1Key);
 | ||
| #endif
 | ||
| #if defined(_TOUCH_ON_)
 | ||
| 		SX_TIMER_DET_TOUCH_ID = SxTimer_AddItem(&Timer_Input_DetTP);
 | ||
| #endif
 | ||
| 
 | ||
| 		SX_TIMER_DET_MOVIESTAMP_ID = SxTimer_AddItem(&Timer_Input_DetMovieStamp);
 | ||
| #if (STATUSKEY_FUNCTION == ENABLE)
 | ||
| 		GxKey_DetStatusKey();
 | ||
| #endif
 | ||
| 
 | ||
| #if (POWERKEY_FUNCTION == ENABLE)
 | ||
| 		SxTimer_SetFuncActive(SX_TIMER_DET_PWR_ID, TRUE);
 | ||
| #endif
 | ||
| #if (NORMALKEY_FUNCTION == ENABLE)
 | ||
| 		SxTimer_SetFuncActive(SX_TIMER_DET_KEY_ID, TRUE);
 | ||
| #endif
 | ||
| #if (STATUSKEY_FUNCTION == ENABLE)
 | ||
| 		SxTimer_SetFuncActive(SX_TIMER_DET_MODE_ID, TRUE);
 | ||
| #endif
 | ||
| #if (GSENSOR_FUNCTION == ENABLE)
 | ||
| 		SxTimer_SetFuncActive(SX_TIMER_DET_GSENSOR_ID, TRUE);
 | ||
| #endif
 | ||
| 
 | ||
| #if defined(_TOUCH_ON_)
 | ||
| 		GxTouch_Init();
 | ||
| 		GxTouch_SetCtrl(GXTCH_DOUBLE_CLICK_INTERVAL,
 | ||
| 						DOUBLECLICK_INTERVAL / TOUCH_TIMER_CNT / SxTimer_GetData(SXTIMER_TIMER_BASE));
 | ||
| 		SysMan_RegTouchSoundCB(KeySoundCB);
 | ||
| 		SysMan_RegTouchTable(g_TouchTable, sizeof(g_TouchTable) / sizeof(TOUCH_OBJ));
 | ||
| 		SxTimer_SetFuncActive(SX_TIMER_DET_TOUCH_ID, TRUE);
 | ||
| #endif
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| void System_OnInputExit(void)
 | ||
| {
 | ||
| 	//PHASE-2 : Close Lib or LibExt
 | ||
| 	{
 | ||
| 	}
 | ||
| 	//PHASE-1 : Close Drv or DrvExt
 | ||
| 	{
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| /////////////////////////////////////////////////////////////////////////////
 | ||
| 
 | ||
| void UI_DetPwrKey(void)
 | ||
| {
 | ||
| 	if (!UI_IsForceLock()) {
 | ||
| 		GxKey_DetPwrKey();
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| void UI_DetNormalKey(void)
 | ||
| {
 | ||
| 	static UINT32 keyDetectCount = 0;
 | ||
| 	if (!UI_IsForceLock()) {
 | ||
| 		GxKey_DetNormalKey();
 | ||
| 
 | ||
| 		if (keyDetectCount < 4) {
 | ||
| 			keyDetectCount++;
 | ||
| 		}
 | ||
| 
 | ||
| 		if (keyDetectCount == 2) {
 | ||
| 			//recover the key detection after system boot up
 | ||
| 			GxKey_SetFirstKeyInvalid(KEY_PRESS, 0);
 | ||
| 		}
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| void UI_DetStatusKey(void)
 | ||
| {
 | ||
| //check mode key
 | ||
| 	if ((!UI_IsForceLock()) && (!UI_IsForceLockStatus())) {
 | ||
| 		GxKey_DetStatusKey();
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| #if (GSENSOR_FUNCTION == ENABLE)
 | ||
| void UI_DetCustom1Key(void)
 | ||
| {
 | ||
| 	BOOL   bGSensorStatus = FALSE;
 | ||
| 	Gsensor_Data GS_Data = {0};
 | ||
| 
 | ||
| 	bGSensorStatus = GSensor_GetStatus(&GS_Data);
 | ||
| 	if (bGSensorStatus == TRUE) {
 | ||
| 		Ux_PostEvent(NVTEVT_KEY_CUSTOM1, 1, NVTEVT_KEY_PRESS);
 | ||
| 	}
 | ||
| 	//DBGD(bGSensorStatus);
 | ||
| }
 | ||
| #endif
 | ||
| 
 | ||
| /////////////////////////////////////////////////////////////////////////////
 | ||
| extern void System_ResetDetCloseLenCount(void);
 | ||
| extern void System_ResetPowerSaveCount(void);
 | ||
| BOOL g_bConsumeStatus = FALSE;
 | ||
| 
 | ||
| INT32 System_UserKeyFilter(NVTEVT evt, UINT32 paramNum, UINT32 *paramArray)
 | ||
| {
 | ||
| 	UINT32 key = evt;
 | ||
| 	if (IN_RANGE_EVENT(key, NVTEVT_KEY_STATUS_START, NVTEVT_KEY_STATUS_END)) { //Status class
 | ||
| #if (LENS_FUNCTION == ENABLE)
 | ||
| 		System_ResetDetCloseLenCount();
 | ||
| #endif
 | ||
| 		System_ResetPowerSaveCount();
 | ||
| #if (STATUSKEY_FUNCTION == ENABLE)
 | ||
| 		DBG_IND("^Bgroup key event=0x%x\r\n", key);
 | ||
| 
 | ||
| 		if (g_bConsumeStatus) {
 | ||
| 			g_bConsumeStatus = 0;
 | ||
| 		} else {
 | ||
| 			UINT32 uiDscMode = Input_Key2Mode(key);
 | ||
| 			DBG_IND("^YDscMode=0x%x\r\n", uiDscMode);
 | ||
| 			//FlowMode_OnKeyMode(uiDscMode);
 | ||
| 			UI_Switch_DscMode(uiDscMode, DSCMODE_SWITCH_FORCE, DSCMODE_SWITCHDIR_DONT_CARE);
 | ||
| 		}
 | ||
| #endif
 | ||
| 		return NVTEVT_CONSUME;
 | ||
| 	} else if (IN_RANGE_EVENT(key, NVTEVT_KEY_BUTTON_START, NVTEVT_KEY_BUTTON_END)) { //Button class
 | ||
| 		if (IN_RANGE_EVENT(key, NVTEVT_KEY_PRESS_START, NVTEVT_KEY_PRESS_END)) { //Press key
 | ||
| 			if (key == NVTEVT_KEY_POWER) {
 | ||
| 				return NVTEVT_CONSUME;
 | ||
| 			}
 | ||
| 
 | ||
| #if (LENS_FUNCTION == ENABLE)
 | ||
| 			System_ResetDetCloseLenCount();
 | ||
| #endif
 | ||
| 			if (GxPower_GetControl(GXPWR_CTRL_SLEEP_LEVEL) > 1) { // drop key if sleep level > 1
 | ||
| 				//NOTE! do not set GXPWR_CTRL_AUTOSLEEP_EN = 0xff to reset before get GXPWR_CTRL_SLEEP_LEVEL,
 | ||
| 				//  because GXPWR_CTRL_SLEEP_LEVEL status maybe alter by sleep wakeup flow~
 | ||
| 				System_ResetPowerSaveCount();
 | ||
| 				return NVTEVT_CONSUME;
 | ||
| 			} else {
 | ||
| 				System_ResetPowerSaveCount();
 | ||
| 				if (m_uiAnyKeyUnlockEn) {
 | ||
| 					Ux_PostEvent(NVTEVT_KEY_PRESS_START, 1, key);
 | ||
| 					return NVTEVT_CONSUME;
 | ||
| 				}
 | ||
| 				return NVTEVT_PASS;
 | ||
| 			}
 | ||
| 		} else if (IN_RANGE_EVENT(key, NVTEVT_KEY_CONTINUE_START, NVTEVT_KEY_CONTINUE_END)) { //Contine key
 | ||
| 			if (key == NVTEVT_KEY_POWER_CONT) {
 | ||
| 				return NVTEVT_CONSUME;
 | ||
| 			}
 | ||
| 
 | ||
| #if (LENS_FUNCTION == ENABLE)
 | ||
| 			System_ResetDetCloseLenCount();
 | ||
| #endif
 | ||
| 			System_ResetPowerSaveCount();
 | ||
| 			return NVTEVT_PASS;
 | ||
| 		} else if (IN_RANGE_EVENT(key, NVTEVT_KEY_RELEASE_START, NVTEVT_KEY_RELEASE_END)) { //Release key
 | ||
| 			if (key == NVTEVT_KEY_POWER_REL) {
 | ||
| #if (LENS_FUNCTION == ENABLE)
 | ||
| 				System_ResetDetCloseLenCount();
 | ||
| #endif
 | ||
| 				if (GxPower_GetControl(GXPWR_CTRL_SLEEP_LEVEL) > 1) {
 | ||
|                     // drop key if sleep level > 1
 | ||
| 					//NOTE! do not set GXPWR_CTRL_AUTOSLEEP_EN = 0xff to reset before get GXPWR_CTRL_SLEEP_LEVEL,
 | ||
| 					//  because GXPWR_CTRL_SLEEP_LEVEL status maybe alter by sleep wakeup flow~
 | ||
| 					System_ResetPowerSaveCount();
 | ||
| 				} else {
 | ||
| 					//#NT#2016/03/07#KCHong -begin
 | ||
| 					//#NT#Low power timelapse function
 | ||
| #if (TIMELAPSE_LPR_FUNCTION == ENABLE)
 | ||
| 					MovieTLLPR_Process(TIMELAPSE_FROM_PWRKEY);
 | ||
| #endif
 | ||
| 					//#NT#2016/03/07#KCHong -end
 | ||
| 					System_PowerOff(SYS_POWEROFF_NORMAL);
 | ||
| 				}
 | ||
| 				return NVTEVT_CONSUME;
 | ||
| 			}
 | ||
| 
 | ||
| #if (LENS_FUNCTION == ENABLE)
 | ||
| 			System_ResetDetCloseLenCount();
 | ||
| #endif
 | ||
| 			System_ResetPowerSaveCount();
 | ||
| 			return NVTEVT_PASS;
 | ||
| 		}
 | ||
| 	}
 | ||
| 	return NVTEVT_PASS;
 | ||
| }
 | ||
| 
 | ||
| #if defined(_TOUCH_ON_) || defined(_UI_STYLE_LVGL_)
 | ||
| INT32 System_UserTouchFilter(NVTEVT evt, UINT32 paramNum, UINT32 *paramArray)
 | ||
| {
 | ||
| 	INT32 Ret = NVTEVT_PASS;
 | ||
| 	//DBG_DUMP("^Bevt=%d, point=(%d, %d)\r\n", evt - NVTEVT_PRESS, paramArray[0], paramArray[1]);
 | ||
| 	if (evt >= NVTEVT_PRESS && evt <= NVTEVT_SLIDE_DOWN) {
 | ||
| 		if (GxPower_GetControl(GXPWR_CTRL_SLEEP_LEVEL) > 1) { // drop key if sleep level > 1
 | ||
| 			//NOTE! do not set GXPWR_CTRL_AUTOSLEEP_EN = 0xff to reset before get GXPWR_CTRL_SLEEP_LEVEL,
 | ||
| 			//  because GXPWR_CTRL_SLEEP_LEVEL status maybe alter by sleep wakeup flow~
 | ||
| 			System_ResetPowerSaveCount();
 | ||
| 			return NVTEVT_CONSUME;
 | ||
| 		} else {
 | ||
| 			System_ResetPowerSaveCount();
 | ||
| 			return NVTEVT_PASS;
 | ||
| 		}
 | ||
| 	}
 | ||
| 	return Ret;
 | ||
| }
 | ||
| #endif
 |