1.软升级改到uboot下

This commit is contained in:
payton 2023-10-24 17:08:35 +08:00
parent 0a4ce6f506
commit 7ce822975c
16 changed files with 579 additions and 12 deletions

View File

@ -1436,7 +1436,8 @@ CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y
# CONFIG_GPIO_WATCHDOG is not set # CONFIG_GPIO_WATCHDOG is not set
# CONFIG_XILINX_WATCHDOG is not set # CONFIG_XILINX_WATCHDOG is not set
# CONFIG_ZIIRAVE_WATCHDOG is not set # CONFIG_ZIIRAVE_WATCHDOG is not set
# CONFIG_NA51055_WATCHDOG is not set CONFIG_NA51055_WATCHDOG=y
# CONFIG_NA51055_WATCHDOG_EXTERNAL_RESET is not set
# CONFIG_CADENCE_WATCHDOG is not set # CONFIG_CADENCE_WATCHDOG is not set
# CONFIG_FTWDT010_WATCHDOG is not set # CONFIG_FTWDT010_WATCHDOG is not set
# CONFIG_DW_WATCHDOG is not set # CONFIG_DW_WATCHDOG is not set

View File

@ -127,12 +127,35 @@ int board_eth_init(bd_t *bis)
} }
#ifdef CONFIG_NVT_IVOT_SOC_FW_UPDATE_SUPPORT #ifdef CONFIG_NVT_IVOT_SOC_FW_UPDATE_SUPPORT
#define MAKEFOURCC(ch0, ch1, ch2, ch3) ((unsigned int)(unsigned char)(ch0) | ((unsigned int)(unsigned char)(ch1) << 8) | ((unsigned int)(unsigned char)(ch2) << 16) | ((unsigned int)(unsigned char)(ch3) << 24 ))
#define WDT_REG_ADDR(ofs) (IOADDR_WDT_REG_BASE+(ofs))
#define WDT_GETREG(ofs) INW(WDT_REG_ADDR(ofs))
#define WDT_SETREG(ofs,value) OUTW(WDT_REG_ADDR(ofs), (value))
typedef enum {
WDT_OTA_STS_INVALID = 0,
WDT_OTA_STS_LOADER_DETECTING_FW,
WDT_OTA_STS_UBOOT_UPDATE_FAILED,
WDT_OTA_STS_UBOOT_UPDATE_OPEN_FAILED,
WDT_OTA_STS_UBOOT_UPDATE_READ_FAILED,
WDT_OTA_STS_UBOOT_UPDATE_NO_NEED,
WDT_OTA_STS_UBOOT_UPDATE_UNKNOWN,
WDT_OTA_STS_UBOOT_UPDATE_OK, /* uboot stage ok */
WDT_OTA_STS_LINUX_TRIGGER, /* linux stage trigger ota */
} WDT_OTA_STS;
#define WDT_OTA_MAKEFOURCC(sts) MAKEFOURCC('O','T','A', sts)
#define WDT_OTA_SET_STS(sts) WDT_SETREG(0x84, WDT_OTA_MAKEFOURCC(sts))
#define WDT_OTA_GET_STS() WDT_GETREG(0x84)
static int nvt_handle_fw_abin(void) static int nvt_handle_fw_abin(void)
{ {
int ret = 0; int ret = 0;
char cmdline[1024] = {0}; char cmdline[1024] = {0};
char buf[1024] = {0}; char buf[1024] = {0};
int ota_upgrade_sts = 0; int ota_upgrade_sts = 0;
int is_ota = (WDT_OTA_GET_STS() == WDT_OTA_MAKEFOURCC(WDT_OTA_STS_LOADER_DETECTING_FW)) ? 1 : 0;
/* To handle firmware update */ /* To handle firmware update */
ret = nvt_fw_update(false); ret = nvt_fw_update(false);
@ -140,19 +163,38 @@ static int nvt_handle_fw_abin(void)
switch (ret) { switch (ret) {
case ERR_NVT_UPDATE_FAILED: case ERR_NVT_UPDATE_FAILED:
printf("%sUpdate fail %s\r\n", ANSI_COLOR_RED, ANSI_COLOR_RESET); printf("%sUpdate fail %s\r\n", ANSI_COLOR_RED, ANSI_COLOR_RESET);
if(is_ota)
WDT_OTA_SET_STS(WDT_OTA_STS_UBOOT_UPDATE_FAILED);
return -1; return -1;
break; break;
case ERR_NVT_UPDATE_OPENFAILED: case ERR_NVT_UPDATE_OPENFAILED:
printf("Open SD fail:%s No SD device? %s\r\n", ANSI_COLOR_YELLOW, ANSI_COLOR_RESET); printf("Open SD fail:%s No SD device? %s\r\n", ANSI_COLOR_YELLOW, ANSI_COLOR_RESET);
if(is_ota)
WDT_OTA_SET_STS(WDT_OTA_STS_UBOOT_UPDATE_OPEN_FAILED);
break; break;
case ERR_NVT_UPDATE_READ_FAILED: case ERR_NVT_UPDATE_READ_FAILED:
printf("%sRead SD fail %s\r\n", ANSI_COLOR_RED, ANSI_COLOR_RESET); printf("%sRead SD fail %s\r\n", ANSI_COLOR_RED, ANSI_COLOR_RESET);
if(is_ota)
WDT_OTA_SET_STS(WDT_OTA_STS_UBOOT_UPDATE_READ_FAILED);
return -1; return -1;
break; break;
case ERR_NVT_UPDATE_NO_NEED: case ERR_NVT_UPDATE_NO_NEED:
printf("%sNo need to update (%s) %s\r\n", ANSI_COLOR_YELLOW, get_nvt_bin_name(NVT_BIN_NAME_TYPE_FW), ANSI_COLOR_RESET); printf("%sNo need to update (%s) %s\r\n", ANSI_COLOR_YELLOW, get_nvt_bin_name(NVT_BIN_NAME_TYPE_FW), ANSI_COLOR_RESET);
if(is_ota)
WDT_OTA_SET_STS(WDT_OTA_STS_UBOOT_UPDATE_NO_NEED);
break; break;
default: default:
if(is_ota)
WDT_OTA_SET_STS(WDT_OTA_STS_UBOOT_UPDATE_UNKNOWN);
break; break;
} }
ret = nvt_fdt_init(true); ret = nvt_fdt_init(true);
@ -162,6 +204,9 @@ static int nvt_handle_fw_abin(void)
} else{ } else{
printf("%s%s:%d Update successfully %s\r\n", ANSI_COLOR_YELLOW, __FUNCTION__, __LINE__, ANSI_COLOR_RESET); printf("%s%s:%d Update successfully %s\r\n", ANSI_COLOR_YELLOW, __FUNCTION__, __LINE__, ANSI_COLOR_RESET);
ota_upgrade_sts = 1; ota_upgrade_sts = 1;
if(is_ota)
WDT_OTA_SET_STS(WDT_OTA_STS_UBOOT_UPDATE_OK);
} }
/* /*
* To handle bootargs expanding for the kernel /proc/cmdline and uboot mtdids env setting * To handle bootargs expanding for the kernel /proc/cmdline and uboot mtdids env setting
@ -175,6 +220,7 @@ static int nvt_handle_fw_abin(void)
if (ota_upgrade_sts == 1) { if (ota_upgrade_sts == 1) {
strcat(cmdline, "ota_flag=0x1"); strcat(cmdline, "ota_flag=0x1");
} }
env_set("bootargs",cmdline); env_set("bootargs",cmdline);
return 0; return 0;

View File

@ -970,6 +970,7 @@
#define SF_CAM_UP_FILE "S530.tar.bz2" #define SF_CAM_UP_FILE "S530.tar.bz2"
#define SF_CAM_UP_FILE_PATH "/mnt/sd/S530.tar.bz2" #define SF_CAM_UP_FILE_PATH "/mnt/sd/S530.tar.bz2"
#define SF_CAMERA_GPS_INFO_FILENAME SF_SD_ROOT"/gps.txt" #define SF_CAMERA_GPS_INFO_FILENAME SF_SD_ROOT"/gps.txt"
#define SF_UBOOT_UPDATA_FW ENABLE
//////////////////////sf end/////////////////////////////// //////////////////////sf end///////////////////////////////
/******************************************************************************************* /*******************************************************************************************

View File

@ -158,7 +158,7 @@ INT32 System_GetBootFirstMode(void)
{ {
return PRIMARY_MODE_PHOTO; return PRIMARY_MODE_PHOTO;
} }
else if((PWR_ON_SETUP != PowerOnMode) || (sf_get_fw_update())) else if((PWR_ON_SETUP != PowerOnMode) /*|| (sf_get_fw_update())*/)
{ {
return PRIMARY_MODE_TRANSCODE; return PRIMARY_MODE_TRANSCODE;
} }

View File

@ -329,6 +329,24 @@ typedef enum {
UIAPPPHOTO_FRAME_CMD_MAX UIAPPPHOTO_FRAME_CMD_MAX
} UIAPPPHOTO_FRAME_CMD; } UIAPPPHOTO_FRAME_CMD;
#define IOADDR_WDT_REG_BASE (0xF0050000)
#define WDT_REG_ADDR(ofs) (IOADDR_WDT_REG_BASE+(ofs))
#define WDT_DATA_OFS 0x84
typedef enum {
WDT_OTA_STS_INVALID = 0,
WDT_OTA_STS_LOADER_DETECTING_FW,
WDT_OTA_STS_UBOOT_UPDATE_FAILED,
WDT_OTA_STS_UBOOT_UPDATE_OPEN_FAILED,
WDT_OTA_STS_UBOOT_UPDATE_READ_FAILED,
WDT_OTA_STS_UBOOT_UPDATE_NO_NEED,
WDT_OTA_STS_UBOOT_UPDATE_UNKNOWN,
WDT_OTA_STS_UBOOT_UPDATE_OK,
WDT_OTA_STS_LINUX_TRIGGER,
} WDT_OTA_STS;
#define WDT_OTA_MAKEFOURCC(sts) MAKEFOURCC('O','T','A', sts)
typedef struct _PhotoFrameDataType { typedef struct _PhotoFrameDataType {
UINT32 offset; UINT32 offset;
UINT32 size; UINT32 size;

View File

@ -4037,6 +4037,10 @@ INT32 PhotoExe_OnNR(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
INT32 PhotoExe_OnFocusEnd(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray) INT32 PhotoExe_OnFocusEnd(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
{ {
extern UIMenuStoreInfo currentInfo;
currentInfo.OtaFlag = WDT_OTA_MAKEFOURCC(WDT_OTA_STS_LINUX_TRIGGER);
Save_MenuInfo();
return NVTEVT_CONSUME; return NVTEVT_CONSUME;
} }

View File

@ -581,6 +581,62 @@ static BOOL cmd_photo_trigger_cap(unsigned char argc, char **argv)
} }
static BOOL cmd_photo_ota_trigger(unsigned char argc, char **argv)
{
UINT32 uiUserData = WDT_OTA_MAKEFOURCC(WDT_OTA_STS_LINUX_TRIGGER);
char cmd[128]={0};
Ux_PostEvent(NVTEVT_ALGMSG_FOCUSEND, 0);
sprintf(cmd, "mem w %x %x",WDT_REG_ADDR(WDT_DATA_OFS),uiUserData);
system(cmd);
system("watchdog -T 1 -t 5 /dev/watchdog");
return TRUE;
}
static BOOL cmd_photo_ota_result(unsigned char argc, char **argv)
{
system("devmem 0xF0050084 32 > /tmp/ota_sts");
FILE* fd = fopen("/tmp/ota_sts", "r");
char buf[16];
UINT32 ota_mask = 0x00FFFFFF; /* mask status */
UINT32 ota_prefix = WDT_OTA_MAKEFOURCC(WDT_OTA_STS_UBOOT_UPDATE_OK) & ota_mask; /* OTA */
if(fd){
buf[11] = '\0';
fread(buf, 10, 1, fd);
DBG_DUMP("ota_sts_str = %s\n", buf);
UINT32 ota_sts = strtoul(buf, NULL, 16);
DBG_DUMP("ota_sts = %08X , masked = %08X\n", ota_sts, ota_sts & ota_mask);
/* OTA success */
if(ota_sts == WDT_OTA_MAKEFOURCC(WDT_OTA_STS_UBOOT_UPDATE_OK)){
DBG_DUMP("update ok!\n");
}
/* not OTA */
else if(ota_sts == 0x0){
DBG_DUMP("not ota\n");
}
/* OTA wrong status */
else if ((ota_sts & ota_mask) == ota_prefix){
DBG_DUMP("ota error!\n");
}
}
else{
DBG_ERR("/tmp/ota_sts not found!\n");
}
return TRUE;
}
static SXCMD_BEGIN(uiphoto_cmd_tbl, "uiphoto_cmd_tbl") static SXCMD_BEGIN(uiphoto_cmd_tbl, "uiphoto_cmd_tbl")
SXCMD_ITEM("fd %", cmd_fd, "fd off/on, indxe value 0 ~ 1") SXCMD_ITEM("fd %", cmd_fd, "fd off/on, indxe value 0 ~ 1")
SXCMD_ITEM("ev %", cmd_ev, "ev -2 ~ +2, index value 0 ~ 12") SXCMD_ITEM("ev %", cmd_ev, "ev -2 ~ +2, index value 0 ~ 12")
@ -604,6 +660,8 @@ SXCMD_ITEM("quefull %", cmd_quefull, "ui queue full")
SXCMD_ITEM("dumpfdb", cmd_photo_dumpfdb, "dump filedb 0") SXCMD_ITEM("dumpfdb", cmd_photo_dumpfdb, "dump filedb 0")
SXCMD_ITEM("photo %", cmd_photo, "photo mode setting") SXCMD_ITEM("photo %", cmd_photo, "photo mode setting")
SXCMD_ITEM("cap", cmd_photo_trigger_cap, "trigger cap") SXCMD_ITEM("cap", cmd_photo_trigger_cap, "trigger cap")
SXCMD_ITEM("ota_trigger %", cmd_photo_ota_trigger, "ota trigger")
SXCMD_ITEM("ota_result %", cmd_photo_ota_result, "ota result")
SXCMD_END() SXCMD_END()

View File

@ -107,7 +107,7 @@ static HD_RESULT _TranscodeExe_CommPool_Init(void)
/* src image yuv buffer */ /* src image yuv buffer */
mem_cfg.pool_info[id].type = HD_COMMON_MEM_COMMON_POOL; mem_cfg.pool_info[id].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE() + _TranscodeExe_Get_Max_Cap_Buf_Size(); mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE() + _TranscodeExe_Get_Max_Cap_Buf_Size();
#if HUNTING_CAMERA_MCU == ENABLE #if (HUNTING_CAMERA_MCU == ENABLE) && (SF_UBOOT_UPDATA_FW != ENABLE)
if(sf_get_fw_update()) if(sf_get_fw_update())
{ {
mem_cfg.pool_info[id].blk_cnt = 0; mem_cfg.pool_info[id].blk_cnt = 0;
@ -124,7 +124,7 @@ static HD_RESULT _TranscodeExe_CommPool_Init(void)
id++; id++;
mem_cfg.pool_info[id].type = HD_COMMON_MEM_COMMON_POOL; mem_cfg.pool_info[id].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE() + _TranscodeExe_Get_Target_Buf_Size(); mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE() + _TranscodeExe_Get_Target_Buf_Size();
#if HUNTING_CAMERA_MCU == ENABLE #if (HUNTING_CAMERA_MCU == ENABLE) && (SF_UBOOT_UPDATA_FW != ENABLE)
if(sf_get_fw_update()) if(sf_get_fw_update())
{ {
mem_cfg.pool_info[id].blk_cnt = 0; mem_cfg.pool_info[id].blk_cnt = 0;

View File

@ -136,4 +136,6 @@ void sf_set_wifi_socket(int fd);
int sf_get_wifi_socket(void); int sf_get_wifi_socket(void);
BOOL sf_cmd_para_printf(unsigned char argc, char **argv); BOOL sf_cmd_para_printf(unsigned char argc, char **argv);
BOOL cmd_blu_switch(unsigned char argc, char **argv); BOOL cmd_blu_switch(unsigned char argc, char **argv);
BOOL sf_ota_trigger(void);
BOOL sf_ota_result(void);
#endif #endif

View File

@ -2067,11 +2067,73 @@ static UINT32 sf_fwupdate(void)
return result; return result;
} }
BOOL sf_ota_trigger(void)
{
UINT32 uiUserData = WDT_OTA_MAKEFOURCC(WDT_OTA_STS_LINUX_TRIGGER);
char cmd[128]={0};
Ux_PostEvent(NVTEVT_ALGMSG_FOCUSEND, 0);
sprintf(cmd, "mem w %x %x",WDT_REG_ADDR(WDT_DATA_OFS),uiUserData);
system(cmd);
system("watchdog -T 1 -t 5 /dev/watchdog");
return TRUE;
}
BOOL sf_ota_result(void)
{
system("devmem 0xF0050084 32 > /tmp/ota_sts");
FILE* fd = fopen("/tmp/ota_sts", "r");
char buf[16];
UINT32 ota_mask = 0x00FFFFFF; /* mask status */
UINT32 ota_prefix = WDT_OTA_MAKEFOURCC(WDT_OTA_STS_UBOOT_UPDATE_OK) & ota_mask; /* OTA */
if(fd){
buf[11] = '\0';
fread(buf, 10, 1, fd);
DBG_DUMP("ota_sts_str = %s\n", buf);
UINT32 ota_sts = strtoul(buf, NULL, 16);
DBG_DUMP("ota_sts = %08X , masked = %08X\n", ota_sts, ota_sts & ota_mask);
/* OTA success */
if(ota_sts == WDT_OTA_MAKEFOURCC(WDT_OTA_STS_UBOOT_UPDATE_OK)){
DBG_DUMP("update ok!\n");
sf_mcu_reg_set(SF_MCU_SOFT_UPDATE, 0);
sf_set_send_statu(FALSE);
}
/* not OTA */
else if(ota_sts == 0x0){
DBG_DUMP("not ota\n");
}
/* OTA wrong status */
else if ((ota_sts & ota_mask) == ota_prefix){
DBG_DUMP("ota error!\n");
sf_sys_status_led_set(SF_LED_SYS_STATE_ERROR);
sf_mcu_reg_set(SF_MCU_SOFT_UPDATE, 0);
sf_set_send_statu(FALSE);
vos_util_delay_ms(1000);
}
}
else{
DBG_ERR("/tmp/ota_sts not found!\n");
}
return TRUE;
}
void* sf_sys_do_upgrade(void *arg) void* sf_sys_do_upgrade(void *arg)
{ {
//int s32Ret = 0; //int s32Ret = 0;
#if !SF_UBOOT_UPDATA_FW
UIMenuStoreInfo *puiPara = sf_ui_para_get(); UIMenuStoreInfo *puiPara = sf_ui_para_get();
#endif
SLOGW("Begin to do Upgrade!\n"); SLOGW("Begin to do Upgrade!\n");
//if(sf_is_enough_power_to_update() == FALSE) //if(sf_is_enough_power_to_update() == FALSE)
@ -2085,6 +2147,9 @@ void* sf_sys_do_upgrade(void *arg)
sf_sys_status_led_set(SF_LED_SYS_STATE_UPDATE); sf_sys_status_led_set(SF_LED_SYS_STATE_UPDATE);
vos_util_delay_ms(500); vos_util_delay_ms(500);
#if SF_UBOOT_UPDATA_FW
sf_ota_trigger();
#else
//BKG_PostEvent(NVTEVT_BKW_FW_UPDATE); //BKG_PostEvent(NVTEVT_BKW_FW_UPDATE);
if(0 != sf_fwupdate()){ if(0 != sf_fwupdate()){
sf_sys_status_led_set(SF_LED_SYS_STATE_ERROR); sf_sys_status_led_set(SF_LED_SYS_STATE_ERROR);
@ -2095,6 +2160,7 @@ void* sf_sys_do_upgrade(void *arg)
Save_MenuInfo(); Save_MenuInfo();
//sync(); //sync();
} }
sf_mcu_reg_set(SF_MCU_SOFT_UPDATE, 0); sf_mcu_reg_set(SF_MCU_SOFT_UPDATE, 0);
sf_set_send_statu(FALSE); sf_set_send_statu(FALSE);
//if(PWR_ON_SETUP == sf_cardv_convert_power_on_mode()) //if(PWR_ON_SETUP == sf_cardv_convert_power_on_mode())
@ -2102,6 +2168,7 @@ void* sf_sys_do_upgrade(void *arg)
vos_util_delay_ms(1000); vos_util_delay_ms(1000);
Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, 0); Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, 0);
} }
#endif
} }
//sf_set_fw_update(0); //sf_set_fw_update(0);
@ -2443,7 +2510,8 @@ void sf_save_camera_info(void)
}*/ }*/
sf_get_wifi_ssid(wifissid); sf_get_wifi_ssid(wifissid);
SF_SPRINTF(temp, "IMEI:%s\r\nSoftwareVER:%s\r\nModuleVER:%s\r\nMcuVER:%s\r\nICCID:%s\r\nSSID:%s\r\n", puiPara->ModuleImei, localver, puiPara->ModuleSubver, mcuver, puiPara->SimIccid, wifissid); SF_SPRINTF(temp, "IMEI:%s\r\nSoftwareVER:%s\r\nModuleVER:%s\r\nMcuVER:%s\r\nICCID:%s\r\nICCID-A:%s\r\nICCID-V:%s\r\nSSID:%s\r\nBLE:%s\r\n",
puiPara->ModuleImei, localver, puiPara->ModuleSubver, mcuver, puiPara->SimIccid, puiPara->SimIccid, puiPara->SimIccid, wifissid,puiPara->BluSsid);
if(access((char*)SF_CAMERA_INFO_FILENAME, F_OK) == 0) if(access((char*)SF_CAMERA_INFO_FILENAME, F_OK) == 0)
{ {

View File

@ -27,7 +27,7 @@
- @b FALSE: special key is NOT pressed - @b FALSE: special key is NOT pressed
*/ */
//@{ //@{
typedef BOOL (*LDR_SPECIAL_KEY_CB)(void); typedef BOOL (*LDR_SPECIAL_KEY_CB)(UINT32 ota_flag);
//@} //@}
/** /**

View File

@ -141,6 +141,7 @@ static UINT32 g_rtos_size = 0;
#define PATH_PARTITION_NUTTX "partition_nuttx" #define PATH_PARTITION_NUTTX "partition_nuttx"
#define PATH_PARTITION_TEEOS "partition_teeos" #define PATH_PARTITION_TEEOS "partition_teeos"
#define PATH_PARTITION_RTOS "partition_rtos" #define PATH_PARTITION_RTOS "partition_rtos"
#define PATH_PARTITION_SYS "partition_sys"
#define PROPERTY_REG "reg" #define PROPERTY_REG "reg"
#define PROPERTY_LABEL "label" #define PROPERTY_LABEL "label"
#define PROPERTY_PARTITION_NAME "partition_name" #define PROPERTY_PARTITION_NAME "partition_name"
@ -149,6 +150,7 @@ static DRAM_PARTITION g_dram_partition = {0};
static EMB_PARTITION g_emb_uboot = {0}; static EMB_PARTITION g_emb_uboot = {0};
static EMB_PARTITION g_emb_teeos = {0}; static EMB_PARTITION g_emb_teeos = {0};
static EMB_PARTITION g_emb_rtos = {0}; static EMB_PARTITION g_emb_rtos = {0};
static EMB_PARTITION g_emb_sys = {0};
#else // NO FDT_SUPPORT #else // NO FDT_SUPPORT
// refer to met-tbl.dtsi /nvt_memory_cfg // refer to met-tbl.dtsi /nvt_memory_cfg
static DRAM_PARTITION g_dram_partition = { static DRAM_PARTITION g_dram_partition = {
@ -691,12 +693,15 @@ _THUMB2 int bl_flash_open(void)
//========================================================================== //==========================================================================
//int_strg_obj->flash_installIdentifyCB(nor_identify); //int_strg_obj->flash_installIdentifyCB(nor_identify);
debug_msg("flash_open\r\n");
er = int_strg_obj->flash_open(); er = int_strg_obj->flash_open();
if (er < 0) { if (er < 0) {
debug_err("flash open fail\r\n"); debug_err("flash open fail\r\n");
return -1; return -1;
} }
debug_msg("flash_open end\r\n");
//OUTREG32(NAND_TABLE_VERSION_ADDR, INREG32(uiStorageVersion)); //OUTREG32(NAND_TABLE_VERSION_ADDR, INREG32(uiStorageVersion));
//if (er == E_OK) { //if (er == E_OK) {
@ -714,7 +719,6 @@ _THUMB2 int bl_flash_open(void)
} else { } else {
g_uiStartBlkUpdateFW = StartNandBlkUpdateFW; g_uiStartBlkUpdateFW = StartNandBlkUpdateFW;
} }
g_is_flash_open = TRUE; g_is_flash_open = TRUE;
return 0; return 0;
} }
@ -1786,6 +1790,318 @@ _THUMB2 static int bl_load_uboot_from_flash(unsigned char *p_fdt, unsigned char
return 0; return 0;
} }
/***********************************************************************************/
//#define VER_STR_MAX 32
//#define CHAR char
//#define FL_IndexInfoMAX 216
//#define NVT_MAX_BSS_DESC (64)
//#define NVT_WIFIIPC_MAC_ADDR_LEN (6)
//#define NVT_MESH_ID_LEN 32
//
//#define NVT_WSC_MAX_SSID_LEN (64)
//#define NVT_MAX_WEP_KEY_LEN (26)
//#define NVT_MAX_NETWORK_KEY_LEN (64)
//#define NVT_PIN_LEN (8)
//#define NVT_MAX_DEVICE_NAME_LEN (32)
//
//#define SF_TIMER_MAX_NUMBER 2
//typedef struct sf_PARA_TIME_S
//{
// UINT16 Year;
// UINT16 Mon;
// UINT16 Day;
//
// UINT16 Hour;
// UINT16 Min;
// UINT16 Sec;
//} SF_PARA_TIME_S;
//
//typedef struct sf_WORKTIME_S
//{
// SF_PARA_TIME_S StartTime;
// SF_PARA_TIME_S StopTime;
//} SF_WORKTIME_S;
//
//
// typedef struct _UIMenuUIMenuStoreInfo {
// UINT32 OtaFlag;
// //Common
// CHAR strMakerString[VER_STR_MAX];
// CHAR strModelString[VER_STR_MAX];
// CHAR strSoftwareVer[VER_STR_MAX];
// CHAR strMakeNote[VER_STR_MAX];
// CHAR strImageDescription[VER_STR_MAX];
// UINT32 uhInfoSize;
// UINT32 UIParameter[FL_IndexInfoMAX];
// UINT32 ulmodeIndex ; //Record Last Mode Index
// UINT32 cbYear;
// UINT32 cbMonth;
// UINT32 cbDay;
// UINT32 cbFileID;
// UINT32 ubLanguageIndex;
// //photo menu
// UINT32 ubAFWindowIndex;
// UINT32 ubAFBeamIndex;
// UINT32 ubContAF;
// UINT32 ubAEmode;
// UINT32 ubQviewIndex;
// UINT32 ubDzoom;
// UINT32 ubBlinkDet;
// UINT32 ubSlowShutter;
// UINT32 ubContshotIndex;
// UINT32 ubTimelapseIndex;
// UINT32 ubDatePrint;
// UINT32 ubPanModeIndex;
// UINT32 ubFlashIndex;
// UINT32 ubEVIndex;
// UINT32 ubSizeIndex;
// UINT32 ubQualityIndex;
// UINT32 ubWBIndex;
// UINT32 ubColorIndex;
// UINT32 ubISOIndex;
// UINT32 ubFDIndex ;
// UINT32 ubSharpnessIndex;
// UINT32 ubPhotoDispMode;
//
// //wifi
// CHAR strSSID[NVT_WSC_MAX_SSID_LEN];
// CHAR strPASSPHRASE[NVT_MAX_WEP_KEY_LEN];
//
// CHAR strSSID_hotspot_1[NVT_WSC_MAX_SSID_LEN];
// CHAR strPASSPHRASE_hotspot_1[NVT_MAX_WEP_KEY_LEN];
//
//
// //============Sifar==============///Payton
// SF_PARA_TIME_S TimelapseTime;
// SF_WORKTIME_S WorkTime[SF_TIMER_MAX_NUMBER];
// SF_PARA_TIME_S PirDelayTime;
// SF_PARA_TIME_S DailyReportTime;
// SF_PARA_TIME_S DailyReportTime2;
//
// SF_PARA_TIME_S TimeSend1;
// SF_PARA_TIME_S TimeSend2;
// SF_PARA_TIME_S TimeSend3;
// SF_PARA_TIME_S TimeSend4;
//
// //#2023/02/10#Payton - begin
// CHAR CamNameSwitch;/*ON/OFF ,cam name off*/
// CHAR CamMode;/* 0 Photo / 1 Video / 2 PIC+Video*/
// CHAR FlashLed;/* 0 High / 1 Low */
// CHAR ImgSize;/* 24M/12M/8M/5M */
// CHAR NightMode;/* Max.Range/Balanced/Min.Blur */
// CHAR Multishot;/*1P/2P/3P/4P/5P*/
// CHAR MultiShotIntevel;/*0s/1s/2s*/
// CHAR SendMulti;/*OFF/ON*/
// CHAR VideoSize;/*FHD-1080P/HD-720P/WVGA*/
// CHAR VideoTimeMenu;/*5/10/15/20/30/40/50/59*/
// CHAR VideoLenth;
// CHAR PirSwitch;/*OFF/ON*/
// CHAR PirSensitivity;/*High/Middle/Low*/
// CHAR PirDelaySwitch;/*OFF/ON*/
// CHAR TimelapseSwitch;/*OFF/ON*/
// CHAR WorkTime1Switch;/*OFF/ON*/
// CHAR WorkTime2Switch;/*OFF/ON*/
// CHAR SimAutoSwitch;/*Auto/Manual*/
// CHAR SendMaxNum;/*Unlimited/1~99*/
// CHAR GprsMode;/*Daily/Instant*/
// CHAR DailyReportSwitch;/*OFF/ON*/
// CHAR ReDailyReport;
// CHAR DailyReportTestSwitch;
// CHAR SimPinFlag;/*ON*/
// CHAR GpsSwitch;/*0:OFF;1:ON*/
// CHAR Language;
// CHAR DateStyle;/*YY/MM/DD-(CN) / MM/DD/YY-(US) / DD/MM/YY-(EU)*/
// CHAR StampSwitch;/*0:OFF;1:ON*///FL_DATE_STAMP
// CHAR BatteryType;/*Alkaline/NI-MH/LI*/
// CHAR SdLoopSwitch;/*0:OFF;1:ON*/
// CHAR PwdSwitch;/*0:OFF;1:ON*/
// CHAR SendPhotoSwitch;/*0:OFF;1:ON*/
// CHAR SendVideoSwitch;/*0:OFF;1:ON*/
// CHAR SendPicSize;/*Small/Bigger/Original*/
// CHAR SendMultishotIndex1;/*OFF/ON*/
// CHAR SendMultishotIndex2;/*OFF/ON*/
// CHAR SendMultishotIndex3;/*OFF/ON*/
// CHAR SendMultishotIndex4;/*OFF/ON*/
// CHAR SendMultishotIndex5;/*OFF/ON*/
// CHAR DateAuto;/*Auto/Manual*/
// CHAR NTPZoneS;
// CHAR NTPZoneH;
// CHAR NTPZoneM;
// CHAR DigitPirSensitivity;/*9\7\5*/
// CHAR DigitPirCnt;
// CHAR DigitPirWindowTime;
// CHAR CamArmDiable;
// CHAR DebugMode;/*0:OFF;1:ON*/
// CHAR AutoOffSwitch;/*0:OFF;1:ON*/
// CHAR AutoLogSwitch;/*0:OFF;1:ON*/
// CHAR RawSwitch;/*0:OFF;1:ON*/
// //ProfLogSwitch;/*0:OFF;1:ON*/
// CHAR GprsSwitch;/*0:OFF;1:ON*/
// CHAR GpsSendFlag;/*dp need send flag;*/
// CHAR FristSendDailyAndGps;
// CHAR NetGeneration;/*0:NO 1:xx 2:2G 3:3G 4:4G*/
// CHAR NeedTimeSyncStartUp;
// CHAR NetWorkNeedSearch;
// //SmsNumber;
// CHAR QLogSwitch;/*0:OFF;1:ON*/
// CHAR GpsAntiTheftSwitch;
// CHAR BatteryLogSwitch;
//
// ////////////S530////////
// CHAR GpsNumber;
// CHAR TimeSend1Switch;/*OFF/ON*/
// CHAR TimeSend2Switch;/*OFF/ON*/
// CHAR TimeSend3Switch;/*OFF/ON*/
// CHAR TimeSend4Switch;/*OFF/ON*/
// CHAR SendType;
// CHAR PicUpDailyReport;
// ///////////////////////
//
// CHAR CamNameStr[13];
// CHAR PwdStr[7];
// CHAR Latitude[16];
// CHAR Longitude[16];
// CHAR Sim4gApn[40];
// CHAR Sim4gUsr[40];
// CHAR Sim4gPwd[20];/* */
// CHAR SimPinStr[8];/* */
// CHAR MmsMmsc[50];
// CHAR MmsApn[40];
// CHAR MmsProxy[40];
// CHAR MmsPort[6];
// CHAR MmsUsr[40];
// CHAR MmsPwd[20];
// CHAR ModuleImei[20];
// CHAR ModuleVer[50];
// CHAR ModuleSubver[50];
// CHAR AcmIp[60];
// CHAR AcmPort[5];
// CHAR WebIp[70];
// CHAR OperatorCode[8];
// CHAR SimIccid[21];
// CHAR ServiceProvider[64];
// UINT8 SimSignal;
// UINT8 SimType;
// UINT8 FtpSwitch;/*FTP/OFF/FTPS*/
// UINT8 FtpIp[40];
// UINT8 FtpPort[5];
// UINT8 FtpUsr[40];
// UINT8 FtpPwd[20];
//
// UINT8 FtpsIp[40];
// UINT8 FtpsPort[5];
// UINT8 FtpsUsr[40];
// UINT8 FtpsPwd[20];
//
// UINT8 OtaFtpIp[40];
// UINT8 OtaFtpPort[5];
// UINT8 OtaFtpUserName[40];
// UINT8 OtaFtpPassWord[40];
//
// UINT8 WifiSwitch;
// UINT8 WifiMode;
// UINT8 WifiApPWD[16];
// UINT8 Zoom;
// UINT32 FileKey;
//
// UINT32 x1;
// UINT32 x2;
// UINT32 x3;
// UINT32 x4;
// UINT32 x5;
// UINT32 x6;
// //============Sifar==============///Payton
//
// } UIMenuStoreInfo;
_THUMB2 static void *bl_get_sys_partition(unsigned char *p_fdt /*IN*/, int *p_id /*OUT*/)
{
#if (FDT_SUPPORT)
if (bl_get_partition(p_fdt, PATH_PARTITION_SYS, &g_emb_sys, p_id) != 0) {
return NULL;
}
#else
*p_id = NVTPACK_IDX_RTOS;
#endif
g_emb_sys.EmbType = 0x12;
return &g_emb_sys;
}
_THUMB2 static int bl_load_sys_from_flash(unsigned char *p_fdt, unsigned char *p_tmp)
{
int er;
int sys_partition_id;
DRAM_PARTITION *p_dram_partition = NULL;
unsigned int blk_size = int_strg_obj->flash_getBlockSize();
EMB_PARTITION *p_emb_partition_sys = bl_get_sys_partition(p_fdt, &sys_partition_id);
if (p_emb_partition_sys == NULL) {
debug_err("null p_emb_partition_sys\r\n");
return -1;
}
p_dram_partition = (DRAM_PARTITION *)bl_get_fdt_cfg(p_fdt, MODELEXT_TYPE_DRAM_PARTITION);
if (p_dram_partition == NULL) {
debug_err("null p_dram_partition\r\n");
return -1;
}
if ((er = int_strg_obj->flash_readSectors(p_emb_partition_sys->PartitionOffset / blk_size, p_emb_partition_sys->PartitionSize, p_tmp, NAND_RW_FIRMWARE)) < 0) {
debug_err_var("bl_load_sys_from_flash,er=", er);
bl_displayErrMsg(RWErrorMsg); // read sys failed
return -1;
}
// UIMenuStoreInfo* info = (UIMenuStoreInfo*)p_tmp;
// debug_err_var("FL_PHOTO_SIZE=", info->UIParameter[1]);
// debug_err_var("OtaFlag=", info->OtaFlag);
return 0;
}
/* assume ota_flag is read from partition_sys and in the first word */
_THUMB2 static UINT32 bl_check_ota_flag(void)
{
int er;
unsigned char *p_fdt = NULL;
DRAM_PARTITION *p_dram_partition = NULL;
unsigned char *p_tmp = (unsigned char *)SDRAM_Start_FW;
// open flash
if (bl_flash_open() != 0) {
debug_msg("flash open failed\r\n");
return 0;
}
#if (FDT_SUPPORT)
// load fdt
er = bl_load_fdt_from_flash(p_tmp, SDRAM_Start_FW, &p_fdt); // dtb size less than 32MB to be safer.
if (er != 0) {
bl_displayErrMsg("load fdt failed\r\n");
return 0;
}
#endif
p_dram_partition = (DRAM_PARTITION *)bl_get_fdt_cfg(p_fdt, MODELEXT_TYPE_DRAM_PARTITION);
if (p_dram_partition == NULL) {
debug_err("null p_dram_partition\r\n");
return 0;
}
if(bl_load_sys_from_flash((unsigned char *)p_dram_partition->fdt_addr, p_tmp)){
debug_err("bl_load_sys_from_flash failed\r\n");
return 0;
}
UINT32* ota_flag = (UINT32*)p_tmp;
debug_msg_var("ota_flag=", *ota_flag);
return (*ota_flag);
}
/***********************************************************************************/
_THUMB2 static int bl_load_rtos_from_flash(unsigned char *p_fdt, unsigned char *p_tmp) _THUMB2 static int bl_load_rtos_from_flash(unsigned char *p_fdt, unsigned char *p_tmp)
{ {
int er; int er;
@ -2890,6 +3206,8 @@ _THUMB2 UINT32 bl_mainFlow(void)
#endif #endif
} }
UINT32 ota_flag = bl_check_ota_flag();
#if !(USB_WRITELOADER || UART_UPDATE) #if !(USB_WRITELOADER || UART_UPDATE)
if (bl_load_rtos_from_uart(uiUpdateMainBinBufAddr, FAT_READ_TOTAL_FILE_LENGTH, &adjusted_addr, &adjusted_size) == 0) { if (bl_load_rtos_from_uart(uiUpdateMainBinBufAddr, FAT_READ_TOTAL_FILE_LENGTH, &adjusted_addr, &adjusted_size) == 0) {
//specail case, load small rtos from uart //specail case, load small rtos from uart
@ -2929,7 +3247,7 @@ _THUMB2 UINT32 bl_mainFlow(void)
#endif #endif
} }
#if 1 #if 1
else if ((gSpecialKeyCallBack()) && (gCardDetectCallBack())) { else if ((gSpecialKeyCallBack(ota_flag)) && (gCardDetectCallBack())) {
if (card_open() == TRUE && fat_initFAT(uiheapBufferAddr, FAT_HEAP_BUFFER_SIZE) == TRUE) { if (card_open() == TRUE && fat_initFAT(uiheapBufferAddr, FAT_HEAP_BUFFER_SIZE) == TRUE) {
#if UPDATE_SIM_CODE #if UPDATE_SIM_CODE
BOOL bWDTInit = UTL_canUpdateSecKey(); BOOL bWDTInit = UTL_canUpdateSecKey();
@ -3115,7 +3433,7 @@ _THUMB2 UINT32 bl_mainFlow(void)
} }
} }
#endif #endif
else if (((gSpecialKeyCallBack == NULL) || gSpecialKeyCallBack()) && else if (((gSpecialKeyCallBack == NULL) || gSpecialKeyCallBack(ota_flag)) &&
((gCardDetectCallBack != NULL) || (gCardDetectCallBack() == FALSE))) { ((gCardDetectCallBack != NULL) || (gCardDetectCallBack() == FALSE))) {
debug_msg("No card inserted\r\n"); debug_msg("No card inserted\r\n");
} }

View File

@ -83,7 +83,39 @@ void debug_disable_msg(void) {}
- @b TRUE: Special key(s) is(are) pressed - @b TRUE: Special key(s) is(are) pressed
- @b FALSE: Otherwise - @b FALSE: Otherwise
*/ */
static BOOL prj_isSpecialKeyPressed(void)
static BOOL prj_is_WDT_OTA(void)
{
static UINT32 ota_sts = WDT_OTA_MAKEFOURCC(WDT_OTA_STS_INVALID);
/* only update once */
if(ota_sts == WDT_OTA_MAKEFOURCC(WDT_OTA_STS_INVALID))
ota_sts = WDT_OTA_READ_STS();
debug_msg_var("ota_sts = ", ota_sts);
if(ota_sts == WDT_OTA_MAKEFOURCC(WDT_OTA_STS_LINUX_TRIGGER)){
WDT_OTA_SET_STS(WDT_OTA_STS_LOADER_DETECTING_FW);
return TRUE;
}
else{
return FALSE;
}
}
/* Read ota flag in the flash */
static BOOL prj_is_Flash_OTA(UINT32 ota_flag)
{
if(ota_flag == WDT_OTA_MAKEFOURCC(WDT_OTA_STS_LINUX_TRIGGER)){
WDT_OTA_SET_STS(WDT_OTA_STS_LOADER_DETECTING_FW);
return TRUE;
}
else{
return FALSE;
}
}
static BOOL prj_isSpecialKeyPressed(UINT32 ota_flag)
{ {
// Detect key example, must press shutter2 and playback mode keys // Detect key example, must press shutter2 and playback mode keys
// OUT_0: DGPIO 0 // OUT_0: DGPIO 0
@ -123,7 +155,7 @@ static BOOL prj_isSpecialKeyPressed(void)
{ {
return TRUE; return TRUE;
} }
else if(!(gpio_getPin(GPIO_SPECIAL_KEY2))) else if(!(gpio_getPin(GPIO_SPECIAL_KEY2)) || prj_is_WDT_OTA() || prj_is_Flash_OTA(ota_flag))
{ {
return TRUE; return TRUE;
}else { }else {

View File

@ -70,7 +70,26 @@
#define STORAGE_EXT_TYPE (STORAGE_EXT_SDIO1) #define STORAGE_EXT_TYPE (STORAGE_EXT_SDIO1)
#endif #endif
/*************************************************************
* OTA
************************************************************/
#include "nvtpack.h"
#define WDT_OTA_MAKEFOURCC(sts) MAKEFOURCC('O','T','A', sts)
#define WDT_DATA (WDT_REG_BASE_ADDR + 0x84)
#define WDT_OTA_READ_STS() INREG32(WDT_DATA)
#define WDT_OTA_SET_STS(sts) OUTREG32(WDT_DATA, WDT_OTA_MAKEFOURCC(sts))
typedef enum {
WDT_OTA_STS_INVALID = 0,
WDT_OTA_STS_LOADER_DETECTING_FW,
WDT_OTA_STS_UBOOT_UPDATE_FAILED,
WDT_OTA_STS_UBOOT_UPDATE_OPEN_FAILED,
WDT_OTA_STS_UBOOT_UPDATE_READ_FAILED,
WDT_OTA_STS_UBOOT_UPDATE_NO_NEED,
WDT_OTA_STS_UBOOT_UPDATE_UNKNOWN,
WDT_OTA_STS_UBOOT_UPDATE_OK,
WDT_OTA_STS_LINUX_TRIGGER,
} WDT_OTA_STS;
// Card detect GPIO offset // Card detect GPIO offset
#if (CARD_DETECT_PIN == _CARD_DETECT_TYPE_1_) #if (CARD_DETECT_PIN == _CARD_DETECT_TYPE_1_)