#endif
//if(Bleconnect == true )
{
- ret = svr_ble_bt_gatts_noyify(buf,len);
+ ret = svr_ble_bt_gatts_notify(buf,len);
}
return ret;
{
//if(Bleconnect == true )
{
- svr_ble_bt_gatts_noyify(buf,len);
+ svr_ble_bt_gatts_notify(buf,len);
}
}
// 构造绑定指令并发送
value[17] = bond;
value[18] = Calculate_CRC(value,18);
- sendBleData(value,19);
+
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind] 发送首次绑定指令,指令内容:");
+ for(int i=0;i<19;i++)
+ {
+ printf("0x%02X ",value[i]);
+ }
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Bind] 发送首次绑定指令,CRC: 0x%02X", value[18]);
+ sendBleData(value,19);
+
#ifdef SUPPORT_DEVICE_PAIRING_NOTIFICATION
#ifdef SUPPORT_A5133_SERVICE_BLE_PAIR
comfirmPaire(1);
uint32_t pack;
uint16_t pack_size=(ble_nus_max_data_len-18);
if(pack_size>482)pack_size=482;
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "数据分包大小: %d 字节", pack_size);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "数据分包大小: %d 字节", pack_size);
if(data_size%pack_size==0)
{
{
pack=data_size/pack_size+1;
}
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "总数据包数: %u", pack);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "总数据包数: %u", pack);
uint32_t pack_id=1;
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "开始发送GPS数据包...");
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "开始发送GPS数据包...");
while (surplus_len!=0)
{
if(surplus_len>=pack_size)
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "发送数据包 %u/%u, 大小: %d, 偏移: %u",
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "发送数据包 %u/%u, 大小: %d, 偏移: %u",
pack_id, pack, pack_size, offset);
surplus_len=surplus_len-pack_size;
cancel_recv_file(1);
}
}
-uint32_t OTA_FILE_value=0;
-errcode_t decode_ota_data(ble_read_data *buffer_handle,uint8_t *data,uint16_t datalen,uint8_t crcvalue)
+uint32_t OTA_FILE_value=0;
+errcode_t decode_ota_data(ble_read_data *buffer_handle, uint8_t *data, uint16_t datalen, uint8_t crcvalue)
{
- if(datalen<sizeof(msg_header_t))
+ // ====================== 入参安全校验 ======================
+ if (buffer_handle == NULL || data == NULL || datalen == 0)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA DECODE] 入参无效!buffer:%p, data:%p, len:%d",
+ buffer_handle, data, datalen);
+ return ERRCODE_FAIL;
+ }
+
+ if (datalen < sizeof(msg_header_t))
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA DECODE] 数据长度不足!len:%d < header:%zu",
+ datalen, sizeof(msg_header_t));
return ERRCODE_FAIL;
}
- msg_header_t *header = (msg_header_t*)data;
+ // ====================== 解析头部 ======================
+ msg_header_t *header = (msg_header_t *)data;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA DECODE] cmdtype:0x%02X, cmdid:0x%02X, pkg_len:%d, pkg_idx:%d",
+ header->cmdtype, header->cmdid, header->package_len, header->package_index);
- if(header->cmdtype!=0x06)
+ if (header->cmdtype != 0x06)
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA DECODE] cmdtype 错误!非OTA命令");
return ERRCODE_FAIL;
}
- uint8_t* data_=data+sizeof(msg_header_t);
- //datalen-=18;
- datalen=header->package_len;
+ uint8_t *data_body = data + sizeof(msg_header_t);
+ uint16_t body_len = header->package_len;
- if(header->cmdid==0x0B)
- {
- //取消文件传输
- if(Check_CRC(data_,datalen,crcvalue))
+ // ====================== cmdid 0x0B:取消传输 ======================
+ if (header->cmdid == 0x0B)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA DECODE] 收到取消文件传输命令");
+
+ if (Check_CRC(data_body, body_len, crcvalue))
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA DECODE] CRC校验成功,回复成功");
cancel_recv_file(0);
- uint8_t replydata= 1;
- ble_reply_msgarr(6,0x0B,&replydata,1);
+ uint8_t reply = 1;
+ ble_reply_msgarr(6, 0x0B, &reply, 1);
}
else
{
- cancel_recv_file(0);
- uint8_t replydata= 0;
- ble_reply_msgarr(6,0x0B,&replydata,1);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA DECODE] CRC校验失败,回复失败");
+ cancel_recv_file(0);
+ uint8_t reply = 0;
+ ble_reply_msgarr(6, 0x0B, &reply, 1);
}
-
+ return ERRCODE_SUCC;
}
- else if(header->cmdid==0x02)
+
+ // ====================== cmdid 0x02:OTA数据传输 ======================
+ else if (header->cmdid == 0x02)
{
+ uint32_t package_id = header->package_index;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA DATA] 包序号:%d, 数据长度:%d", package_id, body_len);
- uint32_t package_id=header->package_index;
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"package_id: %d \r\n",package_id);
- if(Check_CRC(data_,datalen,crcvalue))
+ // CRC 校验失败
+ if (!Check_CRC(data_body, body_len, crcvalue))
{
-
- if(package_id==0)
- {
- last_package_id=package_id;
- if((buffer_handle->file_recv_stat.recv_file_stat <= 0) && buffer_handle->file_recv_stat.file == NULL )
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA DATA] CRC校验失败!pkg_id:%d", package_id);
+ return ERRCODE_FAIL;
+ }
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[OTA DATA] CRC校验成功");
+
+ // ====================== 第0号包:创建文件 ======================
+ if (package_id == 0)
+ {
+ last_package_id = package_id;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA DATA] 收到第0包,开始创建文件");
+
+ if (buffer_handle->file_recv_stat.recv_file_stat <= 0 && buffer_handle->file_recv_stat.file == NULL)
{
buffer_handle->file_recv_stat.lrcvalue = 0;
+
+ // ========== 根据文件类型创建文件 ==========
if (buffer_handle->file_recv_stat.file_type == 1)
{
-
- buffer_handle->file_recv_stat.file = fopen(UP_DATE_FWPKG_PATH,"w+");
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"create file %s %X\n",UP_DATE_FWPKG_PATH,buffer_handle->file_recv_stat.file);
-
-
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA FILE] 创建固件升级文件");
+ buffer_handle->file_recv_stat.file = fopen(UP_DATE_FWPKG_PATH, "w+");
}
- //音乐文件传输
else if (buffer_handle->file_recv_stat.file_type == 2)
{
- char musicpath[64]={0};
- get_music_path(musicpath,64);
- //"/user/userdata/music"
- char filepath[256]={0};
- create_mp3_name(filepath,musicpath,buffer_handle->file_recv_stat.file_name);
-
- buffer_handle->file_recv_stat.file = fopen(filepath,"w+");
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"filepath %s\r\n",filepath);
+ char musicpath[64] = {0};
+ char filepath[256] = {0};
+ get_music_path(musicpath, sizeof(musicpath));
+ create_mp3_name(filepath, musicpath, buffer_handle->file_recv_stat.file_name);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA FILE] 创建音乐文件: %s", filepath);
+ buffer_handle->file_recv_stat.file = fopen(filepath, "w+");
}
- //app_file
else if (buffer_handle->file_recv_stat.file_type == 4)
{
- char filepath[128]={0};
- if (get_app_file_path(buffer_handle->file_recv_stat.file_name,strlen(buffer_handle->file_recv_stat.file_name),filepath,sizeof(filepath)) == ERRCODE_SUCC)
+ char filepath[128] = {0};
+ if (get_app_file_path(buffer_handle->file_recv_stat.file_name, strlen(buffer_handle->file_recv_stat.file_name), filepath, sizeof(filepath)) == ERRCODE_SUCC)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA FILE] 创建APP文件: %s", filepath);
+ buffer_handle->file_recv_stat.file = fopen(filepath, "w+");
+ }
+ else
{
- buffer_handle->file_recv_stat.file = fopen(filepath,"w+");//?
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"create file %s %X\n",filepath,buffer_handle->file_recv_stat.file);
- }else{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"create file %s error %X\n",buffer_handle->file_recv_stat.file_name,buffer_handle->file_recv_stat.file);
- }
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA FILE] 获取APP文件路径失败");
+ }
}
- //gnss文件传输
else if (buffer_handle->file_recv_stat.file_type == 7)
{
- char filepath[128]={0};
- if (get_epo_file_path(buffer_handle->file_recv_stat.file_name,strlen(buffer_handle->file_recv_stat.file_name),filepath,sizeof(filepath)) == ERRCODE_SUCC)
+ char filepath[128] = {0};
+ if (get_epo_file_path(buffer_handle->file_recv_stat.file_name, strlen(buffer_handle->file_recv_stat.file_name), filepath, sizeof(filepath)) == ERRCODE_SUCC)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA FILE] 创建GNSS EPO文件: %s", filepath);
+ buffer_handle->file_recv_stat.file = fopen(filepath, "w+");
+ }
+ else
{
- buffer_handle->file_recv_stat.file = fopen(filepath,"w+");
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"create file %s %X\n",filepath,buffer_handle->file_recv_stat.file);
- }else{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"create file %s error %X\n",buffer_handle->file_recv_stat.file_name,buffer_handle->file_recv_stat.file);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA FILE] 获取EPO文件路径失败");
}
}
else
{
- char filepath[128]={0};
- if (get_file_recv_file_path(buffer_handle->file_recv_stat.file_name,strlen(buffer_handle->file_recv_stat.file_name),filepath,sizeof(filepath)) == ERRCODE_SUCC)
+ char filepath[128] = {0};
+ if (get_file_recv_file_path(buffer_handle->file_recv_stat.file_name, strlen(buffer_handle->file_recv_stat.file_name), filepath, sizeof(filepath)) == ERRCODE_SUCC)
{
- buffer_handle->file_recv_stat.file = fopen(filepath,"w+");
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"create file %s %X\n",filepath,buffer_handle->file_recv_stat.file);
- }else{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"create file %s error %X\n",buffer_handle->file_recv_stat.file_name,buffer_handle->file_recv_stat.file);
- }
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[OTA FILE] 创建普通文件: %s", filepath);
+ buffer_handle->file_recv_stat.file = fopen(filepath, "w+");
+ }
+ else
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA FILE] 获取文件路径失败");
+ }
}
-
-
+ // ========== 文件创建失败 ==========
if (buffer_handle->file_recv_stat.file == NULL)
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"6185 buffer_handle->file_recv_stat.file \n");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA FILE] 文件创建失败!");
return ERRCODE_FAIL;
}
- size_t writtensize = fwrite(data_,1,datalen,buffer_handle->file_recv_stat.file);
- if(writtensize == datalen)
- {
- timer_flie_flag=10;
-
- buffer_handle->file_recv_stat.lrcvalue = calculate_lrc(data_,datalen,buffer_handle->file_recv_stat.lrcvalue);
- buffer_handle->file_recv_stat.received_size += datalen;
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"handle_recv_file received_size %d\n",buffer_handle->file_recv_stat.received_size);
- OTA_FILE_value= ((float) buffer_handle->file_recv_stat.received_size / (float)buffer_handle->file_recv_stat.file_size) *100;
-
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[OTA FILE] 文件创建成功");
- }else{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"handle_recv_file write file failed! ret %d != %d\n",writtensize,datalen);
+ // ========== 写入第0包数据 ==========
+ size_t write_len = fwrite(data_body, 1, body_len, buffer_handle->file_recv_stat.file);
+ if (write_len != body_len)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA FILE] 第0包写入失败!write:%zu, need:%d", write_len, body_len);
return ERRCODE_FAIL;
}
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA FILE] 第0包写入成功");
+
+ // 更新LRC、接收长度
+ buffer_handle->file_recv_stat.lrcvalue = calculate_lrc(data_body, body_len, buffer_handle->file_recv_stat.lrcvalue);
+ buffer_handle->file_recv_stat.received_size += body_len;
+
+ // ====================== 修复:安全整数进度计算 ======================
+ uint32_t recv_size = buffer_handle->file_recv_stat.received_size;
+ uint32_t total_size = buffer_handle->file_recv_stat.file_size;
+ uint32_t progress = 0;
+ if(total_size > 0){
+ progress = (recv_size * 100) / total_size;
+ }
+ OTA_FILE_value = progress;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA PROGRESS] 进度: %lu%% (%lu/%lu)",
+ progress, recv_size, total_size);
-
+ timer_flie_flag = 10;
buffer_handle->file_recv_stat.recv_file_stat = 1;
- ////////////////创建文件传输超时定时器//////////////////
- uint32_t tick;
- osStatus_t retTimer;
- if(BR_TRANSFER_timer!=NULL)
+
+ // ========== 创建传输超时定时器 ==========
+ if (BR_TRANSFER_timer != NULL)
{
osTimerDelete(BR_TRANSFER_timer);
BR_TRANSFER_timer = NULL;
}
- ble_read_timer_p=buffer_handle;
- timer_flie_flag=10;
+ ble_read_timer_p = buffer_handle;
BR_TRANSFER_timer = osTimerNew((osTimerFunc_t)ble_transfer_Timer_CallBack, osTimerPeriodic, NULL, NULL);
- tick =1000;// osMs2Tick(1000);
- retTimer = osTimerStart(BR_TRANSFER_timer, tick);
- if (retTimer != osOK && BR_TRANSFER_timer != NULL) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"StartCallTimer osTimerStart failed, ret = %lx!!", retTimer);
+ if (osTimerStart(BR_TRANSFER_timer, 1000) != osOK)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA TIMER] 启动传输定时器失败");
osTimerDelete(BR_TRANSFER_timer);
BR_TRANSFER_timer = NULL;
return ERRCODE_FAIL;
}
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA TIMER] 传输定时器启动成功");
- {
- if(buffer_handle->file_recv_stat.file_type==3)
- TRANSMIT_DATA=TRANS_DIAL_TRANSMITTING;
-
- if(buffer_handle->file_recv_stat.file_type==1)
- TRANSMIT_DATA=TRANS_OTA_TRANSMITTING;
-
- if(buffer_handle->file_recv_stat.file_type==2)
- TRANSMIT_DATA=TRANS_MP3_TRANSMITTING;
+ // ========== 发布传输状态事件 ==========
+ if (buffer_handle->file_recv_stat.file_type == 1)
+ TRANSMIT_DATA = TRANS_OTA_TRANSMITTING;
+ else if (buffer_handle->file_recv_stat.file_type == 2)
+ TRANSMIT_DATA = TRANS_MP3_TRANSMITTING;
+ else if (buffer_handle->file_recv_stat.file_type == 3)
+ TRANSMIT_DATA = TRANS_DIAL_TRANSMITTING;
+ else if (buffer_handle->file_recv_stat.file_type == 4)
+ TRANSMIT_DATA = TRANS_BIN_TRANSMITTING;
+ else if (buffer_handle->file_recv_stat.file_type == 7)
+ TRANSMIT_DATA = TRANS_EPO_TRANSMITTING;
- if(buffer_handle->file_recv_stat.file_type==4)
- TRANSMIT_DATA=TRANS_BIN_TRANSMITTING;
-
- //gnss文件传输
- if(buffer_handle->file_recv_stat.file_type==7)
- TRANSMIT_DATA=TRANS_EPO_TRANSMITTING;
-
- CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1);
- }
+ CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT, &TRANSMIT_DATA, 1);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA EVENT] 发布传输中事件");
}
- ///////////////////////////////////////////////////////////
}
- else if ((last_package_id+1)==package_id)
+
+ // ====================== 连续包:正常写入 ======================
+ else if ((last_package_id + 1) == package_id)
{
- last_package_id=package_id;
+ last_package_id = package_id;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA DATA] 连续包正常接收: %d", package_id);
+
if (buffer_handle->file_recv_stat.file == NULL)
{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"6194 buffer_handle->file_recv_stat.file \n");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA ERROR] 文件句柄为空,无法写入");
return ERRCODE_FAIL;
}
- //写入文件
- size_t writtensize = fwrite(data_,1,datalen,buffer_handle->file_recv_stat.file);
- if(writtensize == datalen)
- {
- timer_flie_flag=10;
- buffer_handle->file_recv_stat.lrcvalue = calculate_lrc(data_,datalen,buffer_handle->file_recv_stat.lrcvalue);
- buffer_handle->file_recv_stat.received_size += datalen;
- OTA_FILE_value= ((float) buffer_handle->file_recv_stat.received_size / (float)buffer_handle->file_recv_stat.file_size) *100;
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"handle_recv_file received_size %d %0.3lf\n",buffer_handle->file_recv_stat.received_size
- ,(float) buffer_handle->file_recv_stat.received_size / (float)buffer_handle->file_recv_stat.file_size);
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"OTA_FILE_value %d \n",OTA_FILE_value);
-
- }else{
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"handle_recv_file write file failed! ret %d != %d\n",writtensize,datalen);
+ // 写入文件
+ size_t write_len = fwrite(data_body, 1, body_len, buffer_handle->file_recv_stat.file);
+ if (write_len != body_len)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA FILE] 写入失败!write:%zu, need:%d", write_len, body_len);
return ERRCODE_FAIL;
}
- //检查文件是否写完
- if(buffer_handle->file_recv_stat.file_size == buffer_handle->file_recv_stat.received_size)
+ // 更新LRC & 进度
+ timer_flie_flag = 10;
+ buffer_handle->file_recv_stat.lrcvalue = calculate_lrc(data_body, body_len, buffer_handle->file_recv_stat.lrcvalue);
+ buffer_handle->file_recv_stat.received_size += body_len;
+
+ // ====================== 修复:安全整数进度计算 ======================
+ uint32_t recv_size = buffer_handle->file_recv_stat.received_size;
+ uint32_t total_size = buffer_handle->file_recv_stat.file_size;
+ uint32_t progress = 0;
+ if(total_size > 0){
+ progress = (recv_size * 100) / total_size;
+ }
+ OTA_FILE_value = progress;
+
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA PROGRESS] 累计: %lu, 总大小: %lu, 进度: %lu%%",
+ recv_size, total_size, progress);
+
+ // ====================== 文件接收完成 ======================
+ if (buffer_handle->file_recv_stat.received_size >= buffer_handle->file_recv_stat.file_size)
{
- if (buffer_handle->file_recv_stat.file!=NULL)
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA FINISH] 文件接收完成!");
+
+ // 关闭文件
+ if (buffer_handle->file_recv_stat.file != NULL)
{
fclose(buffer_handle->file_recv_stat.file);
buffer_handle->file_recv_stat.file = NULL;
}
+
+ // 释放文件名
if (buffer_handle->file_recv_stat.file_name != NULL)
{
free(buffer_handle->file_recv_stat.file_name);
- buffer_handle->file_recv_stat.file_name=NULL;
+ buffer_handle->file_recv_stat.file_name = NULL;
}
- buffer_handle->file_recv_stat.recv_file_stat = 2;
- buffer_handle->receive_file_flag = 0;
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"handle_recv_file received success \n");
- if(BR_TRANSFER_timer)
+ // 关闭定时器
+ if (BR_TRANSFER_timer != NULL)
{
osTimerStop(BR_TRANSFER_timer);
osTimerDelete(BR_TRANSFER_timer);
BR_TRANSFER_timer = NULL;
}
- ble_read_timer_p=NULL;
-
- //gnss文件传输
- if(buffer_handle->file_recv_stat.file_type==7)
- TRANSMIT_DATA=TRANS_EPO_TRANSMITTING;
- else
- TRANSMIT_DATA=FILE_IS_DONE;
-
- CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1);
+ ble_read_timer_p = NULL;
+ // 更新状态
+ buffer_handle->file_recv_stat.recv_file_stat = 2;
+ buffer_handle->receive_file_flag = 0;
+ TRANSMIT_DATA = FILE_IS_DONE;
+ CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT, &TRANSMIT_DATA, 1);
- ble_reply_cmd(OTA_FILE_SUCC_CMD,1);//接收成功
- }
-
- }
- else if (last_package_id==package_id)
- {
- uint32_t replydata=0xffffffff;
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"0xffffffff 包重复\r\n");
- //ble_reply_msgarr(6,4,&replydata,4);
+ // 回复APP成功
+ ble_reply_cmd(OTA_FILE_SUCC_CMD, 1);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[OTA REPLY] 回复APP接收成功");
}
- else if (last_package_id!=package_id)
- {
- uint32_t replydata= last_package_id+1;
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"包错漏\r\n");
-
+ }
- ble_reply_msgarr(0x06,0x04,&replydata,4);
- }
- return ERRCODE_SUCC;
+ // ====================== 包重复 ======================
+ else if (last_package_id == package_id)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA WARN] 包重复!pkg_id:%d, last_id:%d", package_id, last_package_id);
}
+
+ // ====================== 包丢失/乱序 ======================
else
{
- return ERRCODE_FAIL;
+ uint32_t reply_pkg = last_package_id + 1;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA ERROR] 包丢失!期望:%d, 收到:%d", reply_pkg, package_id);
+ ble_reply_msgarr(0x06, 0x04, &reply_pkg, 4);
}
+
+ return ERRCODE_SUCC;
}
+
+ // ====================== 不支持的命令 ======================
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[OTA DECODE] 不支持的cmdid:0x%02X", header->cmdid);
return ERRCODE_FAIL;
}
-
errcode_t decode_ota_json(ble_read_data *buffer_handle) {
if (uapi_dev_runtime_get_train_status() == 1) {