ADD 1.增加后台升级处理;

main
wangbo 1 year ago
parent 21bdde5b67
commit b22085fbdd

@ -102,7 +102,7 @@ typedef struct
int32_t data_fifo_id; // 数据处理线程发向后台发送线程的 fifo. int32_t data_fifo_id; // 数据处理线程发向后台发送线程的 fifo.
char buf_send[CSG_PKT_LEN]; char buf_send[CSG_PKT_LEN];
//char buf_reply[CSG_PKT_LEN]; //char buf_reply[CSG_PKT_LEN];
char buf_recv[CSG_PKT_LEN]; //char buf_recv[CSG_PKT_LEN];
char buf[CSG_PKT_LEN]; char buf[CSG_PKT_LEN];
struct sockaddr_in server; struct sockaddr_in server;
int32_t server_ip; // server ip. int32_t server_ip; // server ip.
@ -119,6 +119,18 @@ typedef struct
unsigned int resverd[8]; unsigned int resverd[8];
} csg_utc_t; } csg_utc_t;
typedef struct
{
unsigned int len;
unsigned char data[1020];
} csg_upgrade_t;
typedef struct
{
unsigned int status;
unsigned int resverd[8];
} csg_upgrade_response_t;
/* Exported macro ------------------------------------------------------------*/ /* Exported macro ------------------------------------------------------------*/
/* Extern global variables ---------------------------------------------------*/ /* Extern global variables ---------------------------------------------------*/

@ -147,12 +147,13 @@ int32_t _csg_pkt_check(char *pkt, int32_t len)
void _csg_head_init(char *pkt, uint16_t cmd, uint16_t len) void _csg_head_init(char *pkt, uint16_t cmd, uint16_t len)
{ {
LandPkHead *head = (LandPkHead *)pkt; LandPkHead *head = (LandPkHead *)pkt;
memcpy(head, csg.buf_send, sizeof(LandPkHead));
head->Head = START_FLAG; head->Head = START_FLAG;
head->Len = len + LandPackHeadTailLen; head->Len = len + LandPackHeadTailLen;
head->Type = cmd; head->Type = cmd;
head->LifeCnt = 1;
head->ID = sysctrl.dev_hex_id; head->ID = sysctrl.dev_hex_id;
//head->LifeCnt = 1;
head->gNum = 1; head->gNum = 1;
head->gNumIndex = 0; head->gNumIndex = 0;
} }
@ -546,6 +547,75 @@ int _csg_set_cau_cfg(char *databuf, int datalen)
return _csg_send_packet(Res_SetCauCfg, (char *)&result, sizeof(result)); return _csg_send_packet(Res_SetCauCfg, (char *)&result, sizeof(result));
} }
int _csg_upgrade_arm(char *databuf, int datalen, LandPkHead *head)
{
csg_upgrade_response_t ack = {0};
static FILE *upgradefp = NULL;
static int file_len = 0;
char upgrade_file[128] = {0};
if (datalen != sizeof(csg_upgrade_t))
{
DBG(DBG_M_CA_CSG_ERR, "msg reallen:%d,expect len:%d\n", datalen, sizeof(csg_upgrade_t));
ack.status = 1;
return _csg_send_packet(Res_AppUpdate, (char *)&ack, sizeof(ack));
}
csg_upgrade_t *pmsg = (csg_upgrade_t *)databuf;
LOG("len=%d gNum=%d gNumIndex=%d\n", pmsg->len, head->gNum, head->gNumIndex);
if (head->gNumIndex == 0)
{
if (upgradefp)
{
fclose(upgradefp);
upgradefp = NULL;
}
if (upgradefp == NULL)
{
sprintf(upgrade_file, "%s/%s", UPDATE_FILE_PATH, UPDATE_TMP_FILE_NAME);
upgradefp = fopen(upgrade_file, "wb");
if (upgradefp == NULL)
{
printh("open file error[%d]:%s", errno, strerror(errno));
return -1;
}
}
}
int size = pmsg->len;
int wrlen = fwrite(pmsg->data, 1, size, upgradefp);
if (wrlen != size)
{
size = size - wrlen;
wrlen = fwrite(pmsg->data+wrlen, 1, size, upgradefp);
printh("write again:size=%d, wrlen=%d\n", size, wrlen);
file_len += wrlen;
}
file_len += wrlen;
if (head->gNum == head->gNumIndex + 1)
{
fclose(upgradefp);
upgradefp = NULL;
ack.status = 0;
_csg_send_packet(Res_AppUpdate, (char *)&ack, sizeof(ack));
LOG("update success!!!");
char cmd[128] = {0};
snprintf(cmd, 127, "mv %s/%s %s/%s", UPDATE_FILE_PATH, UPDATE_TMP_FILE_NAME,
UPDATE_FILE_PATH, UPDATE_FILE_NAME);
system(cmd);
system("sync");
printh("ls -l | grep update*\n");
system("ls -l | grep update*");
reboot_system(LOG_DEBUG, BOOT_LOCAL_ARM_UPGRADE);
}
ack.status = 0;
_csg_send_packet(Res_AppUpdate, (char *)&ack, sizeof(ack));
return 0;
}
#if 0 #if 0
int _csg_upload_realtime_data() int _csg_upload_realtime_data()
{ {
@ -636,6 +706,9 @@ int _csg_recv_process(char *buf)
case Cmd_SetCauCfg: case Cmd_SetCauCfg:
_csg_set_cau_cfg(pdata, dataLen); _csg_set_cau_cfg(pdata, dataLen);
break; break;
case Cmd_AppUpdate:
_csg_upgrade_arm(pdata, dataLen, head);
break;
default: default:
break; break;
} }

@ -511,7 +511,7 @@ int _dbg_pkt_upgrade_arm(debug_msg_info_t *msg)
UPDATE_FILE_PATH, UPDATE_FILE_NAME); UPDATE_FILE_PATH, UPDATE_FILE_NAME);
system(cmd); system(cmd);
system("sync"); system("sync");
//sleep(1); printh("ls -l | grep update*\n");
system("ls -l | grep update*"); system("ls -l | grep update*");
reboot_system(LOG_DEBUG, BOOT_LOCAL_ARM_UPGRADE); reboot_system(LOG_DEBUG, BOOT_LOCAL_ARM_UPGRADE);
} }

Loading…
Cancel
Save