nt9856x/code/application/source/cardv/SrcCode/System/SysMain_Flow_Sleep.c
2023-03-28 15:07:53 +08:00

201 lines
6.3 KiB
C
Executable File

/**
Copyright Novatek Microelectronics Corp. 2012. All rights reserved.
@file SysMain_Flow_Sleep.c
@ingroup mSystemFlow
@brief Sleep Flow
@note
1.提供change sleep的介面
System_ChangeSleep()
(a)System_ChangeSleep()執行
各level不同的control condition
包含通知不同device sleep, wakeup
(b)System_ChangeSleep()執行
各level不同的control condition
包含通知不同mode sleep, wakeup: System_ModeSleepEnter(), System_ModeSleepLeave()
@date 2012/1/1
*/
////////////////////////////////////////////////////////////////////////////////
#include "PrjInc.h"
//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__ SysSleep
#define __DBGLVL__ ((THIS_DBGLVL>=PRJ_DBG_LVL)?THIS_DBGLVL:PRJ_DBG_LVL)
#define __DBGFLT__ "*" //*=All, [mark]=CustomClass
#include <kwrap/debug.h>
/////////////////////////////////////////////////////////////////////////////
#if (LCD_ROTATE_FUNCTION == ENABLE)
extern void Display_DetLCDDir(void);
#endif
INT32 g_iSysSleepLevel = 0;
UINT32 g_CurKeySoundMask[3] = {0};
void System_ChangeSleep(UINT32 sleep_lv)
{
UI_LockEvent();
DBG_FUNC_BEGIN("\r\n");
DBG_DUMP("^MSLEEP Begin (Lvl: 0x%x=>0x%x) ...\r\n", g_iSysSleepLevel, sleep_lv);
//enter sleep
if (g_iSysSleepLevel < (INT32)sleep_lv) {
if (g_iSysSleepLevel < (INT32)sleep_lv) {
if (g_iSysSleepLevel == 0) {
//enter LIGHT level
DBG_MSG("enter level 1 - begin\r\n");
#if (DISPLAY_FUNC == ENABLE)
//LCD device
#if 0
GxVideo_SetDeviceCtrl(DOUT1, DISPLAY_DEVCTRL_BRIGHTLVL, 0);
#else
// Disable LCD backlight
GxVideo_SetDeviceCtrl(DOUT1, DISPLAY_DEVCTRL_BACKLIGHT, FALSE);
#endif
#endif
#if (INPUT_FUNC == ENABLE)
//save key sound mask
g_CurKeySoundMask[0] = Input_GetKeySoundMask(KEY_PRESS);
g_CurKeySoundMask[1] = Input_GetKeySoundMask(KEY_CONTINUE);
g_CurKeySoundMask[2] = Input_GetKeySoundMask(KEY_RELEASE);
//mute key sound
Input_SetKeySoundMask(KEY_PRESS, FLGKEY_KEY_MASK_NULL);
Input_SetKeySoundMask(KEY_CONTINUE, FLGKEY_KEY_MASK_NULL);
Input_SetKeySoundMask(KEY_RELEASE, FLGKEY_KEY_MASK_NULL);
#endif
g_iSysSleepLevel = 1;
DBG_MSG("enter level 1 - end\r\n");
}
}
if (g_iSysSleepLevel < (INT32)sleep_lv) {
if (g_iSysSleepLevel == 1) {
//enter NORMAL level
DBG_MSG("enter level 2 - begin\r\n");
System_ModeSleepEnter();
Ux_SendEvent(0, NVTEVT_EXE_SLEEP, 0);
/*
//under sleep, cannot do flash charge
Flash_OnSystem(SYSTEM_CMD_SLEEPENTER);
//under sleep, FW need to stop AE,AWB, sensor also need to enter power-save mode
Sensor_OnSystem(SYSTEM_CMD_SLEEPENTER);
//under sleep, FW need to stop AF,CAF, lens also need to enter power-save mode
Lens_OnSystem(SYSTEM_CMD_SLEEPENTER);
*/
#if (OUTPUT_FUNC == ENABLE)
//GxLED_SetCtrl(KEYSCAN_LED_RED,SETLED_SPEED,GXLED_1SEC_LED_TOGGLE_CNT);
//GxLED_SetCtrl(KEYSCAN_LED_GREEN,TURNON_LED,FALSE);
//GxLED_SetCtrl(KEYSCAN_LED_RED,SET_TOGGLE_LED,TRUE);
GxLED_SetCtrl(KEYSCAN_LED_GREEN, SETLED_SPEED, GXLED_1SEC_LED_TOGGLE_CNT);
GxLED_SetCtrl(KEYSCAN_LED_GREEN, TURNON_LED, FALSE);
GxLED_SetCtrl(KEYSCAN_LED_GREEN, SET_TOGGLE_LED, TRUE);
#endif
#if (FS_FUNC == ENABLE)
SxTimer_SetFuncActive(SX_TIMER_DET_SYSTEM_BUSY_ID, FALSE);
#endif
g_iSysSleepLevel = 2;
DBG_MSG("enter level 2 - end\r\n");
}
}
if (g_iSysSleepLevel < (INT32)sleep_lv) {
if (g_iSysSleepLevel == 2) {
//enter DEEP level
DBG_MSG("enter level 3 - begin\r\n");
#if (DISPLAY_FUNC == ENABLE)
GxVideo_SetDeviceCtrl(DOUT1, DISPLAY_DEVCTRL_SLEEP, TRUE);
#endif
g_iSysSleepLevel = 3;
DBG_MSG("enter level 3 - end\r\n");
}
}
}
//leave sleep
else if (g_iSysSleepLevel > (INT32)sleep_lv) {
if (g_iSysSleepLevel > (INT32)sleep_lv) {
if (g_iSysSleepLevel == 3) {
//leave DEEP level
DBG_MSG("leave level 3 - begin\r\n");
#if (DISPLAY_FUNC == ENABLE)
GxVideo_SetDeviceCtrl(DOUT1, DISPLAY_DEVCTRL_SLEEP, FALSE);
//GxVideo_SetDeviceCtrl(DOUT1, DISPLAY_DEVCTRL_BACKLIGHT, TRUE);
#endif
g_iSysSleepLevel = 2;
DBG_MSG("leave level 3 - end\r\n");
}
}
if (g_iSysSleepLevel > (INT32)sleep_lv) {
if (g_iSysSleepLevel == 2) {
//leave NORMAL level
DBG_MSG("leave level 2 - begin\r\n");
Ux_SendEvent(0, NVTEVT_EXE_WAKEUP, 0);
System_ModeSleepLeave();
/*
Lens_OnSystem(SYSTEM_CMD_SLEEPLEAVE);
Sensor_OnSystem(SYSTEM_CMD_SLEEPLEAVE);
Flash_OnSystem(SYSTEM_CMD_SLEEPLEAVE);
*/
#if (OUTPUT_FUNC == ENABLE)
//GxLED_SetCtrl(KEYSCAN_LED_GREEN,TURNON_LED,TRUE);
//GxLED_SetCtrl(KEYSCAN_LED_RED,SET_TOGGLE_LED,FALSE);
GxLED_SetCtrl(KEYSCAN_LED_GREEN, SET_TOGGLE_LED, FALSE);
GxLED_SetCtrl(KEYSCAN_LED_GREEN, TURNON_LED, TRUE);
#endif
#if (FS_FUNC == ENABLE)
SxTimer_SetFuncActive(SX_TIMER_DET_SYSTEM_BUSY_ID, TRUE);
#endif
g_iSysSleepLevel = 1;
DBG_MSG("leave level 2 - end\r\n");
}
}
if (g_iSysSleepLevel > (INT32)sleep_lv) {
if (g_iSysSleepLevel == 1) {
//leave LIGHT level
DBG_MSG("leave level 1 - begin\r\n");
#if (DISPLAY_FUNC == ENABLE)
#if (LCD_ROTATE_FUNCTION == ENABLE)
GxVideo_SetDeviceCtrl(DOUT1, DISPLAY_DEVCTRL_FORCEDETDIR, 1);
//config video Direct
Display_DetLCDDir();
#endif
//LCD device
#if (UI_FUNC == ENABLE)
#if 0
GxVideo_SetDeviceCtrl(DOUT1, DISPLAY_DEVCTRL_BRIGHTLVL, UI_GetData(FL_LCD_BRIGHTNESS)); //get last user config level
#else
// Enable LCD backlight
//GxVideo_SetDeviceCtrl(DOUT1, DISPLAY_DEVCTRL_BACKLIGHT, TRUE);
#endif
#else
GxVideo_SetDeviceCtrl(DOUT1, DISPLAY_DEVCTRL_BRIGHTLVL, 0); //off
#endif
#endif
//restore key sound mask
#if (OUTPUT_FUNC == ENABLE)
Input_SetKeySoundMask(KEY_PRESS, g_CurKeySoundMask[0]);
Input_SetKeySoundMask(KEY_CONTINUE, g_CurKeySoundMask[1]);
Input_SetKeySoundMask(KEY_RELEASE, g_CurKeySoundMask[2]);
#endif
g_iSysSleepLevel = 0;
DBG_MSG("leave level 1 - end\r\n");
}
}
}
DBG_DUMP("^MSLEEP End (Lvl: 0x%x)\r\n", g_iSysSleepLevel);
DBG_FUNC_END("\r\n");
UI_UnlockEvent();
}