201 lines
6.3 KiB
C
Executable File
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();
|
|
}
|