|  |  |  | @ -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; | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
	
		
			
				
					|  |  |  | 
 |