\r
#define AI_TXT_BUF_MAX_LEN 1024*3 //json解析失败\r
\r
+\r
+uint32_t packdataLen = 0;\r
+uint32_t totalDataLen = 0;\r
+uint8_t totalpack = 0;\r
+uint8_t cmd_data[17];\r
+uint8_t *recvData;\r
+#include "los_memory.h"\r
+\r
+#define MAX_BLE_MSG_PACKAGE_LEN (1024*5) //包缓存最大5k\r
+#define BLE_MSG_TMP_FILE_NAME "/user/userdata/ble_tmp_buf_%04X"\r
+typedef struct \r
+{\r
+ int handle;\r
+ int data_len ;\r
+ int totalDataLen;\r
+ int buffer_to_file; //1 buffer to file , 0 buffer to ram\r
+ int decode_type; //1 with header , 2 no header\r
+ FILE *tmpfilehandle;// 如果buffer to file , 则在此保存handle\r
+ msg_header_t cmd_header;\r
+ uint8_t *data;//if buffer_to_file is 1, than data is the filename , else data is the ram buffer.\r
+ uint8_t crcvalue;\r
+ uint8_t lrcvalue; //计算crc用的临时变量\r
+ uint8_t lrcvalue2; //计算crc用的临时变量\r
+ uint32_t last_timestamp;// last package receive time\r
+ uint8_t receive_file_flag;//1 接收文件 0 不接收文件\r
+ file_recv_stat_t file_recv_stat;\r
+ uint8_t last_data_sample[5]; //专门给文件传输过程中重复包判定用。目前只是取前5个字节,实际应该再做优化算法。\r
+ uint16_t last_data_size;//专门给传输过程中重复包判定用,记录上一个包的长度,至少长度相同才有判断重复的必要。同时也可以作为少于5个字节的包的判定依据。\r
+} ble_read_data;\r
+\r
+#define MAX_HANDLE_NUM 10\r
+//LITE_OS_SEC_TEXT_MINOR UINT32 LOS_MemInfoGet(VOID *pool, LOS_MEM_POOL_STATUS *poolStatus)\r
+//根据特征值分开组合读取的数据,并处理\r
+static ble_read_data handle_l[MAX_HANDLE_NUM]={0};\r
+\r
+errcode_t cancel_recv_file(ble_read_data *buffer_handle);\r
+\r
+\r
+\r
+\r
+uint8_t ble_dial_file_count=0;\r
+uint8_t ble_dial_file_index=0;\r
uint8_t *bigDataBuf = NULL;//大数据buf\r
uint8_t bigDataBufLen=0;\r
bool sendbigDataBufState = false;//发送大数据表示不要被其他指令打断\r
ble_recv_data_info_t ble_recv_data;\r
static uint8_t TRANSMIT_DATA;\r
static osTimerId_t BR_TRANSFER_timer=NULL;\r
+static uint8_t timer_flie_type=0;\r
+static uint32_t timer_flie_flag=0;\r
+ble_read_data* ble_read_timer_p=NULL;\r
+\r
+\r
+\r
\r
#if 1\r
#include "app_msg_manager.h"\r
if (data2ae3Cmd == handle) return "data2ae3Cmd";\r
if (data2ae4Cmd == handle) return "data2ae4Cmd";\r
if (data2ae5Cmd == handle) return "data2ae5Cmd";\r
+ if (data2ae6Cmd == handle) return "data2ae6Cmd";\r
//if (data2ae2Cmd == handle) return "data2ae2Cmd";\r
\r
return "unknown handle";\r
\r
return ERRCODE_SUCC;\r
} \r
+static errcode_t get_custom_dial_file_path(uint16_t id,uint32_t input_size, char* output_file_path , uint32_t max_output_size)\r
+{\r
+ if( id >=5 || output_file_path == NULL)\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ char name[64]={0};\r
+ ble_get_dial_path(name,id);\r
+\r
+ int ret = sprintf_s(output_file_path,max_output_size,"%s",name);\r
+ if (ret < 0)\r
+ return ERRCODE_FAIL;\r
\r
+ return ERRCODE_SUCC;\r
+\r
+}\r
static errcode_t get_dial_file_path(char* input_dialname ,uint32_t input_size, char* output_file_path , uint32_t max_output_size)\r
{\r
if(input_dialname == NULL || output_file_path == NULL)\r
}\r
\r
\r
-\r
-\r
-\r
-\r
-uint32_t packdataLen = 0;\r
-uint32_t totalDataLen = 0;\r
-uint8_t totalpack = 0;\r
-uint8_t cmd_data[17];\r
-uint8_t *recvData;\r
-#include "los_memory.h"\r
-\r
-#define MAX_BLE_MSG_PACKAGE_LEN (1024*5) //包缓存最大5k\r
-#define BLE_MSG_TMP_FILE_NAME "/user/userdata/ble_tmp_buf_%04X"\r
-typedef struct \r
-{\r
- int handle;\r
- int data_len ;\r
- int totalDataLen;\r
- int buffer_to_file; //1 buffer to file , 0 buffer to ram\r
- int decode_type; //1 with header , 2 no header\r
- FILE *tmpfilehandle;// 如果buffer to file , 则在此保存handle\r
- msg_header_t cmd_header;\r
- uint8_t *data;//if buffer_to_file is 1, than data is the filename , else data is the ram buffer.\r
- uint8_t crcvalue;\r
- uint8_t lrcvalue; //计算crc用的临时变量\r
- uint8_t lrcvalue2; //计算crc用的临时变量\r
- uint32_t last_timestamp;// last package receive time\r
- uint8_t receive_file_flag;//1 接收文件 0 不接收文件\r
- file_recv_stat_t file_recv_stat;\r
- uint8_t last_data_sample[5]; //专门给文件传输过程中重复包判定用。目前只是取前5个字节,实际应该再做优化算法。\r
- uint16_t last_data_size;//专门给传输过程中重复包判定用,记录上一个包的长度,至少长度相同才有判断重复的必要。同时也可以作为少于5个字节的包的判定依据。\r
-} ble_read_data;\r
-\r
-#define MAX_HANDLE_NUM 10\r
-//LITE_OS_SEC_TEXT_MINOR UINT32 LOS_MemInfoGet(VOID *pool, LOS_MEM_POOL_STATUS *poolStatus)\r
-//根据特征值分开组合读取的数据,并处理\r
-static ble_read_data handle_l[MAX_HANDLE_NUM]={0};\r
-\r
-errcode_t cancel_recv_file(ble_read_data *buffer_handle);\r
-\r
-\r
-\r
-\r
-\r
-\r
//发送训练状态[app发起的运动]\r
void sendtraningstatedata(uint8_t state ,uint16_t time)\r
{\r
\r
cJSON_free(jsonString);\r
}\r
-//发送AI录音准备就绪国内/国外标识:0:国内版本 1:国外版本\r
+//发送AI录音准备就绪国内/\r
+/*使用模型:\r
+0:文心一言\r
+1:ChatGPT\r
+2:KIMI\r
+3:豆包*/\r
void send_AI_is_ready(uint8_t type)\r
{\r
\r
\r
\r
ret = gap_ble_pair_remote_device(&phone_addr);\r
- printf("gap_ble_pair_remote_device ret:%x ",ret);\r
+ printf("gap_ble_pair_remote_device ret:%x \r\n",ret);\r
bond = 0x02;//手表与该手机绑定过\r
value[17] = bond;//\r
value[18] = Calculate_CRC(value,18);\r
\r
}\r
cJSON_Delete(root);\r
+ ble_AlarmClock_refresh();\r
printf("alarmCount %d\n",alarmCount);\r
\r
}\r
value[18] = heart_param.remind_on;//\r
value[19] = heart_param.max_min;//\r
value[20] = heart_param.heart;// \r
- \r
+\r
printf("%d %d %d %d ",value[17],value[18],value[19],value[20]);\r
\r
value[21] = Calculate_CRC(value,21);\r
case GET_SPECIF_TYPE_FILE_CMD://获取指定类型文件目录 \r
case AI_IS_READ_DATA_CMD:\r
case SYN_HEART_HISTORY_DATA_CMD://同步心率历史数据\r
- //heartDataCmd(cmd,data,datalen,totaldata,crcvalue);\r
case SYN_SPO2_HISTORY_DATA_CMD://同步血氧历史数据\r
case SYN_STEP_HISTORY_DATA_CMD: //同步步数历史数据\r
case SYN_FAT_BURN_HISTORY_DATA_CMD://同步燃脂时间数据\r
fseek(fp, 0, SEEK_SET); // 将文件指针移回文件开头\r
\r
buf = (char *)ym_malloc(sizeof(char)*num+1);\r
- if(buf==NULL)return false;\r
+ if(buf==NULL){fclose(fp); return false;}\r
\r
uint32_t pack=1;\r
if(file_size%num==0)\r
return ble_reply_msgarr(msg_cmdtype,msg_cmdid,&replydata,1);\r
}\r
\r
+static uint32_t last_package_id=0;\r
+static void ble_transfer_Timer_CallBack(int data)\r
+{\r
+ timer_flie_flag--;\r
+\r
+ if(timer_flie_flag==0)\r
+ {\r
+ if(timer_flie_type==1)\r
+ {\r
+ TRANSMIT_DATA=TRANS_OTA_FAIL;\r
+ }\r
+ else if (timer_flie_type==3)\r
+ {\r
+ TRANSMIT_DATA=TRANS_DIAL_FAIL;\r
+ }\r
+ else\r
+ {\r
+ TRANSMIT_DATA=TRANS_FREE;\r
+ }\r
+ \r
+ ble_read_timer_p->receive_file_flag = 0;\r
+\r
+ if (ble_read_timer_p->file_recv_stat.recv_file_stat != 2) //已经下载完毕的文件,没有必要cancel了。\r
+ {\r
+\r
+ if (ble_read_timer_p->file_recv_stat.file!=NULL)\r
+ {\r
+ fclose(ble_read_timer_p->file_recv_stat.file);\r
+ ble_read_timer_p->file_recv_stat.file = NULL;\r
+ }\r
+ if (ble_read_timer_p->file_recv_stat.file_name != NULL)\r
+ {\r
+ free(ble_read_timer_p->file_recv_stat.file_name);\r
+ ble_read_timer_p->file_recv_stat.file_name=NULL;\r
+ }\r
+ ble_read_timer_p->file_recv_stat.recv_file_stat = -1;\r
+\r
+ ble_read_timer_p=NULL;\r
+\r
+ ble_reply_cmd(FILE_RECV_REPLY_STAT_CMD,0);//接收失败\r
+ }\r
+ CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1);\r
+\r
+ if(BR_TRANSFER_timer)\r
+ {\r
+ osTimerStop(BR_TRANSFER_timer);\r
+ osTimerDelete(BR_TRANSFER_timer);\r
+ BR_TRANSFER_timer = NULL;\r
+ }\r
+\r
+ }\r
+}\r
+uint8_t OTA_FILE_value=0;\r
+\r
+errcode_t decode_ota_data(ble_read_data *buffer_handle,uint8_t *data,uint16_t datalen,uint8_t crcvalue)\r
+{\r
+ uint32_t package_id=0;\r
+ memcpy_s(&package_id,4,&data[11],4);\r
+ printf("package_id: %d \r\n",package_id);\r
+\r
+ // for(int i=0 ;i<17;i++)\r
+ // {\r
+ // printf(" 0x%02X",data[i]);\r
+ // }\r
+ // printf("\r\n");\r
+\r
+ data=data+sizeof(msg_header_t);\r
+ datalen-=18;\r
+ if(Check_CRC(data,datalen,crcvalue))\r
+ {\r
+ \r
+ if(package_id==0)\r
+ {\r
+ last_package_id=package_id;\r
+ if((buffer_handle->file_recv_stat.recv_file_stat <= 0) && buffer_handle->file_recv_stat.file == NULL )\r
+ {\r
+ buffer_handle->file_recv_stat.lrcvalue = 0;\r
+ if (buffer_handle->file_recv_stat.file_type == 1)\r
+ {\r
+ buffer_handle->file_recv_stat.file = fopen("/update/update.fwpkg","w+");\r
+ printf("create file /update/update.fwpkg %X\n",buffer_handle->file_recv_stat.file);\r
+\r
+ }else{\r
+ char filepath[128]={0};\r
+ 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)\r
+ {\r
+ buffer_handle->file_recv_stat.file = fopen(filepath,"w+");\r
+ printf("create file %s %X\n",filepath,buffer_handle->file_recv_stat.file);\r
+ }else{\r
+ printf("create file %s error %X\n",buffer_handle->file_recv_stat.file_name,buffer_handle->file_recv_stat.file);\r
+ } \r
+ }\r
+ if (buffer_handle->file_recv_stat.file == NULL)\r
+ {\r
+ printf("6185 buffer_handle->file_recv_stat.file \n");\r
+ return ERRCODE_FAIL;\r
+ }\r
+ size_t writtensize = fwrite(data,1,datalen,buffer_handle->file_recv_stat.file);\r
+ if(writtensize == datalen)\r
+ {\r
+ timer_flie_flag=10;\r
+\r
+ buffer_handle->file_recv_stat.lrcvalue = calculate_lrc(data,datalen,buffer_handle->file_recv_stat.lrcvalue);\r
+ buffer_handle->file_recv_stat.received_size += datalen;\r
+ printf("handle_recv_file received_size %d\n",buffer_handle->file_recv_stat.received_size);\r
+ OTA_FILE_value= ((float) buffer_handle->file_recv_stat.received_size / (float)buffer_handle->file_recv_stat.file_size) *100;\r
+\r
+\r
+ }else{\r
+ printf("handle_recv_file write file failed! ret %d != %d\n",writtensize,datalen);\r
+ return ERRCODE_FAIL;\r
+ }\r
+\r
+\r
+ buffer_handle->file_recv_stat.recv_file_stat = 1;\r
+ ////////////////创建文件传输超时定时器//////////////////\r
+ uint32_t tick;\r
+ osStatus_t retTimer;\r
+ if(BR_TRANSFER_timer!=NULL)\r
+ {\r
+ osTimerDelete(BR_TRANSFER_timer);\r
+ BR_TRANSFER_timer = NULL;\r
+ }\r
+ timer_flie_type=buffer_handle->file_recv_stat.file_type;\r
+ ble_read_timer_p=buffer_handle;\r
+ timer_flie_flag=10;\r
+\r
+ BR_TRANSFER_timer = osTimerNew((osTimerFunc_t)ble_transfer_Timer_CallBack, osTimerPeriodic, NULL, NULL);\r
+ tick =1000;// osMs2Tick(1000);\r
+ retTimer = osTimerStart(BR_TRANSFER_timer, tick);\r
+ if (retTimer != osOK && BR_TRANSFER_timer != NULL) {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"StartCallTimer osTimerStart failed, ret = %lx!!", retTimer);\r
+ osTimerDelete(BR_TRANSFER_timer);\r
+ BR_TRANSFER_timer = NULL;\r
+ return ERRCODE_FAIL;\r
+ }\r
+ }\r
+ ///////////////////////////////////////////////////////////\r
+ }\r
+ else if ((last_package_id+1)==package_id)\r
+ {\r
+ last_package_id=package_id;\r
+ if (buffer_handle->file_recv_stat.file == NULL)\r
+ {\r
+ printf("6194 buffer_handle->file_recv_stat.file \n");\r
+ return ERRCODE_FAIL;\r
+ }\r
+ //写入文件\r
+ size_t writtensize = fwrite(data,1,datalen,buffer_handle->file_recv_stat.file);\r
+ if(writtensize == datalen)\r
+ {\r
+ timer_flie_flag=10;\r
+\r
+ buffer_handle->file_recv_stat.lrcvalue = calculate_lrc(data,datalen,buffer_handle->file_recv_stat.lrcvalue);\r
+ buffer_handle->file_recv_stat.received_size += datalen;\r
+ printf("handle_recv_file received_size %d\n",buffer_handle->file_recv_stat.received_size);\r
+ OTA_FILE_value= ((float) buffer_handle->file_recv_stat.received_size / (float)buffer_handle->file_recv_stat.file_size) *100;\r
+\r
+\r
+ }else{\r
+ printf("handle_recv_file write file failed! ret %d != %d\n",writtensize,datalen);\r
+ return ERRCODE_FAIL;\r
+ }\r
\r
+ //检查文件是否写完\r
+ if(buffer_handle->file_recv_stat.file_size == buffer_handle->file_recv_stat.received_size)\r
+ {\r
+ if (buffer_handle->file_recv_stat.file!=NULL)\r
+ {\r
+ fclose(buffer_handle->file_recv_stat.file);\r
+ buffer_handle->file_recv_stat.file = NULL;\r
+ }\r
+ if (buffer_handle->file_recv_stat.file_name != NULL)\r
+ {\r
+ free(buffer_handle->file_recv_stat.file_name);\r
+ buffer_handle->file_recv_stat.file_name=NULL;\r
+ }\r
+ buffer_handle->file_recv_stat.recv_file_stat = 2;\r
+ buffer_handle->receive_file_flag = 0;\r
+ printf("handle_recv_file received success \n");\r
+\r
+ if(BR_TRANSFER_timer)\r
+ {\r
+ osTimerStop(BR_TRANSFER_timer);\r
+ osTimerDelete(BR_TRANSFER_timer);\r
+ BR_TRANSFER_timer = NULL;\r
+ }\r
+\r
+ ble_reply_cmd(OTA_FILE_SUCC_CMD,1);//接收成功\r
+ }\r
+\r
+ }\r
+ else if (last_package_id==package_id)\r
+ {\r
+ uint32_t replydata=0xffffffff;\r
+ printf("包重复\r\n");\r
+ //ble_reply_msgarr(6,4,&replydata,4);\r
+ }\r
+ else if (last_package_id!=package_id)\r
+ {\r
+ uint32_t replydata= last_package_id+1;\r
+ ble_reply_msgarr(6,4,&replydata,4);\r
+ }\r
+ return ERRCODE_SUCC;\r
+ }\r
+ else\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+}\r
\r
\r
\r
}\r
}\r
\r
+\r
errcode_t decode_dial_info(ble_read_data *buffer_handle)\r
{\r
\r
\r
// dialinfo.dial_count = pdialinfo->dial_count;\r
dialinfo.dial_uid = pdialinfo->dial_uid;\r
- dialinfo.file_name_len = pdialinfo->file_name_len;\r
- // dialinfo.file_type = pdialinfo->file_type;\r
-\r
- if (dialinfo.file_name_len < 0 || dialinfo.file_name_len >255)\r
- {\r
- printf("file name len should in [0,255] \n");\r
- return ERRCODE_FAIL;\r
+ if(dialinfo.dial_uid<=4)\r
+ {\r
+ msg_recv_custom_dial_info_t *custom_dial_info=(msg_recv_custom_dial_info_t*)data;\r
+ printf("custom_dial_info %d %d %d %d",\r
+ custom_dial_info->dial_uid,\r
+ custom_dial_info->battery,\r
+ custom_dial_info->time,\r
+ custom_dial_info->time_font);\r
+ ble_dial_file_count=*(data+sizeof(msg_recv_custom_dial_info_t));\r
+ printf(" custom_dial file_count %d\r\n",ble_dial_file_count);\r
+ \r
}\r
- char * filename = malloc(dialinfo.file_name_len);\r
- uint8_t file_count = data[sizeof(msg_recv_dial_info_t)+dialinfo.file_name_len];\r
- if (filename == NULL)\r
+ else\r
{\r
- printf("file name malloc failed filename_len %d\n",dialinfo.file_name_len);\r
- return ERRCODE_FAIL;\r
+ dialinfo.file_name_len = pdialinfo->file_name_len;\r
+ // dialinfo.file_type = pdialinfo->file_type;\r
+\r
+ if (dialinfo.file_name_len < 0 || dialinfo.file_name_len >255)\r
+ {\r
+ printf("file name len should in [0,255] \n");\r
+ return ERRCODE_FAIL;\r
+ }\r
+ char * filename = malloc(dialinfo.file_name_len);\r
+ ble_dial_file_count= data[sizeof(msg_recv_dial_info_t)+dialinfo.file_name_len];\r
+ if (filename == NULL)\r
+ {\r
+ printf("file name malloc failed filename_len %d\n",dialinfo.file_name_len);\r
+ return ERRCODE_FAIL;\r
+ }\r
+ memcpy_s(filename,dialinfo.file_name_len,data+sizeof(msg_recv_dial_info_t),dialinfo.file_name_len);\r
+ buffer_handle->file_recv_stat.file_name = filename;\r
+ \r
+ printf(" dial name = %s, dial file count = %d \n",\r
+ filename,\r
+ ble_dial_file_count\r
+ );\r
+ free(filename);\r
+\r
}\r
- memcpy_s(filename,dialinfo.file_name_len,data+sizeof(msg_recv_dial_info_t),dialinfo.file_name_len);\r
- buffer_handle->file_recv_stat.file_name = filename;\r
- \r
- printf(" dial name = %s, dial file count = %d \n",\r
- filename,\r
- file_count\r
- );\r
+ \r
buffer_handle->file_recv_stat.received_size = 0;\r
buffer_handle->file_recv_stat.lrcvalue = 0;\r
buffer_handle->receive_file_flag = 0;\r
TRANSMIT_DATA=TRANS_DIAL_TRANSMITTING;\r
CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1);\r
\r
- free(filename);\r
+ \r
return ERRCODE_SUCC;\r
\r
}\r
msg_recv_single_dial_info_t *pdialinfo=(msg_recv_single_dial_info_t*)data;\r
\r
dialinfo.dial_count = pdialinfo->dial_count;\r
+\r
+ ble_dial_file_index= dialinfo.dial_count;\r
+\r
dialinfo.dial_uid = pdialinfo->dial_uid;\r
dialinfo.file_name_len = pdialinfo->file_name_len;\r
dialinfo.file_type = pdialinfo->file_type;\r
}\r
printf("dial_basename %s\n",dial_basename);\r
char dialbin_filepath[128]={0};\r
- if (get_dial_file_path(dial_basename,strlen(dial_basename),dialbin_filepath,sizeof(dialbin_filepath)) != ERRCODE_SUCC)\r
+ if(ble_dial_uid>=5)\r
{\r
- return ERRCODE_FAIL;\r
+ if (get_dial_file_path(dial_basename,strlen(dial_basename),dialbin_filepath,sizeof(dialbin_filepath)) != ERRCODE_SUCC)\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
}\r
+ else\r
+ {\r
+ if (get_custom_dial_file_path(ble_dial_uid,strlen(dial_basename),dialbin_filepath,sizeof(dialbin_filepath)) != ERRCODE_SUCC)\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
+ }\r
+ \r
+\r
printf("dialbin_filepath %s\n",dialbin_filepath);\r
char lzma_filepath[128]={0};\r
if (get_file_recv_file_path(lzmapkgname,strlen(lzmapkgname),lzma_filepath,sizeof(lzma_filepath)) != ERRCODE_SUCC)\r
\r
char *namebuf= strtok(lzmapkgname,".");\r
\r
- install_Register_dial(namebuf,ble_dial_uid);\r
+ if(ble_dial_uid>=5)\r
+ {\r
+ install_Register_dial(namebuf,ble_dial_uid);\r
+\r
+ ble_set_dial_by_id(ble_dial_uid);\r
+\r
+ }\r
+ else\r
+ {\r
\r
- ble_set_dial_by_id(ble_dial_uid);\r
+ install_Register_dial(namebuf,ble_dial_uid);\r
\r
+ ble_set_dial_by_id(ble_dial_uid);\r
+ }\r
+ \r
+ \r
//安装完后删除表盘\r
printf("remove %s\r\n",lzma_filepath);\r
\r
{\r
//ble_set_dial_by_id(ble_dial_uid);\r
\r
- TRANSMIT_DATA= TRANS_DIAL_SUCC;\r
- CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1);\r
-\r
+ if(ble_dial_uid>=5 || ble_dial_file_index==ble_dial_file_count)\r
+ {\r
+ TRANSMIT_DATA= TRANS_DIAL_SUCC;\r
+ CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1);\r
//0504\r
- ble_reply_cmd(DIAL_INSTALL_REPY_CMD,1);\r
+ ble_reply_cmd(DIAL_INSTALL_REPY_CMD,1);\r
+ }\r
+ \r
\r
\r
// ble_reply_cmd(GET_TRANS_END_CMD,1);\r
}\r
\r
}\r
+//\r
+void type2AE6Data(ble_read_data *buffer_handle,uint8_t *cmd_buf ,uint8_t *data,uint16_t datalen,uint8_t *totaldata,uint8_t crcvalue)\r
+{\r
+ uint16_t cmd = cmd_buf[1]*256+cmd_buf[2];\r
+ #ifdef BLE_LOG\r
+ \r
+ #endif\r
+ printf("typeHexOneData:0x%04X\r\n",cmd);\r
+ // uint8_t typeID = cmd_buf[2];\r
+ switch (cmd)\r
+ {\r
+ case OTA_FILE_MSG_CMD :\r
+ {\r
+ if (decode_ota_json( buffer_handle) == ERRCODE_SUCC)\r
+ {\r
+ ble_reply_cmd(OTA_FILE_MSG_CMD,1);\r
+ }else{\r
+ ble_reply_cmd(OTA_FILE_MSG_CMD,2);\r
+ } \r
+ }\r
+ break;\r
+\r
+ case DIAL_COLLECT_FILE_CMD :\r
+ {\r
+ if (decode_dial_info( buffer_handle) == ERRCODE_SUCC)\r
+ {\r
+ ble_reply_cmd(DIAL_COLLECT_FILE_CMD,1);\r
+ }else{\r
+ ble_reply_cmd(DIAL_COLLECT_FILE_CMD,2);\r
+ }\r
+ break; \r
+ }\r
+\r
+ case DIAL_SINGEL_FILE_CMD :\r
+ {\r
+ if (decode_single_dial_info(buffer_handle) == ERRCODE_SUCC)\r
+ {\r
+ ble_reply_cmd(DIAL_SINGEL_FILE_CMD,1);\r
+\r
+ }else{\r
+ ble_reply_cmd(DIAL_SINGEL_FILE_CMD,2);\r
+\r
+ } \r
+ break; \r
+ }\r
+ case MP3_FILE_CMD :\r
+ {\r
+ if (decode_mp3_json( buffer_handle) == ERRCODE_SUCC)\r
+ {\r
+ ble_reply_cmd(MP3_FILE_CMD,1);\r
+ }else{\r
+ ble_reply_cmd(MP3_FILE_CMD,2);\r
+ } \r
+ }\r
+ break;\r
+ // case OTA_FILE_DATA_CMD :\r
+ // {\r
+ // if (decode_ota_data( buffer_handle,data,datalen, crcvalue) == ERRCODE_SUCC)\r
+ // {\r
+\r
+ // }else{\r
+ // ble_reply_cmd(OTA_FILE_DATA_CMD,0);\r
+ // } \r
+ // }\r
+\r
+ case OTA_FILE_SUCC_CMD :\r
+ {\r
+ decode_file_checksum(buffer_handle);\r
+ break;\r
+ }\r
+ \r
+ case OTA_FILE_FAIL_CMD :\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+}\r
+ \r
+\r
\r
\r
void dumpHeader(msg_header_t *msgheader)\r
return ERRCODE_FAIL;\r
}\r
}\r
-static uint8_t timer_flie_type=0;\r
-static uint32_t timer_flie_flag=0;\r
-ble_read_data* ble_read_timer_p=NULL;\r
+\r
\r
errcode_t cancel_recv_file(ble_read_data *buffer_handle)\r
{\r
\r
- buffer_handle->receive_file_flag = 0;\r
-\r
- if (buffer_handle->file_recv_stat.recv_file_stat != 2) //已经下载完毕的文件,没有必要cancel了。\r
+ if(BR_TRANSFER_timer)\r
{\r
-\r
- if (buffer_handle->file_recv_stat.file!=NULL)\r
- {\r
- fclose(buffer_handle->file_recv_stat.file);\r
- buffer_handle->file_recv_stat.file = NULL;\r
- }\r
- if (buffer_handle->file_recv_stat.file_name != NULL)\r
- {\r
- free(buffer_handle->file_recv_stat.file_name);\r
- buffer_handle->file_recv_stat.file_name=NULL;\r
- }\r
- buffer_handle->file_recv_stat.recv_file_stat = -1;\r
-\r
- if(BR_TRANSFER_timer)\r
- {\r
- timer_flie_flag=1;\r
- }\r
-\r
- ble_reply_cmd(FILE_RECV_REPLY_STAT_CMD,0);//接收失败\r
+ timer_flie_flag=1;\r
}\r
+ ble_reply_cmd(FILE_RECV_REPLY_STAT_CMD,0);//接收失败\r
+ \r
return ERRCODE_SUCC;\r
}\r
\r
-\r
-static void ble_transfer_Timer_CallBack(int data)\r
-{\r
- timer_flie_flag--;\r
-\r
- if(timer_flie_flag==0)\r
- {\r
- if(timer_flie_type==1)\r
- {\r
- TRANSMIT_DATA=TRANS_OTA_FAIL;\r
- }\r
- else if (timer_flie_type==3)\r
- {\r
- TRANSMIT_DATA=TRANS_DIAL_FAIL;\r
- }\r
- else\r
- {\r
- TRANSMIT_DATA=TRANS_FREE;\r
- }\r
- \r
- ble_read_timer_p->receive_file_flag = 0;\r
-\r
- if (ble_read_timer_p->file_recv_stat.recv_file_stat != 2) //已经下载完毕的文件,没有必要cancel了。\r
- {\r
-\r
- if (ble_read_timer_p->file_recv_stat.file!=NULL)\r
- {\r
- fclose(ble_read_timer_p->file_recv_stat.file);\r
- ble_read_timer_p->file_recv_stat.file = NULL;\r
- }\r
- if (ble_read_timer_p->file_recv_stat.file_name != NULL)\r
- {\r
- free(ble_read_timer_p->file_recv_stat.file_name);\r
- ble_read_timer_p->file_recv_stat.file_name=NULL;\r
- }\r
- ble_read_timer_p->file_recv_stat.recv_file_stat = -1;\r
-\r
- ble_read_timer_p=NULL;\r
-\r
- ble_reply_cmd(FILE_RECV_REPLY_STAT_CMD,0);//接收失败\r
- }\r
- CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1);\r
-\r
- if(BR_TRANSFER_timer)\r
- {\r
- osTimerStop(BR_TRANSFER_timer);\r
- osTimerDelete(BR_TRANSFER_timer);\r
- BR_TRANSFER_timer = NULL;\r
- }\r
-\r
- }\r
-}\r
-uint8_t OTA_FILE_value=0;\r
-\r
uint8_t get_OTA_recv_value()\r
{\r
return OTA_FILE_value;\r
case 0x04:\r
type2AE0Data(buffer_handle);\r
break;\r
+ case 0x06:\r
+ type2AE6Data(buffer_handle,buf_cmd,data,data_size,totalData,crcvalue);\r
default:\r
break;\r
}\r
{\r
\r
\r
- if(buffer_handle->receive_file_flag == 1)\r
+ if(buffer_handle->receive_file_flag == 1 )\r
{\r
//接收文件\r
+ if(buffer_handle->handle==data2ae6Cmd)\r
+ return decode_ota_data( buffer_handle,totalData,event_size,totalData[event_size-1]);\r
+ else\r
return handle_recv_file(buffer_handle,totalData,event_size);\r
}\r
+\r
msg_header_t *header = (msg_header_t*)totalData; \r
//第一帧\r
if (event_size > sizeof(msg_header_t) && check_header(header) == ERRCODE_SUCC )\r