|
|
|
@ -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)
|
|
|
|
|
{
|
|
|
|
|
LandPkHead *head = (LandPkHead *)pkt;
|
|
|
|
|
memcpy(head, csg.buf_send, sizeof(LandPkHead));
|
|
|
|
|
|
|
|
|
|
head->Head = START_FLAG;
|
|
|
|
|
head->Len = len + LandPackHeadTailLen;
|
|
|
|
|
head->Type = cmd;
|
|
|
|
|
head->LifeCnt = 1;
|
|
|
|
|
head->ID = sysctrl.dev_hex_id;
|
|
|
|
|
//head->LifeCnt = 1;
|
|
|
|
|
head->gNum = 1;
|
|
|
|
|
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));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
int _csg_upload_realtime_data()
|
|
|
|
|
{
|
|
|
|
@ -636,6 +706,9 @@ int _csg_recv_process(char *buf)
|
|
|
|
|
case Cmd_SetCauCfg:
|
|
|
|
|
_csg_set_cau_cfg(pdata, dataLen);
|
|
|
|
|
break;
|
|
|
|
|
case Cmd_AppUpdate:
|
|
|
|
|
_csg_upgrade_arm(pdata, dataLen, head);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|