diff --git a/BSP/root-fs/rootfs/etc_Model/etc_565_HUNTING_EVB_LINUX_4G_S530/profile b/BSP/root-fs/rootfs/etc_Model/etc_565_HUNTING_EVB_LINUX_4G_S530/profile index 8ff046192..50abe81b9 100755 --- a/BSP/root-fs/rootfs/etc_Model/etc_565_HUNTING_EVB_LINUX_4G_S530/profile +++ b/BSP/root-fs/rootfs/etc_Model/etc_565_HUNTING_EVB_LINUX_4G_S530/profile @@ -74,3 +74,4 @@ alias state='cardv sys state' alias reset='cardv sys reset' alias mcupara='cardv sys mcupara' alias setusbmuxs='cardv sys setusbmuxs' +alias 4gusbboot='cardv sys 4gusbboot' diff --git a/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/DxInput_Key.c b/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/DxInput_Key.c index 95b5fcd8f..9ff8fc511 100644 --- a/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/DxInput_Key.c +++ b/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/DxInput_Key.c @@ -237,7 +237,8 @@ UINT32 DrvKey_DetNormalKey(void) BKG_PostEvent(NVTEVT_BKW_FORMAT_CARD); }else if((!cmdflag) && (0 == sf_get_fw_update()) && (time >= 10000)){ cmdflag = 1; - }else if(++SendKeyCnt < SendKey_LessCnt){//shot key + sf_set_module_update(1); + }else if((++SendKeyCnt < SendKey_LessCnt) && (!cmdflag)){//shot key uiKeyCode |= FLGKEY_SHUTTER2; }else { printf("[%s:%d] SendKeyCnt:%d KeyTestPressCnt:%d time: %dms\n", __FUNCTION__, __LINE__, SendKeyCnt, KeyTestPressCnt, time); diff --git a/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/IOCfg.h b/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/IOCfg.h index c954dc369..ebefa3505 100755 --- a/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/IOCfg.h +++ b/code/application/source/cardv/SrcCode/Dx/565_HUNTING_EVB_LINUX_4G_S530/IOCfg.h @@ -369,6 +369,8 @@ extern BOOL GPIOMap_DetPoweroff(void); #define GPIO_USB_MUX_S P_GPIO_2 //USB_MUX_S #define PAD_USB_MUX_S PAD_PIN_PGPIO2 +#define GPIO_4G_USB_BOOT S_GPIO_5 //4G_USB_BOOT +#define PAD_4G_USB_BOOT PAD_PIN_SGPIO5 //----------charge ic ---------------- #define GPIO_CHARGEIC_EN C_GPIO_4 #define GPIO_PIR_STATE C_GPIO_7 diff --git a/code/application/source/cardv/SrcCode/System/SysMain_cmd.c b/code/application/source/cardv/SrcCode/System/SysMain_cmd.c index c68310fd5..6d67d7869 100644 --- a/code/application/source/cardv/SrcCode/System/SysMain_cmd.c +++ b/code/application/source/cardv/SrcCode/System/SysMain_cmd.c @@ -249,6 +249,8 @@ SXCMD_ITEM("state %", sf_cmd_get_cam_state, "state") SXCMD_ITEM("reset", sf_cmd_reset, "reset") SXCMD_ITEM("mcupara", sf_cmd_mcu_power_on_para_get, "get mcu para") SXCMD_ITEM("setusbmuxs", sf_cmd_usb_mux_s, "set usbmuxs") +SXCMD_ITEM("4gusbboot", sf_cmd_cardv_4g_usb_boot, "set 4gusbboot") + #endif diff --git a/code/application/source/sf_app/code/include/sf_param_enum.h b/code/application/source/sf_app/code/include/sf_param_enum.h index 94f9a8d35..0317ed1ef 100644 --- a/code/application/source/sf_app/code/include/sf_param_enum.h +++ b/code/application/source/sf_app/code/include/sf_param_enum.h @@ -466,7 +466,7 @@ typedef enum sf_MCU_MESSAGE_TYPE_E SF_MCU_CMD_MODULE_SLEEP = 0x1D00, SF_MCU_CMD_MCU_VER = 0x1E00, SF_MCU_CMD_MCU_RTC = 0x1F00, - + SF_MCU_CMD_SET_MCU = 0x1F01, }SF_MCU_MESSAGE_TYPE_E; typedef enum sf_PARA_MESSAGE_TYPE_E diff --git a/code/application/source/sf_app/code/include/sf_system.h b/code/application/source/sf_app/code/include/sf_system.h index e2d8b0694..aee8f5ff8 100644 --- a/code/application/source/sf_app/code/include/sf_system.h +++ b/code/application/source/sf_app/code/include/sf_system.h @@ -55,6 +55,8 @@ SINT32 sf_app_para_check_stop(void); SINT32 sf_app_battery_start(void); SINT32 sf_app_battery_stop(void); SINT32 sf_app_data_ready_start(void); +void sf_cmd_4g_usb_boot(void); +void sf_do_4g_upgrade_thread(void); #ifdef __cplusplus #if __cplusplus } diff --git a/code/application/source/sf_app/code/source/app/sf_common.c b/code/application/source/sf_app/code/source/app/sf_common.c index caafc606e..72ebf1b0a 100644 --- a/code/application/source/sf_app/code/source/app/sf_common.c +++ b/code/application/source/sf_app/code/source/app/sf_common.c @@ -746,6 +746,9 @@ static SINT32 sf_app_proccess_cmd_mcu(SF_MESSAGE_BUF_S *pMessageBuf) case SF_MCU_CMD_MCU_RTC: sf_set_mcu_rtc_flag(1); break; + case SF_MCU_CMD_SET_MCU: + sf_mcu_reg_set(pMessageBuf->arg2, pMessageBuf->arg3); + break; default: break; } @@ -767,6 +770,11 @@ static SINT32 sf_app_proccess_cmd_para_update(SF_MESSAGE_BUF_S *pMessageBuf) break; case SF_PARA_CMD_MOUP: ModuleUpdating = pMessageBuf->arg2; + MLOGD("ModuleUpdating = %d\n",ModuleUpdating); + + if(ModuleUpdating){ + sf_do_4g_upgrade_thread(); + } break; case SF_PARA_CMD_IR_LED_STATUS: IsNightLedOn = pMessageBuf->arg2; diff --git a/code/application/source/sf_app/code/source/app/sf_service.c b/code/application/source/sf_app/code/source/app/sf_service.c index e0f4c971c..fa1ad2aa0 100644 --- a/code/application/source/sf_app/code/source/app/sf_service.c +++ b/code/application/source/sf_app/code/source/app/sf_service.c @@ -164,9 +164,9 @@ SINT32 sf_USB_net_init(void) { //{ sprintf(cmdStr, "/usr/bin/quectel-CM -n %d&", E_PDP_INDEX); } } - sprintf(cmdStr, "/usr/bin/quectel-CM &"); + sprintf(cmdStr, "/usr/bin/quectel-CM -n %d&",A_PDP_INDEX); for (UINT8 i = 0; i < 40; i++) { - if (access("/dev/ttyUSB2", F_OK) == SF_SUCCESS) { + if (access("/dev/ttyUSB3", F_OK) == SF_SUCCESS) { ret = SF_SUCCESS; printf("usb net ko exist!\r\n"); break; diff --git a/code/application/source/sf_app/code/source/app/sf_system.c b/code/application/source/sf_app/code/source/app/sf_system.c index 738801e07..b683815f4 100644 --- a/code/application/source/sf_app/code/source/app/sf_system.c +++ b/code/application/source/sf_app/code/source/app/sf_system.c @@ -38,7 +38,7 @@ #include "sf_commMng.h" #include "sf_battery.h" #include "sf_common.h" - +#include "IOCfg.h" #ifdef __cplusplus #if __cplusplus extern "C" { @@ -104,6 +104,13 @@ SF_THREAD_S DateReadyTskCfg = .TskId = -1, }; +static SF_THREAD_S ModeuleUpgradeTskParam = +{ + .IsRun = 0, + .TskId = -1, +}; + + SINT8 debugFlag = 0; void app_poweroff_time_clear(void) @@ -1115,3 +1122,95 @@ SINT32 sf_app_data_ready_start(void) #endif #endif +void sf_cmd_4g_usb_boot(void) +{ + printf("[%s:%d] s\n", __FUNCTION__, __LINE__); + sf_hal_gpio_init(GPIO_4G_USB_BOOT, 1); + sf_hal_gpio_set(GPIO_4G_USB_BOOT, 1); + sf_mcu_reg_set(SF_MCU_RESET_MODULE, 0); + sleep(2); + printf("[%s:%d] e\n", __FUNCTION__, __LINE__); +} + +static UINT32 sf_4g_update(void) +{ + SF_CHAR cmdStr[128] = {0}; + int ret = SF_FAILURE; + printf("[%s:%d] s\n", __FUNCTION__, __LINE__); + + sprintf(cmdStr, "/usr/bin/DownloadCLI -p /dev/ttyACM0 -c /mnt/sd/EG915Q/cfg_ec618_usb.ini -B \"BL AP CP\" -r"); + for (UINT8 i = 0; i < 40; i++) { + if (access("/dev/ttyACM0", F_OK) == SF_SUCCESS) { + ret = SF_SUCCESS; + printf("[%s:%d] ttyACM0 exist!\r\n", __FUNCTION__, __LINE__); + break; + } + else { + usleep(100 * 1000); + } + } + + if (ret == SF_SUCCESS) { + ret = system(cmdStr); + if (sf_poweron_type_get() == SF_MCU_STARTUP_RING) { + sleep(2); + } + else { + sleep(5); + } + return ret; + } + printf("[%s:%d] e\n", __FUNCTION__, __LINE__); + return 1; +} +void* sf_sys_do_4g_upgrade(void *arg) +{ + //int s32Ret = 0; + + SLOGW("Begin to do 4G Upgrade!\n"); + + if(sf_is_enough_power_to_update() == FALSE) + { + sf_sys_status_led_set(SF_LED_SYS_STATE_ERROR); + } + else{ + sf_mcu_reg_set(SF_MCU_SOFT_UPDATE, 1); + sf_set_module_update(1); + //sf_set_send_statu(TRUE); + sf_sys_status_led_set(SF_LED_SYS_STATE_UPDATE); + //BKG_PostEvent(NVTEVT_BKW_FW_UPDATE); + if(0 != sf_4g_update()){ + sf_sys_status_led_set(SF_LED_SYS_STATE_ERROR); + } + else { + //SysResetFlag(); + } + sf_mcu_reg_set(SF_MCU_SOFT_UPDATE, 0); + // sf_set_send_statu(FALSE); + sf_set_module_update(0); + sf_sleep_ms(1000); + //Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, 0); + } + + ModeuleUpgradeTskParam.IsRun = 2; + SLOGW("Begin to do 4G Upgrade e\n"); + + return NULL; +} + +void sf_do_4g_upgrade_thread(void) +{ + printf("ModeuleUpgradeTskParam.IsRun:%d\n", ModeuleUpgradeTskParam.IsRun); + if(ModeuleUpgradeTskParam.IsRun == 2) + { + ModeuleUpgradeTskParam.IsRun = 0; + pthread_join(ModeuleUpgradeTskParam.TskId, NULL); + } + + if(!ModeuleUpgradeTskParam.IsRun) + { + sf_cmd_4g_usb_boot(); + pthread_create(&ModeuleUpgradeTskParam.TskId, NULL, sf_sys_do_4g_upgrade, NULL); + ModeuleUpgradeTskParam.IsRun = 1; + } +} \ No newline at end of file