//////////////////////////////////////////////////////////////////////////////// #include "PrjInc.h" #include "UICfgDefault.h" #include "GxPower.h" #include "PowerDef.h" #include "PStore.h" #include "UIApp/Network/UIAppNetwork.h" #include #include #include /////////////////////////////////////////////////////////////////////////////// #define __MODULE__ UIInfo #define __DBGLVL__ 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER #define __DBGFLT__ "*" //*=All, [mark]=CustomClass #include #if defined(_EMBMEM_NAND_) || defined(_EMBMEM_SPI_NAND_) #define MAKE_FDT_PARTITION_PATH(x) "/nand/partition_"#x #elif defined(_EMBMEM_SPI_NOR_) #define MAKE_FDT_PARTITION_PATH(x) "/nor/partition_"#x #elif defined(_EMBMEM_EMMC_) #define MAKE_FDT_PARTITION_PATH(x) "/mmc@f0510000/partition_"#x #endif #define PARTITION_PATH_USR1 MAKE_FDT_PARTITION_PATH(usr1) //using for sysparameter #define PARTITION_PATH_USR2 MAKE_FDT_PARTITION_PATH(usr2) //using for sysparameter restore #define SYSINFO_NAND ENABLE //DISABLE //---------------------UIInfo Global Variables ----------------------------- UIMenuStoreInfo currentInfo = {0}; //#NT#Init the array to zero. BOOL bSysReady = 0; BOOL bAutoSystemReset = FALSE; //static BOOL bAutoReset = FALSE; //---------------------UIInfo Prototype Declaration ----------------------- //---------------------UIInfo Public API ---------------------------------- //---------------------UIInfo Private API ---------------------------------- void SysSetFixedFlagSysInit(void); //------------------------------------------------------------ #if (PST_FUNC == DISABLE) int UIInfo_GetStrgPartitionInfo(unsigned long long *pPartOfs, unsigned long long *pPartSize, const char* fdt_path) { unsigned char *p_fdt = (unsigned char *)fdt_get_base(); if (p_fdt == NULL) { DBG_ERR("p_fdt is NULL.\n"); return -1; } int len = 0; int nodeoffset = 0; const void *nodep = NULL; /* property node pointer */ unsigned long long partition_ofs = 0, partition_size = 0; nodeoffset = fdt_path_offset(p_fdt, fdt_path); if (nodeoffset < 0) { DBG_ERR("failed to offset for %s = %d \n", fdt_path, nodeoffset); return -1; } else { DBG_DUMP("offset for %s = %d \n", fdt_path, nodeoffset); } nodep = fdt_getprop(p_fdt, nodeoffset, "reg", &len); if (len == 0 || nodep == NULL) { DBG_ERR("failed to access reg.\n"); return -1; } else { unsigned long long *p_data = (unsigned long long *)nodep; partition_ofs = be64_to_cpu(p_data[0]); partition_size = be64_to_cpu(p_data[1]); DBG_DUMP("partition reg = <0x%llX 0x%llX> \n", partition_ofs, partition_size); *pPartOfs = partition_ofs; *pPartSize = partition_size; } return 0; } #endif void Load_SysInfo(void) { /* DBG_IND("Read SYSINFO\r\n"); #if (SYSINFO_NAND==ENABLE) PStore_ReadReServedArea((UINT8*)&sysInfo,sizeof(UISysInfo)); #else //set to default value sysInfo.ubBeepPowerIndex = BEEP_TONE_1; sysInfo.ubBeepVolumnIndex = BEEP_VOL_2; sysInfo.ubWallpaperStartupIndex = WALLPAPER_STARTUP_GE; sysInfo.uhInfoSize = sizeof(sysInfo); #endif */ } void Save_SysInfo(void) { /* DBG_IND("Write SYSINFO\r\n"); #if (SYSINFO_NAND==ENABLE) PStore_WriteReServedArea((UINT8*)&sysInfo,sizeof(UISysInfo)); #endif */ } //------------------------------------------------------------ #define PS_SYS_PARAM "SYSP" #define BLOCK_UIINFO 0 CHAR previewEVStr[EV_SETTING_MAX][5] = { "-2.0", "-1.7", "-1.3", "-1.0", "-0.7", "-0.3", "+0.0", "+0.3", "+0.7", "+1.0", "+1.3", "+1.7", "+2.0" }; void UI_SetInitVolume(UINT32 volumeIndex) { #if (AUDIO_FUNC == ENABLE) const static UINT32 volume_gain[BEEP_VOL_SETTING_MAX] = {0, 36, 60, 100}; if (volumeIndex >= BEEP_VOL_SETTING_MAX) { volumeIndex = BEEP_VOL_2; //set to default } GxSound_SetVolume(volume_gain[volumeIndex]); #endif } void UI_SetFileDBFileID(void) { #if 0//USE_FILEDB struct tm Curr_DateTime; Curr_DateTime = HwClock_GetTime(TIME_ID_CURRENT); if (((UINT32)Curr_DateTime.tm_year == currentInfo.cbYear) && ((UINT32)Curr_DateTime.tm_mon== currentInfo.cbMonth) && ((UINT32)Curr_DateTime.tm_mday== currentInfo.cbDay)) { NH_FileDB_SetFileID(currentInfo.cbFileID); } #endif } void UI_SaveRTCDate(void) { #if 0//USE_FILEDB FILEDB_HANDLE fileDbHandle = 0; FILEDB_FILE_ATTR *pFileAttr; RTC_DATE Date; CHAR datetime[10]; UINT32 uiFileID; pFileAttr = FileDB_CurrFile(fileDbHandle); if (pFileAttr != NULL) { strncpy(datetime, pFileAttr->filename, 4); datetime[4] = '\0'; Date.s.year = atoi(datetime); strncpy(datetime, pFileAttr->filename + 5, 2); datetime[2] = '\0'; Date.s.month = atoi(datetime); strncpy(datetime, pFileAttr->filename + 7, 2); datetime[2] = '\0'; Date.s.day = atoi(datetime); strncpy(datetime, pFileAttr->filename + 17, 3); datetime[3] = '\0'; uiFileID = atoi(datetime); currentInfo.cbYear = Date.s.year; currentInfo.cbMonth = Date.s.month; currentInfo.cbDay = Date.s.day; currentInfo.cbFileID = uiFileID; } #endif } void Load_MenuInfo(void) { #if (PST_FUNC == ENABLE) #if 0 MODELEXT_HEADER *head = NULL; BININFO *pBinInfo = (BININFO *)Dx_GetModelExtCfg(MODELEXT_TYPE_BIN_INFO, &head); PPSTORE_SECTION_HANDLE pSection; UINT32 result; UINT32 uiFWUpdate = 0; UINT32 uiTmpBoot = 0; DBG_IND("Read UIINFO\r\n"); if (pBinInfo == NULL) { DBG_ERR("pBinInfo is NULL\r\n"); return; } uiFWUpdate = (pBinInfo->ld.LdCtrl2 & LDCF_UPDATE_FW); uiTmpBoot = (pBinInfo->ld.LdCtrl2 & LDCF_BOOT_CARD); // Read system info from PStore if (uiTmpBoot) { SysResetFlag(); debug_msg("Boot from temp file, use default flags\r\n"); } else if ((pSection = PStore_OpenSection(PS_SYS_PARAM, PS_RDWR)) != E_PS_SECHDLER) { //#NT#2016/06/23#Niven Cho -begin //#NT#porting KS's suggestion that PStore reset mechanism UINT32 uiPsFreeSpace = PStore_GetInfo(PS_INFO_FREE_SPACE); result = PStore_ReadSection((UINT8 *)¤tInfo, 0, sizeof(UIMenuStoreInfo), pSection); if ((result != E_PS_OK || currentInfo.uhInfoSize != sizeof(currentInfo) || uiFWUpdate) && uiPsFreeSpace) { debug_msg("PStore reset info.\r\n"); memset(¤tInfo, 0, sizeof(currentInfo)); currentInfo.uhInfoSize = sizeof(UIMenuStoreInfo); SysResetFlag(); PStore_WriteSection((UINT8 *)¤tInfo, 0, sizeof(UIMenuStoreInfo), pSection); PStore_CloseSection(pSection); } else if ((result != E_PS_OK || uiFWUpdate) && (currentInfo.uhInfoSize == sizeof(currentInfo)) && (uiPsFreeSpace == 0)) { //if current size is the same with previous, use PS_UPDATE instead //of PS_RDWR to prevent that PStore is no free space debug_msg("PStore reset info for uiPsFreeSpace=0.\r\n"); PStore_CloseSection(pSection); memset(¤tInfo, 0, sizeof(currentInfo)); currentInfo.uhInfoSize = sizeof(UIMenuStoreInfo); SysResetFlag(); if ((pSection = PStore_OpenSection(PS_SYS_PARAM, PS_UPDATE)) != E_PS_SECHDLER) { PStore_WriteSection((UINT8 *)¤tInfo, 0, sizeof(UIMenuStoreInfo), pSection); PStore_CloseSection(pSection); } else { DBG_ERR("Update sys param fail in Load_MenuInfo\r\n"); } } else { PStore_CloseSection(pSection); } //#NT#2016/06/23#Niven Cho -end //#NT#2017/03/02#Niven Cho -begin //#NT#EMMC_AS_PSTORE, reduce PStore_CloseSection //PStore_CloseSection(pSection); //#NT#2017/03/02#Niven Cho -end bSysReady = 1; } else { SysResetFlag(); DBG_ERR("PStore Read sys param fail, use default flags\r\n"); } DBG_IND("Read UIRES\r\n"); #else PPSTORE_SECTION_HANDLE pSection; UINT32 result; UINT32 uiFWUpdate = 0; UINT32 uiTmpBoot = 0; #if 1 //cmdline for ota FILE *fp = NULL; UINT32 u32size = 0; char *pStrSrc = NULL; char *pStrOtsOk = "ota_flag=0x1"; system("cat /proc/cmdline > /tmp/ota.txt"); fp = fopen("/tmp/ota.txt","r"); if (fp != NULL) { fseek(fp, 0, SEEK_END); u32size = ftell(fp); // take file size fseek(fp, 0, SEEK_SET); // move to position zero pStrSrc = (char *)malloc(u32size*sizeof(char)); if (pStrSrc) { fread(pStrSrc, 1, u32size, fp); if (strstr(pStrSrc, pStrOtsOk) != 0) { uiFWUpdate = 1; printf("%s: ota upgrade success\r\n", __func__); } else { printf("%s: ota upgrade failed\r\n", __func__); } free(pStrSrc); } fclose(fp); fp = NULL; pStrSrc = NULL; u32size = 0; } #endif //uiFWUpdate = 0;//(p_shm->boot.LdCtrl2 & LDCF_UPDATE_FW); //uiTmpBoot= 0;//(p_shm->boot.LdCtrl2 & LDCF_BOOT_CARD); DBGH(uiFWUpdate); DBGH(uiTmpBoot); DBG_IND("Read UIINFO\r\n"); // Read system info from PStore if (uiTmpBoot) { SysResetFlag(); DBG_DUMP("Boot from temp file, use default flags\r\n"); } else if ((pSection = PStore_OpenSection(PS_SYS_PARAM, PS_RDWR)) != E_PS_SECHDLER) { //#NT#2016/06/23#Niven Cho -begin //#NT#porting KS's suggestion that PStore reset mechanism UINT32 uiPsFreeSpace = PStore_GetInfo(PS_INFO_FREE_SPACE); result = PStore_ReadSection((UINT8 *)¤tInfo, 0, sizeof(UIMenuStoreInfo), pSection); if ((result != E_PS_OK || currentInfo.uhInfoSize != sizeof(currentInfo)|| uiFWUpdate) && uiPsFreeSpace) { DBG_DUMP("PStore reset info.\r\n"); memset(¤tInfo, 0, sizeof(currentInfo)); currentInfo.uhInfoSize = sizeof(UIMenuStoreInfo); SysResetFlag(); PStore_WriteSection((UINT8 *)¤tInfo, 0, sizeof(UIMenuStoreInfo), pSection); PStore_CloseSection(pSection); } else if ((result != E_PS_OK|| uiFWUpdate) && (currentInfo.uhInfoSize == sizeof(currentInfo)) && (uiPsFreeSpace == 0)) { //if current size is the same with previous, use PS_UPDATE instead //of PS_RDWR to prevent that PStore is no free space DBG_DUMP("PStore reset info for uiPsFreeSpace=0.\r\n"); PStore_CloseSection(pSection); memset(¤tInfo, 0, sizeof(currentInfo)); currentInfo.uhInfoSize = sizeof(UIMenuStoreInfo); SysResetFlag(); if ((pSection = PStore_OpenSection(PS_SYS_PARAM, PS_UPDATE)) != E_PS_SECHDLER) { PStore_WriteSection((UINT8 *)¤tInfo, 0, sizeof(UIMenuStoreInfo), pSection); PStore_CloseSection(pSection); } else { DBG_ERR("Update sys param fail in Load_MenuInfo\r\n"); } } else { PStore_CloseSection(pSection); } //#NT#2016/06/23#Niven Cho -end //#NT#2017/03/02#Niven Cho -begin //#NT#EMMC_AS_PSTORE, reduce PStore_CloseSection //PStore_CloseSection(pSection); //#NT#2017/03/02#Niven Cho -end bSysReady = 1; } else { SysResetFlag(); DBG_ERR("PStore Read sys param fail, use default flags\r\n"); } DBG_IND("Read UIRES\r\n"); #endif #else //for #if (PST_FUNC == ENABLE) #if defined(_EMBMEM_EMMC_) unsigned long long partition_ofs= 0, partition_size = 0; int ret = -1; UINT32 sectorCnt = 0; FILE *fd_mmc = NULL; INT32 rw_len = 0; void *pTempbuf = NULL; ret = UIInfo_GetStrgPartitionInfo(&partition_ofs, &partition_size, PARTITION_PATH_USR1); if ((ret == 0) && (sizeof(currentInfo) < partition_size)) { if ((sizeof(currentInfo)/_EMBMEM_BLK_SIZE_) == 0) { sectorCnt = 1; } else if (((sizeof(currentInfo)/_EMBMEM_BLK_SIZE_) > 0) && ((sizeof(currentInfo)%_EMBMEM_BLK_SIZE_) != 0)) { sectorCnt = sizeof(currentInfo)/_EMBMEM_BLK_SIZE_ + 1; } else if (((sizeof(currentInfo)/_EMBMEM_BLK_SIZE_) > 0) && ((sizeof(currentInfo)%_EMBMEM_BLK_SIZE_) == 0)) { sectorCnt = sizeof(currentInfo)/_EMBMEM_BLK_SIZE_; } if ((fd_mmc = fopen("/dev/mmcblk2p14", "rb")) == NULL) { ///dev/mmcblk2p14 ==> partition_usr1 ; cat /proc/nvt_info/emmc DBG_ERR("/dev/mmcblk2p14 fail !!\r\n"); SysResetFlag(); return; } else { pTempbuf = (void *)malloc(sectorCnt*_EMBMEM_BLK_SIZE_); if (!pTempbuf) { DBG_ERR("allocate pTempbuf fail !!\r\n"); SysResetFlag(); } else { rw_len = (INT32)fread(pTempbuf, 1, sizeof(currentInfo), fd_mmc); if (rw_len != sizeof(currentInfo)) { DBG_ERR("read size %d < %ld\r\n", rw_len, sizeof(currentInfo)); SysResetFlag(); } else { memcpy(¤tInfo, pTempbuf, sizeof(currentInfo)); } free(pTempbuf); pTempbuf = NULL; } fclose(fd_mmc); SysCheckFlag(); } } #else SysResetFlag(); #endif #endif //for #if (PST_FUNC == ENABLE) } void Load_LangString(void) { //load language #if(_LANG_STORE_ == _PSTORE_) UIRes_InitReadLang(currentInfo.ubLanguageIndex); #endif } void Save_MenuInfo(void) { #if (PST_FUNC == ENABLE) #if 0 MODELEXT_HEADER *head = NULL; BININFO *pBinInfo = (BININFO *)Dx_GetModelExtCfg(MODELEXT_TYPE_BIN_INFO, &head); PPSTORE_SECTION_HANDLE pSection; UINT32 error = 0; UINT32 uiTmpBoot; if (pBinInfo == NULL) { DBG_ERR("pBinInfo is NULL\r\n"); return; } uiTmpBoot = (pBinInfo->ld.LdCtrl2 & LDCF_BOOT_CARD); // Read system info from PStore if (uiTmpBoot) { SysResetFlag(); debug_msg("Boot from temp file, skip Save_MenuInfo\r\n"); return; } DBG_IND("Write UIINFO\r\n"); //#NT#2013/3/15#Philex Lin - begin /*--- General ---*/ strncpy(currentInfo.strSoftwareVer, Prj_GetVersionString(), (VER_STR_MAX - 1)); currentInfo.strSoftwareVer[strlen(currentInfo.strSoftwareVer)] = '\0'; currentInfo.uhInfoSize = sizeof(UIMenuStoreInfo); //#NT#2013/3/15#Philex Lin - end //Using PStore to read / sys param //#NT#2016/06/23#Niven Cho -begin //#NT#porting KS's suggestion that PStore reset mechanism UINT32 uiPsFreeSpace = PStore_GetInfo(PS_INFO_FREE_SPACE); if (uiPsFreeSpace == 0) { if ((pSection = PStore_OpenSection(PS_SYS_PARAM, PS_UPDATE)) != E_PS_SECHDLER) { PStore_WriteSection((UINT8 *)¤tInfo, 0, sizeof(UIMenuStoreInfo), pSection); PStore_CloseSection(pSection); } else { DBG_ERR("Update sys param fail\r\n"); } } else { if ((pSection = PStore_OpenSection(PS_SYS_PARAM, PS_RDWR | PS_CREATE)) != E_PS_SECHDLER) { PStore_WriteSection((UINT8 *)¤tInfo, 0, sizeof(UIMenuStoreInfo), pSection); PStore_CloseSection(pSection); } else { DBG_ERR("Write sys param fail\r\n"); } } //#NT#2016/06/23#Niven Cho -end if (PStore_CheckSection(PS_SYS_PARAM, &error) != E_PS_OK) { DBG_ERR("PStore_CheckSection\r\n"); } if (error != E_PS_OK) { DBG_ERR("PStore error msg :%x\r\n", error); { UINT32 BufSize = 0x1800000; UINT8 *pBuf = (UINT8 *)SxCmd_GetTempMem(BufSize); if (!pBuf) { DBG_ERR("pBuf is NULL\r\n"); return; } //open file system for save file //Dep_Fs_Init(TRUE,TRUE); PStore_Dump(pBuf, BufSize); SxCmd_RelTempMem((UINT32)pBuf); } Ux_DumpEvents(); // while (1); } #else PPSTORE_SECTION_HANDLE pSection; UINT32 error = 0; UINT32 uiTmpBoot = 0; uiTmpBoot= 0;//(p_shm->boot.LdCtrl2 & LDCF_BOOT_CARD); DBGH(uiTmpBoot); // Read system info from PStore if (uiTmpBoot) { SysResetFlag(); DBG_DUMP("Boot from temp file, skip Save_MenuInfo\r\n"); return; } DBG_IND("Write UIINFO\r\n"); //#NT#2013/3/15#Philex Lin - begin /*--- General ---*/ strncpy(currentInfo.strSoftwareVer, Prj_GetVersionString(), (VER_STR_MAX - 1)); currentInfo.strSoftwareVer[strlen(currentInfo.strSoftwareVer)] = '\0'; currentInfo.uhInfoSize = sizeof(UIMenuStoreInfo); //#NT#2013/3/15#Philex Lin - end //Using PStore to read / sys param //#NT#2016/06/23#Niven Cho -begin //#NT#porting KS's suggestion that PStore reset mechanism UINT32 uiPsFreeSpace = PStore_GetInfo(PS_INFO_FREE_SPACE); if (uiPsFreeSpace == 0) { if ((pSection = PStore_OpenSection(PS_SYS_PARAM, PS_UPDATE)) != E_PS_SECHDLER) { PStore_WriteSection((UINT8 *)¤tInfo, 0, sizeof(UIMenuStoreInfo), pSection); PStore_CloseSection(pSection); } else { DBG_ERR("Update sys param fail\r\n"); } } else { if ((pSection = PStore_OpenSection(PS_SYS_PARAM, PS_RDWR | PS_CREATE)) != E_PS_SECHDLER) { PStore_WriteSection((UINT8 *)¤tInfo, 0, sizeof(UIMenuStoreInfo), pSection); PStore_CloseSection(pSection); } else { DBG_ERR("Write sys param fail\r\n"); } } //#NT#2016/06/23#Niven Cho -end if (PStore_CheckSection(PS_SYS_PARAM, &error) != E_PS_OK) { DBG_ERR("PStore_CheckSection\r\n"); } if (error != E_PS_OK) { DBG_ERR("PStore error msg :%x\r\n", error); { UINT32 BufSize = 0x1800000; UINT8 *pBuf = (UINT8 *)SxCmd_GetTempMem(BufSize); if (!pBuf) { DBG_ERR("pBuf is NULL\r\n"); return; } //open file system for save file //Dep_Fs_Init(TRUE,TRUE); PStore_Dump(pBuf, BufSize); SxCmd_RelTempMem((UINT32)pBuf); } Ux_DumpEvents(); //while (1); } #endif #else #if defined(_EMBMEM_EMMC_) unsigned long long partition_ofs= 0, partition_size = 0; int ret = -1; FILE *fd_mmc = NULL; INT32 rw_len = 0; ret = UIInfo_GetStrgPartitionInfo(&partition_ofs, &partition_size, PARTITION_PATH_USR1); if ((ret == 0) && (sizeof(currentInfo) < partition_size)) { if ((fd_mmc = fopen("/dev/mmcblk2p14", "wb")) == NULL) { ///dev/mmcblk2p14 ==> partition_usr1 ; cat /proc/nvt_info/emmc DBG_ERR("/dev/mmcblk2p14 fail !!\r\n"); } else { rw_len = fwrite(¤tInfo, 1, sizeof(currentInfo), fd_mmc); if(rw_len != sizeof(currentInfo)) { DBG_ERR("Error to write file for /dev/mmcblk2p14"); } fclose(fd_mmc);; } if ((fd_mmc = fopen("/dev/mmcblk2p15", "wb")) == NULL) { ///dev/mmcblk2p14 ==> partition_usr2 ; cat /proc/nvt_info/emmc DBG_ERR("/dev/mmcblk2p14 fail !!\r\n"); } else { rw_len = fwrite(¤tInfo, 1, sizeof(currentInfo), fd_mmc); if(rw_len != sizeof(currentInfo)) { DBG_ERR("Error to write file for /dev/mmcblk2p14"); } fclose(fd_mmc);; } } #endif #endif //for #if (PST_FUNC == ENABLE) } void Reset_MenuInfo(void) { SysResetFlag(); // reset system flags SysExeMenuSettingFuncs(); // execute menu setting related functions /* After reset, save to NAND */ Save_MenuInfo(); } void Init_SysInfo(void) { DBG_IND("[Init_SysInfo][NAND update state]\r\n"); } void Init_MenuInfo(void) { DBG_IND("[Init_MenuInfo][PStore update state]\r\n"); DBG_IND("Version %s %d\r\n", currentInfo.pVersion, currentInfo.uhInfoSize); SysCheckFlag(); // check flag (limit value) SysSetFixedFlag(); // set fixed flag SysSetFixedFlagSysInit(); // set fixed flag for system init only SysExeMenuSettingFuncs(); // execute menu setting related functions } UIMenuStoreInfo *UI_GetMenuInfo(void) { return ¤tInfo; } #if 0 UINT32 UI_GetData(UINT32 attribute) { DBG_IND("get UIParam[%d]\r\n", attribute); #if (_FPGA_EMULATION_ == ENABLE) if (attribute == FL_MOVIE_SIZE) { return MOVIE_SIZE_VGA; // VGA only } #endif return currentInfo.UIParameter[attribute]; } void UI_SetData(UINT32 attribute, UINT32 value) { DBG_IND("set UIParam[%d]= %d\r\n", attribute, value); currentInfo.UIParameter[attribute] = value; } #endif static UINT32 guiBatteryLevel = UIDFT_BATTERY_LVL; //----------------------------------------------------------------------------- // Get USB connect type but naming is backward compatible for NT96220 //----------------------------------------------------------------------------- /** Return AC plug in or unplugged Return AC plug in or unplugged. TRUE -> AC plug in. FALSE -> AC is unplugged. @param void @return BOOL: TRUE -> AC plug in, FALSE -> AC is unplugged */ BOOL KeyScan_IsACIn(void) { BOOL bACStatus; #if _TODO if (GxUSB_GetConnectType() == USB_CONNECT_CHARGER) { bACStatus = TRUE; } else { bACStatus = FALSE; } #else bACStatus = FALSE; #endif return bACStatus; } //----------------------------------------------------------------------------- // Auto Poweroff/USB detect/Enable Key sound scan items //----------------------------------------------------------------------------- void KeyScan_EnableMisc(BOOL bEn) { if (bEn == FALSE) { // disable auto power off/USB detect timer // disable key tone flag GxPower_SetControl(GXPWR_CTRL_AUTOPOWEROFF_EN, 0xff); //reset GxPower_SetControl(GXPWR_CTRL_AUTOSLEEP_EN, 0xff); //reset SxTimer_SetFuncActive(SX_TIMER_DET_AUTOPOWEROFF_ID, FALSE); #if (USB_MODE==ENABLE) SxTimer_SetFuncActive(SX_TIMER_DET_USB_ID, FALSE); #endif //UISound_EnableKey(FALSE); // 660 is full-duplex for audio } else { // enable auto power off/USB detect timer // enable key tone flag //#NT#2016/11/21#Adam Su -begin //#NT#Fix Mantis Issue 0113246 SxTimer_SetFuncActive(SX_TIMER_DET_AUTOPOWEROFF_ID, TRUE); //#NT#2016/11/21#Adam Su -end #if (USB_MODE==ENABLE) SxTimer_SetFuncActive(SX_TIMER_DET_USB_ID, TRUE); #endif //UISound_EnableKey(TRUE); // 660 is full-duplex for audio } } //----------------------------------------------------------------------------- // Battery Level //----------------------------------------------------------------------------- UINT32 GetBatteryLevel(void) { if (KeyScan_IsACIn()) { guiBatteryLevel = BATTERY_CHARGE; } else { #if (PWRLEVEL_FUNCTION == ENABLE) switch (GxPower_GetControl(GXPWR_CTRL_BATTERY_LEVEL)) { case VOLDET_BATTERY_LVL_4: guiBatteryLevel = BATTERY_FULL; break; case VOLDET_BATTERY_LVL_3: guiBatteryLevel = BATTERY_MED; break; case VOLDET_BATTERY_LVL_2: guiBatteryLevel = BATTERY_LOW; break; case VOLDET_BATTERY_LVL_1: guiBatteryLevel = BATTERY_EMPTY; break; case VOLDET_BATTERY_LVL_0: guiBatteryLevel = BATTERY_EXHAUSTED; break; } #else guiBatteryLevel = BATTERY_FULL; #endif } return guiBatteryLevel; } //----------------------------------------------------------------------------- // Set/Get System Flags //----------------------------------------------------------------------------- void SysSetFlag(UINT32 uiFlag, UINT32 uiValue) { currentInfo.UIParameter[uiFlag] = uiValue; } UINT32 SysGetFlag(UINT32 uiFlag) { return (currentInfo.UIParameter[uiFlag]); } static void SysLimitFlag(UINT32 uiFlag, UINT32 uiMinId, UINT32 uiMaxId, UINT32 uiDefaultId) { UINT32 uiValue = SysGetFlag(uiFlag); if ((uiValue < uiMinId) || (uiValue > uiMaxId - 1)) { uiValue = uiDefaultId; } SysSetFlag(uiFlag, uiValue); } void SysCheckFlag(void) { // Check and limit system flag value // Photo SysLimitFlag(FL_PHOTO_SIZE, 0, PHOTO_SIZE_ID_MAX, DEFAULT_PHOTO_SIZE); SysLimitFlag(FL_SCENE, 0, SCENE_ID_MAX, DEFAULT_SCENE); SysLimitFlag(FL_QUALITY, 0, QUALITY_ID_MAX, DEFAULT_PHOTO_QUALITY); SysLimitFlag(FL_SELFTIMER, 0, SELFTIMER_ID_MAX, DEFAULT_SELFTIMER); SysLimitFlag(FL_ANTISHAKE, 0, ANTISHAKE_ID_MAX, DEFAULT_ANTISHAKING); SysLimitFlag(FL_FD, 0, FD_ID_MAX, DEFAULT_FD); SysLimitFlag(FL_WB, 0, WB_ID_MAX, DEFAULT_WB); SysLimitFlag(FL_COLOR_EFFECT, 0, COLOR_EFFECT_ID_MAX, DEFAULT_PHOTO_COLOR); SysLimitFlag(FL_CONTINUE_SHOT, 0, CONTINUE_SHOT_SETTING_MAX, DEFAULT_CONTINUE_SHOT); SysLimitFlag(FL_SHARPNESS, 0, SHARPNESS_ID_MAX, DEFAULT_SHARPNESS); SysLimitFlag(FL_EV, 0, EV_SETTING_MAX, DEFAULT_EV); SysLimitFlag(FL_ISO, 0, ISO_ID_MAX, DEFAULT_ISO); SysLimitFlag(FL_METERING, 0, METERING_ID_MAX, DEFAULT_METERING); // Movie SysLimitFlag(FL_MOVIE_SIZE, 0, MOVIE_SIZE_ID_MAX, DEFAULT_MOVIE_SIZE); SysLimitFlag(FL_MOVIE_CYCLIC_REC, 0, MOVIE_CYCLICREC_ID_MAX, DEFAULT_MOVIE_CYCLICREC); SysLimitFlag(FL_MOVIE_MOTION_DET, 0, MOVIE_MOTIONDET_ID_MAX, DEFAULT_MOVIE_MOTION_DET); SysLimitFlag(FL_MOVIE_AUDIO, 0, MOVIE_AUDIO_ID_MAX, DEFAULT_MOVIE_AUDIO); SysLimitFlag(FL_MOVIE_DATEIMPRINT, 0, MOVIE_DATEIMPRINT_ID_MAX, DEFAULT_MOVIE_DATEIMPRINT); SysLimitFlag(FL_MOVIE_HDR, 0, MOVIE_HDR_ID_MAX, DEFAULT_MOVIE_HDR); SysLimitFlag(FL_MOVIE_WDR, 0, MOVIE_WDR_ID_MAX, DEFAULT_MOVIE_WDR); SysLimitFlag(FL_MOVIE_DEFOG, 0, MOVIE_DEFOG_ID_MAX, DEFAULT_MOVIE_DEFOG); SysLimitFlag(FL_MOVIE_SENSOR_ROTATE, 0, SEN_ROTATE_MAX, DEFAULT_SENSOR_ROTATE); SysLimitFlag(FL_MovieAudioRecIndex, 0, MOVIE_VOL_MAX, DEFAULT_MOVIE_REC_VOLUME); SysLimitFlag(FL_MovieAudioRec, 0, MOVIE_AUD_REC_ID_MAX, DEFAULT_MOVIE_REC_AUD); //#NT#2016/06/14#Charlie Chang -begin //#NT#support contrast, audio in, audio in sample rate, flip, movie quality set SysLimitFlag(FL_MOVIE_CONTRAST, 0, MOVIE_CONTRAST_ID_MAX, DEFAULT_MOVIE_CONTRAST); SysLimitFlag(FL_MOVIE_AUDIOIN, 0, MOVIE_AUDIOIN_ID_MAX, DEFAULT_MOVIE_AUDIOIN); SysLimitFlag(FL_MOVIE_AUDIOIN_SR, 0, MOVIE_AUDIOIN_SR_ID_MAX, DEFAULT_MOVIE_AUDIOIN_SR); SysLimitFlag(FL_MOVIE_FLIP_MIRROR, 0, MOVIE_FLIP_MIRROR_ID_MAX, DEFAULT_MOVIE_FLIP_MIRROR); SysLimitFlag(FL_MOVIE_QUALITY_SET, 0, MOVIE_QUALITY_SET_ID_MAX, DEFAULT_MOVIE_QUALITY_SET); //#NT#2016/06/14#Charlie Chang -end //#NT#2017/03/03#Jeah Yen -begin //#NT# support sbs mode SysLimitFlag(FL_MOVIE_SBS_MODE, 0, MOVIE_SBS_ID_MAX, DEFAULT_MOVIE_SBS_MODE); //#NT#2017/03/03#Jeah Yen -end SysLimitFlag(FL_MOVIE_CODEC, 0, MOVIE_CODEC_ID_MAX, DEFAULT_MOVIE_CODEC); // Playback SysLimitFlag(FL_PROTECT, 0, FILE_PROTECT_ID_MAX, DEFAULT_PROTECT); SysLimitFlag(FL_MovieAudioPlayIndex, 0, MOVIE_AUDIO_VOL_SETTING_MAX, DEFAULT_MOVIE_PLAY_VOLUME); // System SysLimitFlag(FL_AudioPlayIndex, 0, AUDIO_VOL_MAX, DEFAULT_AUDIO_PLAY_VOLUME); SysLimitFlag(FL_LANGUAGE, 0, LANG_ID_MAX, DEFAULT_LANGUAGE); SysLimitFlag(FL_BEEP, 0, BEEP_ID_MAX, DEFAULT_BEEP); SysLimitFlag(FL_AUTO_POWER_OFF, 0, POWEROFF_SETTING_MAX, DEFAULT_AUTO_POWER_OFF); SysLimitFlag(FL_FREQUENCY, 0, FREQUENCY_ID_MAX, DEFAULT_FREQUENCY); SysLimitFlag(FL_TV_MODE, 0, TV_MODE_ID_MAX, DEFAULT_TV_MODE); SysLimitFlag(FL_DualDisp, 0, DUALDISP_SETTING_MAX, DEFAULT_DUALDISP); SysLimitFlag(FL_DATE_FORMAT, 0, DATE_FORMAT_ID_MAX, DEFAULT_DATE_FORMAT); SysLimitFlag(FL_OPENING_LOGO, 0, OPENING_LOGO_ID_MAX, DEFAULT_OPENING_LOGO); SysLimitFlag(FL_LCD_DISPLAY, 0, DISPOUT_ID_MAX, DEFAULT_LCD_DISPLAY); SysLimitFlag(FL_LCD_BRIGHTNESS, 0, LCDBRT_LVL_ID_MAX, DEFAULT_LCD_BRIGHTNESS); SysLimitFlag(FL_MACRO, 0, MACRO_ID_MAX, DEFAULT_MACRO); SysLimitFlag(FL_USB_MODE, 0, USB_MODE_ID_MAX, DEFAULT_USB_MODE); #if (USE_DCF==ENABLE) // Sepcial flags SysLimitFlag(FL_DCF_DIR_ID, MIN_DCF_DIR_NUM, MAX_DCF_DIR_NUM, MIN_DCF_DIR_NUM); SysLimitFlag(FL_DCF_FILE_ID, MIN_DCF_FILE_NUM, MAX_DCF_FILE_NUM, MIN_DCF_FILE_NUM); #endif #if(WIFI_FUNC==ENABLE) //Wi-Fi #if (WIFI_FINALCAM_APP_STYLE == ENABLE || UCTRL_APP_MOVIE_FEATURE_SETGET == ENABLE || YOUKU_SDK == ENABLE) SysLimitFlag(FL_WIFI_MOVIE_APP_PREVIEW_SIZE, 0, WIFI_MOVIE_APP_PREVIEW_SIZE_ID_MAX, DEFAULT_MOVIE_WIFI_APP_PREVIEW_SIZE); #endif SysLimitFlag(FL_WIFI_AUTO_RECORDING, 0, WIFI_AUTO_RECORDING_ID_MAX, DEFAULT_MOVIE_WIFI_AUTO_RECORDING_OPTION); SysLimitFlag(FL_NetWorkMode, 0, NET_MODE_SETTING_MAX, DEFAULT_WIFI_MODE); #endif } void SysSetFixedFlag(void) { // Fixed some system flags as system reset // Photo SysSetFlag(FL_CONTINUE_SHOT, DEFAULT_CONTINUE_SHOT); SysSetFlag(FL_SELFTIMER, DEFAULT_SELFTIMER); // Movie // Playback SysSetFlag(FL_PROTECT, DEFAULT_PROTECT); // System SysSetFlag(FL_LCD_DISPLAY, DEFAULT_LCD_DISPLAY); SysSetFlag(FL_LCD_BRIGHTNESS, DEFAULT_LCD_BRIGHTNESS); SysSetFlag(FL_MovieDisIndex, MOVIE_DIS_OFF); SysSetFlag(FL_COMMON_LOCAL, WIFI_OFF); SysSetFlag(FL_IsCloneRec, CLONE_REC_OFF); #if 0 // unnecessary if (System_GetState(SYS_STATE_CARD) == CARD_REMOVED) { SysSetFlag(FL_PHOTO_SIZE, PHOTO_SIZE_5M); SysSetFlag(FL_MOVIE_SIZE, MOVIE_SIZE_720P); } #endif } void SysSetFixedFlagSysInit(void) { // Set fixed system flags (only on system init) SysSetFlag(FL_WIFI_LINK, WIFI_LINK_NG); SysSetFlag(FL_DUAL_CAM, SysGetFlag(FL_DUAL_CAM_MENU)); SysSetFlag(FL_MOVIE_SIZE, SysGetFlag(FL_MOVIE_SIZE_MENU)); SysSetFlag(FL_MOVIE_HDR, SysGetFlag(FL_MOVIE_HDR_MENU)); SysSetFlag(FL_MOVIE_WDR, SysGetFlag(FL_MOVIE_WDR_MENU)); SysSetFlag(FL_MOVIE_DEFOG, SysGetFlag(FL_MOVIE_DEFOG_MENU)); SysSetFlag(FL_MovieRSCIndex, SysGetFlag(FL_MovieRSCIndex_MENU)); //#NT#2016/07/12#KCHong#[0104994] -begin //#NT#Use FL_MOVIE_LDWS_MENU & FL_MOVIE_FCW_MENU instead of FL_MOVIE_LDWS & FL_MOVIE_FCW SysSetFlag(FL_MOVIE_LDWS, SysGetFlag(FL_MOVIE_LDWS_MENU)); SysSetFlag(FL_MOVIE_FCW, SysGetFlag(FL_MOVIE_FCW_MENU)); //#NT#2016/07/12#KCHong#[0104994] -end //#NT#2016/07/26#KCHong#[0105955] -begin //#NT#If ADAS is ON and timelapse changes to OFF, reopen movie mode SysSetFlag(FL_MOVIE_TIMELAPSE_REC, SysGetFlag(FL_MOVIE_TIMELAPSE_REC_MENU)); //#NT#2016/07/26#KCHong#[0105955] -end //#NT#2016/08/19#Lincy Lin#[0106935] -begin //#NT# Support change WDR, SHDR, RSC setting will change mode after exit menu SysSetFlag(FL_RSC, SysGetFlag(FL_RSC_MENU)); SysSetFlag(FL_WDR, SysGetFlag(FL_WDR_MENU)); SysSetFlag(FL_SHDR, SysGetFlag(FL_SHDR_MENU)); //#NT#2016/08/19#Lincy Lin -end SysSetFlag(FL_DEFOG, SysGetFlag(FL_DEFOG_MENU)); SysSetFlag(FL_MOVIE_CODEC, SysGetFlag(FL_MOVIE_CODEC_MENU)); //wifi #if(WIFI_FUNC==ENABLE) SysSetFlag(FL_NetWorkMode, DEFAULT_WIFI_MODE); // Reset Wi-Fi mode to AP mode. #endif } void SysResetFlag(void) { // Set system flag default value here // Photo SysSetFlag(FL_PHOTO_SIZE, DEFAULT_PHOTO_SIZE); SysSetFlag(FL_QUALITY, DEFAULT_PHOTO_QUALITY); SysSetFlag(FL_COLOR_EFFECT, DEFAULT_PHOTO_COLOR); SysSetFlag(FL_SCENE, DEFAULT_SCENE); SysSetFlag(FL_EV, DEFAULT_EV); SysSetFlag(FL_ISO, DEFAULT_ISO); SysSetFlag(FL_WB, DEFAULT_WB); SysSetFlag(FL_METERING, DEFAULT_METERING); SysSetFlag(FL_SHARPNESS, DEFAULT_SHARPNESS); SysSetFlag(FL_SATURATION, DEFAULT_SATURATION); SysSetFlag(FL_FD, DEFAULT_FD); SysSetFlag(FL_ANTISHAKE, DEFAULT_ANTISHAKING); SysSetFlag(FL_RSC, DEFAULT_RSC); SysSetFlag(FL_WDR, DEFAULT_WDR); SysSetFlag(FL_DUAL_CAM_MENU, DEFAULT_DUAL_CAM); SysSetFlag(FL_QUICK_REVIEW, DEFAULT_QUICK_REVIEW); SysSetFlag(FL_DATE_STAMP, DEFAULT_DATE_STAMP); SysSetFlag(FL_SELFTIMER, DEFAULT_SELFTIMER); SysSetFlag(FL_FLASH_MODE, DEFAULT_FLASH_MODE); SysSetFlag(FL_CONTINUE_SHOT, DEFAULT_CONTINUE_SHOT); SysSetFlag(FL_SHDR, DEFAULT_SHDR); //#NT#2016/08/19#Lincy Lin#[0106935] -begin //#NT# Support change WDR, SHDR, RSC setting will change mode after exit menu SysSetFlag(FL_RSC_MENU, DEFAULT_RSC); SysSetFlag(FL_WDR_MENU, DEFAULT_WDR); SysSetFlag(FL_SHDR_MENU, DEFAULT_SHDR); //#NT#2016/08/19#Lincy Lin -end SysSetFlag(FL_DEFOG, DEFAULT_DEFOG); // Movie if (System_GetEnableSensor() == (SENSOR_1 | SENSOR_2)) { SysSetFlag(FL_MOVIE_SIZE_MENU, DEFAULT_MOVIE_SIZE_DUAL); } else { SysSetFlag(FL_MOVIE_SIZE_MENU, DEFAULT_MOVIE_SIZE); } SysSetFlag(FL_MOVIE_QUALITY, DEFAULT_MOVIE_QUALITY); SysSetFlag(FL_MOVIE_COLOR, DEFAULT_MOVIE_COLOR); SysSetFlag(FL_MOVIE_CYCLIC_REC, DEFAULT_MOVIE_CYCLICREC); SysSetFlag(FL_MOVIE_MOTION_DET, DEFAULT_MOVIE_MOTION_DET); SysSetFlag(FL_MOVIE_AUDIO, DEFAULT_MOVIE_AUDIO); SysSetFlag(FL_MOVIE_DATEIMPRINT, DEFAULT_MOVIE_DATEIMPRINT); SysSetFlag(FL_MOVIE_HDR_MENU, DEFAULT_MOVIE_HDR); SysSetFlag(FL_MOVIE_WDR_MENU, DEFAULT_MOVIE_WDR); SysSetFlag(FL_MOVIE_DEFOG_MENU, DEFAULT_MOVIE_DEFOG); SysSetFlag(FL_MovieRSCIndex_MENU, DEFAULT_MOVIE_RSC); SysSetFlag(FL_MOVIE_SENSOR_ROTATE, DEFAULT_SENSOR_ROTATE); SysSetFlag(FL_MovieMCTFIndex, DEFAULT_MCTFINDEX); SysSetFlag(FL_MOVIE_PTZ, DEFAULT_MOVIE_PTZ); SysSetFlag(FL_MOVIE_URGENT_PROTECT_AUTO, DEFAULT_MOVIE_URGENT_PROTECT_AUTO); SysSetFlag(FL_MOVIE_URGENT_PROTECT_MANUAL, DEFAULT_MOVIE_URGENT_PROTECT_MANUAL); SysSetFlag(FL_MOVIE_IR_CUT, DEFAULT_IR_CUT); //#NT#2016/07/26#KCHong#[0105955] -begin //#NT#If ADAS is ON and timelapse changes to OFF, reopen movie mode SysSetFlag(FL_MOVIE_TIMELAPSE_REC_MENU, DEFAULT_MOVIE_TIMELAPSE_REC); //#NT#2016/07/26#KCHong#[0105955] -end SysSetFlag(FL_MOVIE_PIM, DEFAULT_MOVIE_PIM); //#NT#2016/07/12#KCHong#[0104994] -begin //#NT#Use FL_MOVIE_LDWS_MENU & FL_MOVIE_FCW_MENU instead of FL_MOVIE_LDWS & FL_MOVIE_FCW SysSetFlag(FL_MOVIE_LDWS_MENU, DEFAULT_MOVIE_LDWS); SysSetFlag(FL_MOVIE_FCW_MENU, DEFAULT_MOVIE_FCWS); //#NT#2016/07/12#KCHong#[0104994] -end SysSetFlag(FL_MovieAudioRecIndex, DEFAULT_MOVIE_REC_VOLUME); SysSetFlag(FL_MovieAudioRec, DEFAULT_MOVIE_REC_AUD); SysSetFlag(FL_MOVIE_DDD, DEFAULT_MOVIE_DDD); SysSetFlag(FL_MOVIE_ADAS_CAL, DEFAULT_MOVIE_ADAS_CAL); SysSetFlag(FL_MOVIE_CODEC, DEFAULT_MOVIE_CODEC); SysSetFlag(FL_MOVIE_CODEC_MENU, DEFAULT_MOVIE_CODEC); // Playback SysSetFlag(FL_PROTECT, DEFAULT_PROTECT); SysSetFlag(FL_MovieAudioPlayIndex, DEFAULT_MOVIE_PLAY_VOLUME); // System SysSetFlag(FL_AudioPlayIndex, DEFAULT_AUDIO_PLAY_VOLUME); SysSetFlag(FL_AUTO_POWER_OFF, DEFAULT_AUTO_POWER_OFF); SysSetFlag(FL_LCD_OFF, DEFAULT_LCD_OFF); SysSetFlag(FL_BEEP, DEFAULT_BEEP); SysSetFlag(FL_LANGUAGE, DEFAULT_LANGUAGE); SysSetFlag(FL_FREQUENCY, DEFAULT_FREQUENCY); SysSetFlag(FL_TV_MODE, DEFAULT_TV_MODE); SysSetFlag(FL_HDMI_MODE, DEFAULT_HDMI_MODE); SysSetFlag(FL_DATE_FORMAT, DEFAULT_DATE_FORMAT); SysSetFlag(FL_OPENING_LOGO, DEFAULT_OPENING_LOGO); SysSetFlag(FL_CPU2_DEFAULT, 1); SysSetFlag(FL_LCD_DISPLAY, DEFAULT_LCD_DISPLAY); SysSetFlag(FL_LCD_BRIGHTNESS, DEFAULT_LCD_BRIGHTNESS); SysSetFlag(FL_DualDisp, DEFAULT_DUALDISP); SysSetFlag(FL_MACRO, DEFAULT_MACRO); SysSetFlag(FL_USB_MODE, DEFAULT_USB_MODE); SysSetFlag(FL_GSENSOR, DEFAULT_GSENSOR); SysSetFlag(FL_EDGE, DEFAULT_EDGE); SysSetFlag(FL_NR, DEFAULT_NR); //#NT#2016/06/14#Charlie Chang -begin //#NT#support contrast, two way audio in and sample rate, flip, movie qualiity set SysSetFlag(FL_MOVIE_CONTRAST, DEFAULT_MOVIE_CONTRAST); SysSetFlag(FL_MOVIE_AUDIOIN, DEFAULT_MOVIE_AUDIOIN); SysSetFlag(FL_MOVIE_AUDIOIN_SR, DEFAULT_MOVIE_AUDIOIN_SR); SysSetFlag(FL_MOVIE_FLIP_MIRROR, DEFAULT_MOVIE_FLIP_MIRROR); SysSetFlag(FL_MOVIE_QUALITY_SET, DEFAULT_MOVIE_QUALITY_SET); //#NT#2016/06/14#Charlie Chang -end //#NT#2017/03/03#Jeah Yen -begin //#NT# support sbs mode SysSetFlag(FL_MOVIE_SBS_MODE, DEFAULT_MOVIE_SBS_MODE); //#NT#2017/03/03#Jeah Yen -end // Wi-Fi #if(WIFI_FUNC==ENABLE) #if (WIFI_FINALCAM_APP_STYLE == ENABLE || UCTRL_APP_MOVIE_FEATURE_SETGET == ENABLE || YOUKU_SDK == ENABLE) SysSetFlag(FL_WIFI_MOVIE_APP_PREVIEW_SIZE, DEFAULT_MOVIE_WIFI_APP_PREVIEW_SIZE); #endif SysSetFlag(FL_WIFI_AUTO_RECORDING, DEFAULT_MOVIE_WIFI_AUTO_RECORDING_OPTION); SysSetFlag(FL_NetWorkMode, DEFAULT_WIFI_MODE); // Reset To Wi-Fi mode to AP mode. #endif SysSetFixedFlag(); } void SysExeMenuSettingFuncs(void) { #if (PHOTO_MODE==ENABLE) /*--- Photo ---*/ Ux_SendEvent(&CustomPhotoObjCtrl, NVTEVT_EXE_QUALITY, 1, SysGetFlag(FL_QUALITY)); Ux_SendEvent(&CustomPhotoObjCtrl, NVTEVT_EXE_ISO, 1, SysGetFlag(FL_ISO)); Ux_SendEvent(&CustomPhotoObjCtrl, NVTEVT_EXE_EV, 1, SysGetFlag(FL_EV)); Ux_SendEvent(&CustomPhotoObjCtrl, NVTEVT_EXE_WB, 1, SysGetFlag(FL_WB)); Ux_SendEvent(&CustomPhotoObjCtrl, NVTEVT_EXE_COLOR, 1, SysGetFlag(FL_COLOR_EFFECT)); Ux_SendEvent(&CustomPhotoObjCtrl, NVTEVT_EXE_METERING, 1, SysGetFlag(FL_METERING)); Ux_SendEvent(&CustomPhotoObjCtrl, NVTEVT_EXE_FD, 1, SysGetFlag(FL_FD)); Ux_SendEvent(&CustomPhotoObjCtrl, NVTEVT_EXE_CAPTURE_SIZE, 1, SysGetFlag(FL_PHOTO_SIZE)); Ux_SendEvent(&CustomPhotoObjCtrl, NVTEVT_EXE_SCENEMODE, 1, SysGetFlag(FL_SCENE)); Ux_SendEvent(&CustomPhotoObjCtrl, NVTEVT_EXE_SHARPNESS, 1, SysGetFlag(FL_SHARPNESS)); Ux_SendEvent(&CustomPhotoObjCtrl, NVTEVT_EXE_SATURATION, 1, SysGetFlag(FL_SATURATION)); Ux_SendEvent(&CustomPhotoObjCtrl, NVTEVT_EXE_DUALCAM, 1, SysGetFlag(FL_DUAL_CAM)); #endif #if (MOVIE_MODE==ENABLE) /*--- Movie ---*/ Ux_SendEvent(&CustomMovieObjCtrl, NVTEVT_EXE_MOVIEQUALITY, 1, SysGetFlag(FL_MOVIE_QUALITY)); Ux_SendEvent(&CustomMovieObjCtrl, NVTEVT_EXE_MOVIECOLOR, 1, SysGetFlag(FL_MOVIE_COLOR)); Ux_SendEvent(&CustomMovieObjCtrl, NVTEVT_EXE_DUALCAM, 1, SysGetFlag(FL_DUAL_CAM)); /* Cyclic recording/record with mute or sound/DateImptint/Motion Detect */ Ux_SendEvent(&CustomMovieObjCtrl, NVTEVT_EXE_CYCLIC_REC, 1, SysGetFlag(FL_MOVIE_CYCLIC_REC)); Ux_SendEvent(&CustomMovieObjCtrl, NVTEVT_EXE_MOTION_DET, 1, SysGetFlag(FL_MOVIE_MOTION_DET)); Ux_SendEvent(&CustomMovieObjCtrl, NVTEVT_EXE_MOVIE_DATE_IMPRINT, 1, SysGetFlag(FL_MOVIE_DATEIMPRINT)); Ux_SendEvent(&CustomMovieObjCtrl, NVTEVT_EXE_MOVIE_AUDIO, 1, SysGetFlag(FL_MOVIE_AUDIO)); Ux_SendEvent(&CustomMovieObjCtrl, NVTEVT_EXE_MOVIE_MCTF, 1, SysGetFlag(FL_MovieMCTFIndex)); Ux_SendEvent(&CustomMovieObjCtrl, NVTEVT_EXE_GSENSOR, 1, SysGetFlag(FL_GSENSOR)); Ux_SendEvent(&CustomMovieObjCtrl, NVTEVT_EXE_MOVIE_SENSOR_ROTATE, 1, SysGetFlag(FL_MOVIE_SENSOR_ROTATE)); Ux_SendEvent(&CustomMovieObjCtrl, NVTEVT_EXE_MOVIE_IR_CUT, 1, SysGetFlag(FL_MOVIE_IR_CUT)); Ux_SendEvent(&CustomMovieObjCtrl, NVTEVT_EXE_MOVIE_PROTECT_AUTO, 1, SysGetFlag(FL_MOVIE_URGENT_PROTECT_AUTO)); Ux_SendEvent(&CustomMovieObjCtrl, NVTEVT_EXE_MOVIE_PROTECT_MANUAL, 1, SysGetFlag(FL_MOVIE_URGENT_PROTECT_MANUAL)); Ux_SendEvent(&CustomMovieObjCtrl, NVTEVT_EXE_MOVIE_LDWS, 1, SysGetFlag(FL_MOVIE_LDWS)); Ux_SendEvent(&CustomMovieObjCtrl, NVTEVT_EXE_MOVIE_FCW, 1, SysGetFlag(FL_MOVIE_FCW)); Ux_SendEvent(&CustomMovieObjCtrl, NVTEVT_EXE_MOVIE_CODEC, 1, SysGetFlag(FL_MOVIE_CODEC)); Ux_SendEvent(&CustomMovieObjCtrl, NVTEVT_EXE_MOVIE_WDR, 1, SysGetFlag(FL_MOVIE_WDR)); #endif /*--- Setup ---*/ Ux_SendEvent(&UISetupObjCtrl, NVTEVT_EXE_LANGUAGE, 1, SysGetFlag(FL_LANGUAGE)); #if (TV_FUNC == ENABLE) Ux_SendEvent(&UISetupObjCtrl, NVTEVT_EXE_TVFORMAT, 1, SysGetFlag(FL_TV_MODE)); #endif Ux_SendEvent(&UISetupObjCtrl, NVTEVT_EXE_POWEROFF, 1, SysGetFlag(FL_AUTO_POWER_OFF)); Ux_SendEvent(&UISetupObjCtrl, NVTEVT_EXE_LCDOFF, 1, SysGetFlag(FL_LCD_OFF)); Ux_SendEvent(&UISetupObjCtrl, NVTEVT_EXE_BEEPKEY, 1, SysGetFlag(FL_BEEP)); Ux_SendEvent(&UISetupObjCtrl, NVTEVT_EXE_DISPLAY, 1, SysGetFlag(FL_LCD_DISPLAY)); Ux_SendEvent(&UISetupObjCtrl, NVTEVT_EXE_FREQ, 1, SysGetFlag(FL_FREQUENCY)); Ux_SendEvent(&UISetupObjCtrl, NVTEVT_EXE_DATEFORMAT, 1, SysGetFlag(FL_DATE_FORMAT)); #if (WIFI_FUNC==ENABLE) /*--- Wi-Fi ---*/ if (UI_GetData(FL_NetWorkMode) == NET_AP_MODE || UI_GetData(FL_NetWorkMode) == NET_WPS_AP_PBC_MODE) { if (currentInfo.strSSID[0] != 0) { // Load SSID if existed. Ux_SendEvent(&UISetupObjCtrl, NVTEVT_EXE_WIFI_SET_SSID, 1, currentInfo.strSSID); } if (currentInfo.strPASSPHRASE[0] != 0) { // Load PASSPHARSE if existed. Ux_SendEvent(&UISetupObjCtrl, NVTEVT_EXE_WIFI_SET_PASSPHRASE, 1, currentInfo.strPASSPHRASE); } } else if (UI_GetData(FL_NetWorkMode) == NET_STATION_MODE) { char szTemp[NVT_WSC_MAX_SSID_LEN + NVT_MAX_WEP_KEY_LEN] = {0}; if (currentInfo.strSSID_hotspot_1[0] && currentInfo.strPASSPHRASE_hotspot_1[0]) { // Load SSID and passphrase if existed. snprintf(szTemp, NVT_WSC_MAX_SSID_LEN + NVT_MAX_WEP_KEY_LEN, "%s:%s", currentInfo.strSSID_hotspot_1, currentInfo.strPASSPHRASE_hotspot_1); Ux_SendEvent(&UISetupObjCtrl, NVTEVT_EXE_WIFI_SEND_SSID_PASSPHRASE, 1, szTemp); } } #endif } void Photo_SetUserIndex(PHOTO_USR_ITEM_T uiItem, UINT32 uhIndex) { DBG_IND("Photo_SetUserIndex: Item %d, index %d\r\n", uiItem, uhIndex); if (UI_GetData(FL_IsInitSettingFlag) == FALSE) { /* Update Photo Mode user defined settings data while init setting flag is off */ switch (uiItem) { case PHOTO_USR_FLASH: currentInfo.ubFlashIndex = uhIndex; break; case PHOTO_USR_EV: currentInfo.ubEVIndex = uhIndex; break; case PHOTO_USR_AFWINDOW: currentInfo.ubAFWindowIndex = uhIndex; break; case PHOTO_USR_AFBEAM: currentInfo.ubAFBeamIndex = uhIndex; break; case PHOTO_USR_METERING: currentInfo.ubAEmode = uhIndex; break; case PHOTO_USR_TIMELAPSE: currentInfo.ubTimelapseIndex = uhIndex; break; case PHOTO_USR_CONTSHOT: currentInfo.ubContshotIndex = uhIndex; break; case PHOTO_USR_CONTAF: currentInfo.ubContAF = uhIndex; break; case PHOTO_USR_QREVIEW: currentInfo.ubQviewIndex = uhIndex; break; case PHOTO_USR_DZOOMSTATUS: currentInfo.ubDzoom = uhIndex; break; case PHOTO_USR_SLOWSHUTTER: currentInfo.ubSlowShutter = uhIndex; break; case PHOTO_USR_DATEIMPRINT: currentInfo.ubDatePrint = uhIndex; break; case PHOTO_USR_BLINK: currentInfo.ubBlinkDet = uhIndex; break; case PHOTO_USR_PANDET: currentInfo.ubPanModeIndex = uhIndex; break; case PHOTO_USR_COLOR: currentInfo.ubColorIndex = uhIndex; break; case PHOTO_USR_SIZE: currentInfo.ubSizeIndex = uhIndex; break; case PHOTO_USR_QUALITY: currentInfo.ubQualityIndex = uhIndex; break; case PHOTO_USR_ISO: currentInfo.ubISOIndex = uhIndex; break; case PHOTO_USR_WB: currentInfo.ubWBIndex = uhIndex; break; //#NT#Store FD index after power off case PHOTO_USR_FD: currentInfo.ubFDIndex = uhIndex; break; /* case PHOTO_USR_SATURATION: currentInfo.ubSaturationIndex = uhIndex; break; */ case PHOTO_USR_SHARPNESS: currentInfo.ubSharpnessIndex = uhIndex; break; /* case PHOTO_USR_CONTRAST: currentInfo.ubContrastIndex = uhIndex; break; */ case PHOTO_USR_DISPMODE: currentInfo.ubPhotoDispMode = uhIndex; break; default: DBG_ERR("Photo_SetUserIndex: Unknown item %d\r\n", uiItem); break; } } else { /* While init setting flag is on, do NOT update Photo Mode user defined settings data */ DBG_IND("Photo_SetUserIndex: Init setting flag is ON, no update item %d\r\n", uiItem); } } UINT32 Photo_GetUserIndex(PHOTO_USR_ITEM_T uiItem) { UINT32 uhUserIndex; switch (uiItem) { case PHOTO_USR_FLASH: uhUserIndex = currentInfo.ubFlashIndex; break; case PHOTO_USR_EV: uhUserIndex = currentInfo.ubEVIndex; break; case PHOTO_USR_AFWINDOW: uhUserIndex = currentInfo.ubAFWindowIndex; break; case PHOTO_USR_AFBEAM: uhUserIndex = currentInfo.ubAFBeamIndex; break; case PHOTO_USR_METERING: uhUserIndex = currentInfo.ubAEmode; break; case PHOTO_USR_TIMELAPSE: uhUserIndex = currentInfo.ubTimelapseIndex; break; case PHOTO_USR_CONTSHOT: uhUserIndex = currentInfo.ubContshotIndex; break; case PHOTO_USR_CONTAF: uhUserIndex = currentInfo.ubContAF; break; case PHOTO_USR_QREVIEW: uhUserIndex = currentInfo.ubQviewIndex; break; case PHOTO_USR_DZOOMSTATUS: uhUserIndex = currentInfo.ubDzoom; break; case PHOTO_USR_SLOWSHUTTER: uhUserIndex = currentInfo.ubSlowShutter; break; case PHOTO_USR_DATEIMPRINT: uhUserIndex = currentInfo.ubDatePrint; break; case PHOTO_USR_BLINK: uhUserIndex = currentInfo.ubBlinkDet; break; case PHOTO_USR_PANDET: uhUserIndex = currentInfo.ubPanModeIndex; break; case PHOTO_USR_COLOR: uhUserIndex = currentInfo.ubColorIndex; break; case PHOTO_USR_SIZE: uhUserIndex = currentInfo.ubSizeIndex; break; case PHOTO_USR_QUALITY: uhUserIndex = currentInfo.ubQualityIndex; break; case PHOTO_USR_ISO: uhUserIndex = currentInfo.ubISOIndex; break; case PHOTO_USR_WB: uhUserIndex = currentInfo.ubWBIndex; break; //#NT#Store FD index after power off case PHOTO_USR_FD: uhUserIndex = currentInfo.ubFDIndex; break; /* case PHOTO_USR_SATURATION: uhUserIndex = currentInfo.ubSaturationIndex; break; */ case PHOTO_USR_SHARPNESS: uhUserIndex = currentInfo.ubSharpnessIndex; break; /* case PHOTO_USR_CONTRAST: uhUserIndex = currentInfo.ubContrastIndex; break; */ case PHOTO_USR_DISPMODE: uhUserIndex = currentInfo.ubPhotoDispMode; break; default: uhUserIndex = 0xFFFF; DBG_ERR("Photo_GetUserIndex: Unknown item %d\r\n", uiItem); break; } DBG_IND("Photo_GetUserIndex: Get item %d user index %d\r\n", uiItem, uhUserIndex); return uhUserIndex; } #if (TV_FUNC == ENABLE) extern DX_HANDLE gDevTVObj; #endif #if (HDMI_FUNC == ENABLE) extern DX_HANDLE gDevHDMIObj; #endif PLUG_DEV KeyScan_GetPlugDev(void) { UINT32 r = PLUG_OFF; #if ((TV_FUNC == ENABLE) || (HDMI_FUNC == ENABLE)) DX_HANDLE uiDevObj1, uiDevObj2; uiDevObj1 = (DX_HANDLE)GxVideo_GetDevice(DOUT1); uiDevObj2 = (DX_HANDLE)GxVideo_GetDevice(DOUT2); #endif #if (TV_FUNC == ENABLE) if (uiDevObj1 == gDevTVObj || uiDevObj2 == gDevTVObj) { r = PLUG_TV; } #endif #if (HDMI_FUNC == ENABLE) if (uiDevObj1 == gDevHDMIObj || uiDevObj2 == gDevHDMIObj) { r = PLUG_HDMI; } #endif return r; } #if (USE_DCF==ENABLE) //----------------------------------------------------------------------------- // Update DCF Folder/File name Utility //----------------------------------------------------------------------------- static BOOL FlowDCF_GetNextDCFFolderID(UINT32 *pDirID) { BOOL ret = FALSE; UINT32 uiCurDCFID, uiDirCount; SDCFDIRINFO dirinfo; uiCurDCFID = DCF_GetDBInfo(DCF_INFO_CUR_DIR_ID); uiDirCount = 0; do { if (uiCurDCFID == MAX_DCF_DIR_NUM) { uiCurDCFID = MIN_DCF_DIR_NUM; } else { uiCurDCFID++; } uiDirCount++; if (!DCF_GetDirInfo(uiCurDCFID, &dirinfo)) { *pDirID = uiCurDCFID; ret = TRUE; break; } } while (uiDirCount == (MAX_DCF_DIR_NUM - MIN_DCF_DIR_NUM)); return ret; } void FlowDCF_UpdateName(void) { CHAR FolderName[6] = "MEDIA"; CHAR FileName[5] = "PTDC"; char DCFpathname[0x20]; UINT32 uiAddr, uiNextDCFID; CHAR filePath[DCF_FULL_FILE_PATH_LEN]; struct tm Curr_DateTime; Curr_DateTime = HwClock_GetTime(TIME_ID_CURRENT); snprintf(FolderName, sizeof(FolderName), "%1d%02d%02d", Curr_DateTime.tm_year % 0x0A, Curr_DateTime.tm_mon,Curr_DateTime.tm_mday); snprintf(FileName, sizeof(FileName), "%02d%02d", Curr_DateTime.tm_hour, Curr_DateTime.tm_min); uiAddr = DCF_GetDBInfo(DCF_INFO_DIR_FREE_CHARS); memcpy((UB *)DCFpathname, (UB *)uiAddr, DCF_DIR_NAME_LEN); if (strncmp(DCFpathname, FolderName, 5)) { if (FlowDCF_GetNextDCFFolderID(&uiNextDCFID) == TRUE) { DCF_SetDirFreeChars(FolderName); DCF_MakeDirPath(uiNextDCFID, filePath); if (FileSys_MakeDir(filePath) != FST_STA_OK) { DBG_ERR("MakeDir %s Fail\r\n", filePath); } DCF_SetNextID(uiNextDCFID, MIN_DCF_FILE_NUM); } else { debug_msg("DCF Folder full\r\n"); } } // update DCF file name in current RTC time DCF_SetFileFreeChars(DCF_FILE_TYPE_ANYFORMAT, FileName); } #endif