/* 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 /////////////////////////////////////////////////////////////////////////////// #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.�gu�DUSxJobaA�XE ---------> System Job //4.�gu�DUSxTimeraA�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