1.ota模块--暂时不生效

This commit is contained in:
payton 2024-02-23 18:05:32 +08:00
parent 01057bb1e0
commit 9961fd5c69
6 changed files with 1091 additions and 3 deletions

View File

@ -23,6 +23,82 @@ extern "C" {
#define SF_OTA_UPGRADE_FILE_PATH SF_SD_ROOT OTA_UPGRADE_FILE_NAME
#define SF_OTA_PARAM_BACKUP_FATH SF_SD_ROOT OTA_BAK_FILE_NAME
#define MODULE_VER "EG"
#define MODULE_VER_FLG1 "FAR"
#define MODULE_VER_FLG2 "GAR"
#define EG91E_MODULE_VER "EG91E"
#define EG91V_MODULE_VER "EG91V"
#define EG91A_MODULE_VER "EG91NA"
#define EC25E_MODULE_VER "EC25E"
#define EC25V_MODULE_VER "EC25V"
#define EC25A_MODULE_VER "EC25A"
#define OTA_FTP_CFGFILENAME_EG91E "DFOTA_EG91E.CFG"
#define OTA_FTP_UPDATAFILENAME_EG91E "module_EG91E.zip"
#define OTA_FTP_CFGFILENAME_EG91V "DFOTA_EG91V.CFG"
#define OTA_FTP_UPDATAFILENAME_EG91V "module_EG91V.zip"
#define OTA_FTP_CFGFILENAME_EG91A "DFOTA_EG91NA.CFG"
#define OTA_FTP_UPDATAFILENAME_EG91A "module_EG91NA.zip"
#define OTA_FTP_CFGFILENAME_EC25E "DFOTA_E.CFG"
#define OTA_FTP_UPDATAFILENAME_EC25E "module_E.zip"
#define OTA_FTP_CFGFILENAME_EC25V "DFOTA_V.CFG"
#define OTA_FTP_UPDATAFILENAME_EC25V "module_V.zip"
#define OTA_FTP_CFGFILENAME_EC25A "DFOTA_A.CFG"
#define OTA_FTP_UPDATAFILENAME_EC25A "module_A.zip"
#define DFOTA_OTA_DIR "DFOTA_S550"
#if 0
typedef enum _OTA_FTP
{
OTA_FTP_FRIST =(unsigned char)0x01,
OTA_FTP_CURVER,
OTA_FTP_QICSGP,
OTA_FTP_QICSGP1,
OTA_FTP_QIACT,
OTA_FTP_QFTPCFG1,
OTA_FTP_QFTPCFG2,
OTA_FTP_QFTPCFG3,
OTA_FTP_QFTPCFG4,
OTA_FTP_QFTPCFG5,
OTA_FTP_QFTPOPEN,
OTA_FTP_QFTPNLST,
OTA_FTP_QFTPGETCFG,
OTA_FTP_QFTPCLOSE,
OTA_FTP_OPENCFG,
OTA_FTP_SEEKCFG,
OTA_FTP_READCFG,
OTA_FTP_CLOSECFG,
OTA_FTP_QIDEACT,
OTA_FTP_QFOTADL,
OTA_FTP_DOWNLOAD,
OTA_FTP_UPDATING,
OTA_FTP_UPDATING1,
OTA_FTP_UPDATING2,
OTA_FTP_UPDATAEND,
OTA_FTP_CHECK,
OTA_FTP_QGMR,
OTA_FTP_END,
}OTA_FTP;
typedef enum _OTA_Cue
{
OTA_UPDATING = (unsigned char)0x01,
OTA_NOUPDATE,
OTA_SUCCESS,
OTA_FAIL,
OTA_TIME_OUT = (unsigned char)0x64,/*100*/
OTA_FILE_OPEN_ERROR = (unsigned char)0xc8,/*200*/
OTA_FILE_SIZE_ERROR,
OTA_DOWNLOAD_ERROR,
OTA_UPDATED_ERROR,
OTA_VERTION_ERROR,
OTA_BATTERY_LOW,
}OTA_Cue;
#endif
typedef struct sf_ota_attrs {
int server_type;
char server_url[128];
@ -35,6 +111,44 @@ typedef struct sf_ota_attrs {
//SSL *ssl;
//SSL_CTX *ctx;
} SF_OTA_ATTRS;
typedef enum _OTA_ERR_CODE_E{
OTA_ERROR_QIACT = 1,
OTA_ERROR_VERTION = 2,
OTA_ERROR_VERSION_INVALID= 3,
OTA_ERROR_TIME_OUT = 4,
OTA_ERROR_BAT_LOW = 5,
OTA_ERROR_FTP_OPEN = 6,
OTA_ERROR_FTP_NLST = 7,
OTA_ERROR_FTP_GET = 8,
OTA_ERROR_FTP_QIDEACT = 9,
OTA_ERROR_FTP_QFSEEK = 10,
OTA_ERROR_FTP_CFGFORMAT = 11,
OTA_ERROR_FTP_QFREAD = 12,
OTA_ERROR_FTP_QFOTADL = 13,
OTA_ERROR_FTP_DOWNLOAD = 14,
OTA_ERROR_FTP_UPDATE = 15,
OTA_ERROR_QIDEACT = 16,
OTA_ERROR_BUTT,
}OTA_ERR_CODE_e;
#define SF_OTA_ERROR_QIACT SF_ERR_ID(SF_MOD_OTA, OTA_ERROR_QIACT)
#define SF_OTA_ERROR_VERTION SF_ERR_ID(SF_MOD_OTA, OTA_ERROR_VERTION)
#define SF_OTA_ERROR_VERTION_INVAlID SF_ERR_ID(SF_MOD_OTA, OTA_ERROR_VERSION_INVALID)
#define SF_OTA_ERROR_TIME_OUT SF_ERR_ID(SF_MOD_OTA, OTA_ERROR_TIME_OUT)
#define SF_OTA_ERROR_BAT_LOW SF_ERR_ID(SF_MOD_OTA, OTA_ERROR_BAT_LOW)
#define SF_OTA_ERROR_FTP_OPEN SF_ERR_ID(SF_MOD_OTA, OTA_ERROR_FTP_OPEN)
#define SF_OTA_ERROR_FTP_NLST SF_ERR_ID(SF_MOD_OTA, OTA_ERROR_FTP_NLST)
#define SF_OTA_ERROR_FTP_GET SF_ERR_ID(SF_MOD_OTA, OTA_ERROR_FTP_GET)
#define SF_OTA_ERROR_FTP_QIDEACT SF_ERR_ID(SF_MOD_OTA, OTA_ERROR_FTP_QIDEACT)
#define SF_OTA_ERROR_FTP_QFSEEK SF_ERR_ID(SF_MOD_OTA, OTA_ERROR_FTP_QFSEEK)
#define SF_OTA_ERROR_FTP_CFGFORMAT SF_ERR_ID(SF_MOD_OTA, OTA_ERROR_FTP_CFGFORMAT)
#define SF_OTA_ERROR_FTP_QFREAD SF_ERR_ID(SF_MOD_OTA, OTA_ERROR_FTP_QFREAD)
#define SF_OTA_ERROR_FTP_QFOTADL SF_ERR_ID(SF_MOD_OTA, OTA_ERROR_FTP_QFOTADL)
#define SF_OTA_ERROR_FTP_DOWNLOAD SF_ERR_ID(SF_MOD_OTA, OTA_ERROR_FTP_DOWNLOAD)
#define SF_OTA_ERROR_FTP_UPDATE SF_ERR_ID(SF_MOD_OTA, OTA_ERROR_FTP_UPDATE)
#define SF_OTA_ERROR_QIDEACT SF_ERR_ID(SF_MOD_OTA, OTA_ERROR_QIDEACT)
SINT32 upgrade_ota_file_IsExsit(SF_CHAR *fileName);
SINT32 sf_upgrade_ota_init(void);
@ -52,6 +166,7 @@ SINT32 sf_upgrade_ota_filecheck(void);
SINT32 sf_upgrade_ota_param_bak(void);
SINT32 sf_upgrade_ota_param_recover(void);
SINT32 sf_module_ota_ftp(void);
#ifdef __cplusplus
#if __cplusplus

View File

@ -220,6 +220,7 @@ typedef enum SF_MOD_e {
SF_MOD_SMS,
SF_MOD_4G,
SF_MOD_4G_SEND,
SF_MOD_OTA,
SF_MOD_FILE,
SF_MOD_HTTP,
SF_MOD_TTY,
@ -491,6 +492,8 @@ typedef enum sf_PARA_MESSAGE_TYPE_E
SF_PARA_CMD_USB_INIT = 0x1F08,
SF_PARA_CMD_GPS_STATUS = 0X1F09,
SF_PARA_CMD_FTP_CONNECT_STATUS= 0X1F0A,
SF_PARA_CMD_MOUP_OTA = 0X1F0F,
}SF_PARA_MESSAGE_TYPE_E;
typedef enum sf_WIFI_MESSAGE_TYPE_E

View File

@ -68,6 +68,7 @@ SINT32 sf_app_mcu_para_power_no_start(void);
SINT32 sf_app_mcu_updata_start(void);
UINT8 sf_app_get_mcu_init_flag(void);
SINT32 sf_app_lpa_start(void);
void sf_do_4g_upgrade_ota_thread(void);
#ifdef __cplusplus
#if __cplusplus
}

View File

@ -886,6 +886,15 @@ static SINT32 sf_app_proccess_cmd_para_update(SF_MESSAGE_BUF_S *pMessageBuf)
sf_do_4g_upgrade_thread();
}
break;
case SF_PARA_CMD_MOUP_OTA:
ModuleUpdating = pMessageBuf->arg2;
MLOGD("ModuleUpdating = %d\n",ModuleUpdating);
if(ModuleUpdating){
sf_do_4g_upgrade_ota_thread();
}
break;
case SF_PARA_CMD_IR_LED_STATUS:
IsNightLedOn = pMessageBuf->arg2;
break;

View File

@ -1384,6 +1384,79 @@ void sf_do_4g_upgrade_thread(void)
}
}
void* sf_sys_do_4g_upgrade_ota(void *arg)
{
//int s32Ret = 0;
// UINT8 updateFileName[60] = {0};
UIMenuStoreInfo *puiPara = sf_app_ui_para_get();
SLOGW("Begin to do 4G OTA Upgrade!\n");
if(sf_is_enough_power_to_update() == FALSE)
{
sf_sys_status_led_set(SF_LED_SYS_STATE_ERROR);
}
else{
//if(sf_is_4g_module_usb_update_file_exist(updateFileName))
{
if(strncmp(puiPara->ModuleVer, GPRS_MODULE_TYPE_EG915Q, 6) == 0){
sf_cmd_4g_usb_boot();
}
// 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_module_ota_ftp()){
sf_sys_status_led_set(SF_LED_SYS_STATE_ERROR);
}
else {
//SysResetFlag();
sf_sys_status_led_set(SF_LED_SYS_STATE_NORMAL);
}
// 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);
if(PWR_ON_SETUP == sf_poweron_type_get()){
sf_set_power_off_flag(1);
SF_MESSAGE_BUF_S stMessageBuf = {0};
stMessageBuf.cmdId = CMD_POWEROFF;
stMessageBuf.arg1 = APP_POWER_OFF_NORMAL;
sf_com_message_send_to_cardv(&stMessageBuf);
}
}
}
ModeuleUpgradeTskParam.IsRun = 0;
SLOGW("Begin to do 4G OTA Upgrade e\n");
return NULL;
}
void sf_do_4g_upgrade_ota_thread(void)
{
printf("ModeuleUpgradeTskParam.IsRun:%d\n", ModeuleUpgradeTskParam.IsRun);
if(ModeuleUpgradeTskParam.IsRun != 0)
{
// ModeuleUpgradeTskParam.IsRun = 0;
// pthread_join(ModeuleUpgradeTskParam.TskId, NULL);
SLOGW("4G OTA Upgrade thread run\n");
return;
}
if(!ModeuleUpgradeTskParam.IsRun)
{
pthread_create(&ModeuleUpgradeTskParam.TskId, NULL, sf_sys_do_4g_upgrade_ota, NULL);
ModeuleUpgradeTskParam.IsRun = 1;
}
}
/*************************************************
Function: sf_wifi_start_to_cardv
Description: wifi on

View File

@ -9,6 +9,7 @@
#include <sys/vfs.h>
#include<pthread.h>
#include "sf_param_common.h"
#include "sf_type.h"
#include "sf_log.h"
#include "sf_md5.h"
@ -21,8 +22,12 @@
#include "sf_message_queue.h"
#include "sf_http_server.h"
//#include "sf_param_common.h"
#include "sf_battery.h"
#include "sf_ftp.h"
#include "sf_commu_mcu_reg.h"
#include "sf_common.h"
#include "sf_hal_ttyusb.h"
#include "sf_eg91_sim.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
@ -30,6 +35,8 @@ extern "C" {
#endif
static SF_OTA_ATTRS stOtaAttrs = {0};
extern char logStr[128];
extern char gsmPara[GPRS_INFO_LINE_MAX];
SINT32 packet_log_printf(UINT8 *pbuf,UINT16 lenth)
{
UINT16 i= 0;
@ -631,7 +638,7 @@ SINT32 sf_upgrade_ota_env_set(void)
SINT32 sf_upgrade_ota_reset(void)
{
SF_CHAR data_buff[BUFFER_SIZE] = {0};
if(stOtaAttrs.filename == NULL) {
if(stOtaAttrs.filename[0] == '\0') {
MLOGE("souce filename is null\n");
return SF_FAILURE;
}
@ -651,6 +658,886 @@ SINT32 sf_upgrade_ota_deinit(void)
return SF_SUCCESS;
}
/*************************************************
Function: sf_module_ota_ftp
Description: 4g module ftp update
Input: N/A
Output: N/A
Return: N/A
Others: N/A
*************************************************/
SINT32 sf_module_ota_ftp(void)
{
UINT32 location = OTA_FTP_FRIST;
SINT32 sts = OTA_NOUPDATE; /*0:updating 1:no update 2:update fail 3:update success*/
UINT32 errorCode = 0;
UINT32 calltime=0;
UINT32 time = 0;
UINT8 cfgfilehandle[5] = {0};
UINT8 Version[48] = {0};
UINT8 srcVersion[48] = {0};
UINT8 desVersion[48] = {0};
SINT64 cTime = 0;
SINT64 eTime = 0;
double elapsed_time = 0;
UINT8 autoUpdata=0;
UINT8 *pTemp = NULL;
UINT8 *pTemp1 = NULL;
UINT8 modulVerStr[50]= {0};
UINT8 ftpIp[40]= {0};
UINT8 ftpPort[6]= {0};
UINT8 ftpUsername[40]= {0};
UINT8 ftpPassword[20]= {0};
//UINT8 convertUsername[100]= {0};
//UINT8 convertPassword[100]= {0};
UINT8 *cfgfilename = NULL;
UINT8 *updatafilename = NULL;
UINT8 *modeVer = NULL;
UINT8 baudrateCheckTime = 0;
UINT8 baudrateChangeFlg = 0;
UINT8 pdpInedx = 0;
UIMenuStoreInfo *puiPara = sf_app_ui_para_get();
SINT32 ttyRet = 0;
SF_TTY_DATA_TYPE_S ttyData = { .waitMs = 2000, .len = 255, .lenMax = (GPRS_INFO_LINE_MAX-1), .cmp = "OK", .cmperr = "ERROR", .data = gsmPara};
SLOGD(" s\n");
if(sf_is_enough_power_to_update() == FALSE)
{
return OTA_BATTERY_LOW;
}
if(strncmp(puiPara->ModuleVer, GPRS_MODULE_TYPE_EG915Q, 6) == 0)
{
//eg915q
}
else
{
system("killall quectel-CM-EG91");
sleep(2);
system("ifconfig eth0 down");
}
if(SF_STRSTR(puiPara->ModuleVer, EC25V_MODULE_VER))
{
cfgfilename = (UINT8 *)OTA_FTP_CFGFILENAME_EC25V;
updatafilename = (UINT8 *)OTA_FTP_UPDATAFILENAME_EC25V;
modeVer = (UINT8 *)EC25V_MODULE_VER;
}
else if(SF_STRSTR(puiPara->ModuleVer, EC25A_MODULE_VER))
{
cfgfilename = (UINT8 *)OTA_FTP_CFGFILENAME_EC25A;
updatafilename = (UINT8 *)OTA_FTP_UPDATAFILENAME_EC25A;
modeVer = (UINT8 *)EC25A_MODULE_VER;
}
else if(SF_STRSTR(puiPara->ModuleVer, EC25E_MODULE_VER))
{
cfgfilename = (UINT8 *)OTA_FTP_CFGFILENAME_EC25E;
updatafilename = (UINT8 *)OTA_FTP_UPDATAFILENAME_EC25E;
modeVer = (UINT8 *)EC25E_MODULE_VER;
}
else if(SF_STRSTR(puiPara->ModuleVer, EG91V_MODULE_VER))
{
cfgfilename = (UINT8 *)OTA_FTP_CFGFILENAME_EG91V;
updatafilename = (UINT8 *)OTA_FTP_UPDATAFILENAME_EG91V;
modeVer = (UINT8 *)EG91V_MODULE_VER;
}
else if(SF_STRSTR(puiPara->ModuleVer, EG91A_MODULE_VER))
{
cfgfilename = (UINT8 *)OTA_FTP_CFGFILENAME_EG91A;
updatafilename = (UINT8 *)OTA_FTP_UPDATAFILENAME_EG91A;
modeVer = (UINT8 *)EG91A_MODULE_VER;
}
else if(SF_STRSTR(puiPara->ModuleVer, EG91E_MODULE_VER))
{
cfgfilename = (UINT8 *)OTA_FTP_CFGFILENAME_EG91E;
updatafilename = (UINT8 *)OTA_FTP_UPDATAFILENAME_EG91E;
modeVer = (UINT8 *)EG91E_MODULE_VER;
}
else
{
printf("module ver not support update\n");
return sts;
}
printf("cfgfilename=%s\n", cfgfilename);
printf("updatafilename=%s\n", updatafilename);
SF_STRCPY(ftpIp, puiPara->OtaFtpIp);
SF_STRCPY(ftpPort, puiPara->OtaFtpPort);
SF_STRCPY(ftpUsername, puiPara->OtaFtpUserName);
SF_STRCPY(ftpPassword, puiPara->OtaFtpPassWord);
sf_set_module_update(1);
sf_mcu_reg_set(SF_MCU_SOFT_UPDATE, 1);
sts = OTA_UPDATING;
while(sts == OTA_UPDATING)
{
switch(location)
{
case OTA_FTP_FRIST:
SF_SPRINTF(gsmPara, "AT\r");
location = OTA_FTP_CURVER;
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
break;
case OTA_FTP_CURVER:
if(SF_STRSTR(gsmPara,"OK"))
{
SF_SPRINTF(gsmPara, "AT+QGMR\r");
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
location = OTA_FTP_QICSGP;
}
else
{
SF_SPRINTF(gsmPara, "AT\r");
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
}
break;
case OTA_FTP_QICSGP:
if(SF_STRSTR(gsmPara,"OK"))
{
pTemp = SF_STRSTR(gsmPara, MODULE_VER);
if(pTemp != NULL)
{
pTemp1 = SF_STRTOK(pTemp, "\r");
printf("pTemp1=%s\n", pTemp1);
SF_STRCPY(Version, pTemp1);
printf("Version: %s\n", Version);
if(SF_STRSTR(puiPara->Sim4gApn, APN_4G_VERIZON))
{
pdpInedx = V_PDP_INDEX;
SF_SPRINTF(gsmPara,"AT+QICSGP=%d\r", V_PDP_INDEX);
location=OTA_FTP_QICSGP1;
}
else if(SF_STRSTR(puiPara->Sim4gApn, APN_4G_ATT))
{
pdpInedx = A_PDP_INDEX;
SF_SPRINTF(gsmPara, "AT+QICSGP=%d,1,\"%s\",\"%s\",\"%s\",1\r",A_PDP_INDEX, puiPara->Sim4gApn,puiPara->Sim4gUsr,puiPara->Sim4gPwd);
location=OTA_FTP_QIACT;
}
else
{
pdpInedx = E_PDP_INDEX;
SF_SPRINTF(gsmPara, "AT+QICSGP=%d,1,\"%s\",\"%s\",\"%s\",1\r",E_PDP_INDEX, puiPara->Sim4gApn,puiPara->Sim4gUsr,puiPara->Sim4gPwd);
location=OTA_FTP_QIACT;
}
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
}
else
{
printf("Module version unknow error\n");
errorCode = SF_OTA_ERROR_VERTION_INVAlID;
sts = OTA_NOUPDATE;
}
}
else
{
SF_SPRINTF(gsmPara, "AT+QGMR\r");
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
}
break;
case OTA_FTP_QICSGP1:
if(SF_STRSTR(gsmPara, "OK"))
{
if(SF_STRSTR(gsmPara, "+QICSGP: 0") || SF_STRSTR(gsmPara, "+QICSGP: 1,\"\""))
{
SF_SPRINTF(gsmPara, "AT+QICSGP=%d,1,\"%s\",\"%s\",\"%s\",1\r",V_PDP_INDEX, puiPara->Sim4gApn,puiPara->Sim4gUsr,puiPara->Sim4gPwd);
}
else
{
SF_SPRINTF(gsmPara, "AT\r");
}
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
location = OTA_FTP_QIACT;
}
break;
case OTA_FTP_QIACT:
if(SF_STRSTR(gsmPara, "OK"))
{
SF_SPRINTF(gsmPara, "AT+QIACT=%d\r", pdpInedx);
location = OTA_FTP_QFTPCFG1;
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
calltime=0;
}
break;
case OTA_FTP_QFTPCFG1:
if(SF_STRSTR(gsmPara, "OK"))
{
SF_SPRINTF(gsmPara, "AT+QFTPCFG=\"contextid\",%d\r", pdpInedx);
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
location = OTA_FTP_QFTPCFG2;
calltime=0;
}
else if(SF_STRSTR(gsmPara,"ERROR"))
{
calltime++;
if(calltime < 6)
{
SF_SPRINTF(gsmPara, "AT+QIACT=%d\r", pdpInedx);
}
else
{
location = OTA_FTP_QIDEACT;
calltime=0;
errorCode = SF_OTA_ERROR_QIACT;
SLOGE("[ERROR]OTA_FTP QIACT over try 6 times");
SF_STRCPY(gsmPara, "AT\r");
}
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
}
break;
case OTA_FTP_QFTPCFG2:
//if(SF_STRSTR(gsmPara, "OK"))
{
SF_SPRINTF(gsmPara, "AT+QFTPCFG=\"account\",\"%s\",\"%s\"\r", ftpUsername, ftpPassword);
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
location = OTA_FTP_QFTPCFG3;
}
break;
case OTA_FTP_QFTPCFG3:
//if(SF_STRSTR(gsmPara, "OK"))
{
SF_SPRINTF(gsmPara, "AT+QFTPCFG=\"filetype\",1\r");
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
location = OTA_FTP_QFTPCFG4;
}
break;
case OTA_FTP_QFTPCFG4:
//if(SF_STRSTR(gsmPara, "OK"))
{
SF_SPRINTF(gsmPara, "AT+QFTPCFG=\"transmode\",1\r");
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
location=OTA_FTP_QFTPCFG5;
}
break;
case OTA_FTP_QFTPCFG5:
//if(SF_STRSTR(gsmPara, "OK"))
{
SF_SPRINTF(gsmPara, "AT+QFTPCFG=\"restenable\",0\r");
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
location=OTA_FTP_QFTPOPEN;
}
break;
case OTA_FTP_QFTPOPEN:
if(SF_STRSTR(gsmPara, "OK"))
{
SF_SPRINTF(gsmPara, "AT+QFTPOPEN=\"%s\",%s\r", ftpIp, ftpPort);
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
location = OTA_FTP_QFTPNLST;
}
break;
case OTA_FTP_QFTPNLST:
if(SF_STRSTR(gsmPara, "+QFTPOPEN:"))
{
if(SF_STRSTR(gsmPara, "+QFTPOPEN: 0"))
{
SF_SPRINTF(gsmPara, "AT+QFTPGET=\"%s/%s\",\"RAM:%s\"\r", DFOTA_OTA_DIR, cfgfilename, cfgfilename);
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
location = OTA_FTP_QFTPCLOSE;
}
else
{
location = OTA_FTP_QIDEACT;
errorCode = SF_OTA_ERROR_FTP_OPEN;
SLOGE("OTA_FTP Open Failed.");
SF_STRCPY(gsmPara, "AT\r");
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
}
}
else if(SF_STRSTR(gsmPara, "+CME ERROR"))
{
location = OTA_FTP_QIDEACT;
errorCode = SF_OTA_ERROR_FTP_OPEN;
SLOGE("OTA_FTP QFTPOPEN CME ERROR.");
SF_STRCPY(gsmPara, "AT\r");
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
}
break;
case OTA_FTP_QFTPGETCFG:
if(SF_STRSTR(gsmPara, "+QFTPNLST:"))
{
if((SF_STRSTR(gsmPara, cfgfilename)!= NULL) && (SF_STRSTR(gsmPara, updatafilename)!= NULL))
{
SF_SPRINTF(gsmPara, "AT+QFTPGET=\"%s/%s\",\"RAM:%s\"\r", DFOTA_OTA_DIR, cfgfilename, cfgfilename);
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
location = OTA_FTP_QFTPCLOSE;
}
else
{
location = OTA_FTP_QIDEACT;
errorCode = SF_OTA_ERROR_FTP_NLST;
SLOGE("OTA_FTP NO NEED UPDATA FILE.");
SF_SPRINTF(gsmPara, "AT+QFTPCLOSE\r");
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
}
}
else if(SF_STRSTR(gsmPara, "+CME ERROR"))
{
location = OTA_FTP_QIDEACT;
errorCode = SF_OTA_ERROR_FTP_NLST;
SLOGE("OTA_FTP QFTPNLST CME ERROR.");
SF_SPRINTF(gsmPara, "AT+QFTPCLOSE\r");
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
}
break;
case OTA_FTP_QFTPCLOSE:
if(SF_STRSTR(gsmPara, "+QFTPGET:"))
{
if(SF_STRSTR(gsmPara, "+QFTPGET: 0"))
{
SF_SPRINTF(gsmPara, "AT+QFTPCLOSE\r");
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
location = OTA_FTP_QIDEACT;
sf_sleep_ms(200);
}
else
{
location = OTA_FTP_QIDEACT;
errorCode = SF_OTA_ERROR_FTP_GET;
SLOGE("OTA_FTP GET CFG FILE FAIL.");
SF_SPRINTF(gsmPara, "AT+QFTPCLOSE\r");
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
sf_sleep_ms(200);
}
}
else if(SF_STRSTR(gsmPara, "+CME ERROR"))
{
location= OTA_FTP_QIDEACT;
errorCode = SF_OTA_ERROR_FTP_GET;
SLOGE("OTA_FTP QFTPGET CME ERROR.");
SF_SPRINTF(gsmPara, "AT+QFTPCLOSE\r");
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
sf_sleep_ms(200);
}
break;
case OTA_FTP_QIDEACT:
//if(SF_STRSTR(gsmPara, "OK"))
{
calltime = 0;
SF_SPRINTF(gsmPara, "AT+QIDEACT=%d\r", pdpInedx);
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
if(errorCode == 0)
location = OTA_FTP_OPENCFG;
else
location = OTA_FTP_END;
}
break;
case OTA_FTP_OPENCFG:
if(SF_STRSTR(gsmPara, "OK"))
{
SF_SPRINTF(gsmPara, "AT+QFOPEN=\"RAM:%s\",2\r", cfgfilename);
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
location = OTA_FTP_SEEKCFG;
}
else if(SF_STRSTR(gsmPara,"ERROR"))
{
calltime++;
if(calltime < 6)
{
SF_SPRINTF(gsmPara, "AT+QIDEACT=%d\r", pdpInedx);
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
}
else
{
location = OTA_FTP_END;
calltime=0;
errorCode = SF_OTA_ERROR_FTP_QIDEACT;
SLOGE("[ERROR]OTA_FTP QIDEACT over try 6 times");
SF_STRCPY(gsmPara, "AT\r");
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
}
}
break;
case OTA_FTP_SEEKCFG:
if(SF_STRSTR(gsmPara, "+QFOPEN:"))
{
pTemp = SF_STRSTR(gsmPara, "+QFOPEN: ");
SF_STRNCPY(cfgfilehandle, pTemp+9, 4);
printf("cfgfilehandle=%s\n",cfgfilehandle);
SF_SPRINTF(gsmPara, "AT+QFSEEK=%s,10,0\r", cfgfilehandle);
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
location = OTA_FTP_READCFG;
}
else if(SF_STRSTR(gsmPara, "+CME ERROR"))
{
SLOGE("OTA_FTP QFOPEN CME ERROR.");
location= OTA_FTP_END;
errorCode = SF_OTA_ERROR_FTP_OPEN;
}
break;
case OTA_FTP_READCFG:
if(SF_STRSTR(gsmPara, "OK"))
{
SF_SPRINTF(gsmPara, "AT+QFREAD=%s,117\r", cfgfilehandle);
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
location = OTA_FTP_CLOSECFG;
sf_sleep_ms(500);
}
else if(SF_STRSTR(gsmPara, "+CME ERROR"))
{
location= OTA_FTP_END;
errorCode = SF_OTA_ERROR_FTP_QFSEEK;
SLOGE("OTA_FTP QFSEEK CME ERROR.");
SF_SPRINTF(gsmPara, "AT+QFCLOSE=%s\r", cfgfilehandle);
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
}
break;
case OTA_FTP_CLOSECFG:
if(SF_STRSTR(gsmPara, "CONNECT 117") !=NULL)
{
pTemp = SF_STRSTR(gsmPara, "CONNECT 117");
if(pTemp[13] == 1)
autoUpdata = 1;
// printf("pTemp=%s\n",pTemp+30);
pTemp+=32;
// pTemp = SF_STRSTR(pTemp, modeVer);
int mm = 0;
while((pTemp != NULL) && (mm < 60))
{
printf("%s",pTemp++);
if(SF_STRSTR(pTemp, modeVer))
{
printf("tmp:%s",pTemp);
break;
}
mm++;
}
printf("\n");
if((pTemp != NULL))
{
snprintf((char *)srcVersion, sizeof(srcVersion), "%s", (char *)pTemp);
snprintf((char *)desVersion, sizeof(desVersion), "%s", (char *)pTemp+48);
}
// SF_STRCPY(srcVersion, pTemp+35);
// SF_STRCPY(desVersion, pTemp+35+48);
printf("autoUpdata=%d\n",autoUpdata);
printf("srcVersion=%s\n",srcVersion);
printf("dstVersion=%s\n",desVersion);
SF_SPRINTF(gsmPara, "AT+QFCLOSE=%s\r", cfgfilehandle);
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
location = OTA_FTP_QFOTADL;
}
else if(SF_STRSTR(gsmPara, "CONNECT"))
{
printf("DFOTA.CFG READ error\n");
printf("gsmPara=%s\n",gsmPara);
SLOGE("OTA_FTP CFG FILE FORMAT ERROR.");
SF_SPRINTF(gsmPara, "AT+QFCLOSE=%s\r", cfgfilehandle);
location= OTA_FTP_END;
errorCode = SF_OTA_ERROR_FTP_CFGFORMAT;
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
}
else if(SF_STRSTR(gsmPara, "+CME ERROR"))
{
SLOGE("OTA_FTP QFREAD CME ERROR.");
SF_SPRINTF(gsmPara, "AT+QFCLOSE=%s\r", cfgfilehandle);
location= OTA_FTP_END;
errorCode = SF_OTA_ERROR_FTP_QFREAD;
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
}
break;
case OTA_FTP_QFOTADL:
//if((ConfigureModeFlag || module_updata_mms_cmd == 1) || ((StartMode == 8) && (autoUpdata == 1)))
{
if(SF_STRCMP(srcVersion, Version)==0)
{
/*if(ConfigureModeFlag)
{
appOsdLib_OsdLayerShapeClear(APP_OSD_SHAPE_RECT, 0, 104, 320, 32, 0, 0);
appOsdLib_TextIDDraw(320/2, 240/2, SP5K_GFX_ALIGN_CENTER, ID_STR_UPDATING___);
}*/
//app_FTP_Info_Convert(ftpUsername, convertUsername);
//app_FTP_Info_Convert(ftpPassword, convertPassword);
//SF_SPRINTF(gsmPara, "AT+QFOTADL=\"FTP://%s:%s@%s:%s/DFOTA/%s\"\r", convertUsername, convertPassword, ftpIp, ftpPort,updatafilename);
SF_SPRINTF(gsmPara, "AT+QFOTADL=\"FTP://%s:%s@%s:%s/%s/%s\"\r", ftpUsername, ftpPassword, ftpIp, ftpPort, DFOTA_OTA_DIR, updatafilename);
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
location = OTA_FTP_DOWNLOAD;
}
else
{
sts = OTA_NOUPDATE;
errorCode = SF_OTA_ERROR_VERTION;
printf("src version not equal\n");
}
}
/*else
{
printf("NO NEED AUTO UPDATA\n");
sts = OTA_NOUPDATE;
}*/
break;
case OTA_FTP_DOWNLOAD:
if(SF_STRSTR(gsmPara,"OK"))
{
calltime = 0;
time = 0;
sf_mcu_wdg_set(5);
location = OTA_FTP_UPDATING;
sf_time(&cTime);
}
else if(SF_STRSTR(gsmPara,"ERROR"))
{
errorCode = SF_OTA_ERROR_FTP_QFOTADL;
sts = OTA_DOWNLOAD_ERROR;
}
break;
case OTA_FTP_UPDATING:
if(SF_STRSTR(gsmPara,"\"FTPEND\",0"))
{
printf("gsmPara:%s\n", gsmPara);
time = 0;
calltime = 0;
location = OTA_FTP_UPDATING1;
sf_mcu_wdg_set(5);
}
else if(SF_STRSTR(gsmPara,"\"FTPEND\""))
{
printf("gsmPara:%s\n", gsmPara);
time = 0;
printf("DOWMLOAD ERROR\n");
SLOGE("OTA Download error");
SLOGE(gsmPara);
errorCode = SF_OTA_ERROR_FTP_DOWNLOAD;
sts = OTA_DOWNLOAD_ERROR;
}
else
{
time = 0;
sf_time(&eTime);
elapsed_time = difftime(eTime, cTime);
// s
printf("time: %.2f s\n", elapsed_time);
if(elapsed_time > 120)
{
SLOGE("OTA Download timeout");
errorCode = SF_OTA_ERROR_FTP_DOWNLOAD;
sts = OTA_TIME_OUT;
}
}
break;
case OTA_FTP_UPDATING1:
if(SF_STRSTR(gsmPara,"+QIND: \"FOTA\",\"START\"") || SF_STRSTR(gsmPara,"+QIND: \"FOTA\",\"UPDATING\""))
{
location = OTA_FTP_UPDATING2;
}
else
{
if(baudrateCheckTime > 60)
{
baudrateChangeFlg = 1;
SLOGW("baudrateCheckTime:%d\n",baudrateCheckTime);
location = OTA_FTP_UPDATING2;
}
else
{
baudrateCheckTime++;
sf_sleep_ms(800);
}
}
break;
case OTA_FTP_UPDATING2:
if(SF_STRSTR(gsmPara,"\"END\",0"))
{
printf("gsmPara:%s\n", gsmPara);
time = 0;
if(baudrateChangeFlg == 1)
{
SLOGW("baudrateChangeFlg:%d\n",baudrateChangeFlg);
}
location = OTA_FTP_UPDATAEND;
}
else if(SF_STRSTR(gsmPara,"\"END\""))
{
printf("gsmPara:%s\n", gsmPara);
time = 0;
printf("UPDATED ERROR\n");
SLOGE("OTA update error");
SLOGE(gsmPara);
errorCode = SF_OTA_ERROR_FTP_UPDATE;
sts = OTA_UPDATED_ERROR;
if(baudrateChangeFlg == 1)
{
SLOGW("baudrateChangeFlg:%d\n",baudrateChangeFlg);
}
}
else if(SF_STRSTR(gsmPara,"UPDATING"))
{
printf("gsmPara:%s\n", gsmPara);
time = 0;
calltime = 0;
sf_mcu_wdg_set(5);
sf_sleep_ms(800);
}
else
{
time = 0;
calltime++;
printf("calltime:%d\n", calltime);
if(calltime >= 200)
{
SLOGE("OTA update timeout");
errorCode = SF_OTA_ERROR_FTP_UPDATE;
sts = OTA_UPDATED_ERROR;
if(baudrateChangeFlg == 1)
{
SLOGW("baudrateChangeFlg:%d\n",baudrateChangeFlg);
}
}
sf_sleep_ms(800);
}
break;
case OTA_FTP_UPDATAEND:
if(SF_STRSTR(gsmPara,"RDY"))
{
sf_sleep_ms(300);
printf("UPDATE END\n");
SF_SPRINTF(gsmPara, "AT+QGMR\r");
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
location = OTA_FTP_CHECK;
}
else if(SF_STRSTR(gsmPara,"ERROR"))
{
errorCode = SF_OTA_ERROR_FTP_UPDATE;
sts = OTA_UPDATED_ERROR;
}
else
{
sf_sleep_ms(300);
}
break;
case OTA_FTP_CHECK:
if(SF_STRSTR(gsmPara, MODULE_VER))
{
pTemp=SF_STRSTR(gsmPara, MODULE_VER);
if(pTemp != NULL)
{
pTemp1 = SF_STRTOK(pTemp, "\r");
printf("pTemp1=%s\n", pTemp1);
SF_STRCPY(Version, pTemp1);
//printf("Version: %s\n", Version);
}
if(SF_STRCMP(Version, desVersion) == 0)
{
sts = OTA_SUCCESS;
}
else
{
sts = OTA_VERTION_ERROR;
}
}
else
{
SF_SPRINTF(gsmPara, "AT+QGMR\r");
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
}
break;
case OTA_FTP_END:
SF_STRCPY(gsmPara, "AT\r");
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
sts = OTA_FAIL;
break;
}
sf_gsm_para_buff_clear();
sf_hal_ttyusb2_read_buf(&ttyData);
if(gsmPara[0] != '\0')
{
MLOGD("location:%d\n%s\n", location, gsmPara);
}
time++;
if(time >= 300)
{
if((location > OTA_FTP_QIACT) && (location < OTA_FTP_OPENCFG))
{
location = OTA_FTP_QIDEACT;
errorCode = SF_OTA_ERROR_TIME_OUT;
time = 250;
calltime = 0;
SF_SPRINTF(gsmPara, "AT\r");
ttyRet = sf_hal_ttyusb2_write(gsmPara, strlen(gsmPara));
SF_CHECK_RETURN(ttyRet, SF_GPRS_MODULE_ERROR_WRITE);
}
else
{
sts = OTA_TIME_OUT;
}
printf("update timeout!\n");
}
}
sf_set_module_update(0);
sf_mcu_reg_set(SF_MCU_SOFT_UPDATE, 0);
/* cal qgmr ver,then save*/
printf("Version = %s\n",Version);
pTemp = SF_STRSTR(Version, MODULE_VER);
if(pTemp != NULL)
{
UINT8 *pT1 = NULL;
UINT8 *pT2 = NULL;
UINT8 *pT3 = NULL;
pT1 = SF_STRSTR(pTemp, MODULE_VER_FLG1);
if(pT1 == NULL)
pT1 = SF_STRSTR(pTemp, MODULE_VER_FLG2);
pT2 = SF_STRSTR(pTemp,"_");
printf("pT1 = %s\n",pT1);
printf("pTemp = %s\n",pTemp);
printf("pT2 = %s\n",pT2);
if(pT1 != NULL)
{
UINT8 str1[5] = {0};
UINT8 str2[5] = {0};
UINT8 str3[5] = {0};
UINT8 str4[30] = {0};
memcpy(str1, pTemp+4,pT1-pTemp-4);
printf("str1 = %s\n",str1);
memcpy(str2, pT1+3,2);
printf("str2 = %s\n",str2);
memcpy(str3, pT1+6,2);
printf("str3 = %s\n",str3);
if(pT2 != NULL)
{
pT3 = pT2+1;
SF_STRCPY(modulVerStr, pT3);
pT3 = SF_STRTOK(modulVerStr, "\r");
}
if(pT3 != NULL)
{
SF_STRCPY(str4, pT3);
printf("str4 = %s\n",str4);
SF_SPRINTF(puiPara->ModuleSubver,"S%sY%sY%sY%sS",str1,str2,str3,str4);
}
else
{
SF_SPRINTF(puiPara->ModuleSubver,"S%sY%sY%sS",str1,str2,str3);
}
printf("puiPara->ModuleSubver = %s\n",puiPara->ModuleSubver);
}
}
printf("Module OTA Update sts:%d errorCode:%d\n", sts, errorCode);
if(errorCode)
{
SF_SPRINTF(logStr, "%x,", errorCode);
MLOGE(logStr);
}
printf("sf_module_ota_ftp e\n");
return sts;
}
#ifdef __cplusplus
#if __cplusplus
}