bool recvBigDataBufState = false;//接收大数据标志\r
static bool muiltFlag = 0;//多包数据flag\r
static bool ANCSBigBufFlag = 0;//ANCS多包数据flag\r
-static uint16_t data_len = 0;\r
+// static uint16_t data_len = 0;\r
ble_recv_data_info_t ble_recv_data;\r
static uint8_t TRANSMIT_DATA;\r
static osTimerId_t BR_TRANSFER_timer=NULL;\r
bool gap_get_paired =gap_get_paired_devices_num(&paired_devices_num);\r
if(gap_get_paired!=true ||paired_devices_num!=0 )\r
{\r
+ printf("sendBindInfor!!!!!!!!!:gap_remove_all_pairs \r\n");\r
gap_remove_all_pairs();\r
}\r
}\r
int result = memcmp(copare_mac,save_mac,6);\r
if(result == 0)\r
{\r
- //已经配对就关闭一键双连\r
- // errcode_t ret = gap_ble_set_ctkd_enable(true);\r
- // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gap_ble_set_ctkd_enable ret = %x", ret);\r
- // set_ctkd_flag(false);\r
- \r
- // if(strcmp("iPhone",devname)==0)\r
- // {\r
- // errcode_t ret = gap_ble_set_ctkd_enable(true);\r
- // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gap_ble_set_ctkd_enable ret = %x", ret);\r
- // set_ctkd_flag(true);\r
- // }\r
+ \r
if(get_ble_pair())\r
{\r
set_ctkd_flag(true);\r
uint32_t pack=1;\r
\r
if(file_size%num==0)\r
- pack=data_len/num;\r
+ pack=file_size/num;\r
else\r
- pack=data_len/num+1;\r
+ pack=file_size/num+1;\r
\r
uint32_t pack_id=1;\r
uint32_t read_size=0;\r
\r
uint32_t pack=1;\r
if(file_size%num==0)\r
- pack=data_len/num;\r
+ pack=file_size/num;\r
else\r
- pack=data_len/num+1;\r
+ pack=file_size/num+1;\r
uint32_t pack_id=1;\r
uint32_t read_size=0;\r
do\r
\r
uint32_t pack=1;\r
if(file_size%num==0)\r
- pack=data_len/num;\r
+ pack=file_size/num;\r
else\r
- pack=data_len/num+1;\r
+ pack=file_size/num+1;\r
uint32_t pack_id=1;\r
uint32_t read_size=0;\r
do\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
+ if(datalen<sizeof(msg_header_t))\r
+ {\r
+ return ERRCODE_FAIL;\r
+ }\r
\r
- // for(int i=0 ;i<17;i++)\r
- // {\r
- // printf(" 0x%02X",data[i]);\r
- // }\r
- // printf("\r\n");\r
+ msg_header_t *header = (msg_header_t*)data; \r
\r
- data=data+sizeof(msg_header_t);\r
- datalen-=18;\r
- if(Check_CRC(data,datalen,crcvalue))\r
+ if(header->cmdtype!=0x06)\r
{\r
- \r
- if(package_id==0)\r
+ return ERRCODE_FAIL;\r
+ }\r
+\r
+ uint8_t* data_=data+sizeof(msg_header_t);\r
+ //datalen-=18;\r
+ datalen=header->package_len;\r
+\r
+ if(header->cmdid==0x0B)\r
+ { \r
+ //取消文件传输\r
+ if(Check_CRC(data_,datalen,crcvalue))\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
+ cancel_recv_file();\r
+ uint8_t replydata= 1;\r
+ ble_reply_msgarr(6,0x0B,&replydata,1);\r
+ }\r
+ else\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
+ cancel_recv_file();\r
+ uint8_t replydata= 0;\r
+ ble_reply_msgarr(6,0x0B,&replydata,1);\r
+ }\r
\r
- }\r
- else if (buffer_handle->file_recv_stat.file_type == 2)\r
- {\r
- char musicpath[64]={0};\r
- get_music_path(musicpath,64);\r
- //"/user/userdata/music"\r
- char filepath[256]={0};\r
- create_mp3_name(filepath,musicpath,buffer_handle->file_recv_stat.file_name);\r
+ }\r
+ else if(header->cmdid==0x02)\r
+ {\r
\r
- buffer_handle->file_recv_stat.file = fopen(filepath,"w+");\r
- printf("filepath %s\r\n",filepath);\r
- }\r
- else\r
+ uint32_t package_id=header->package_index;\r
+ printf("package_id: %d \r\n",package_id);\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
- 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
+ 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
+ }\r
+ else if (buffer_handle->file_recv_stat.file_type == 2)\r
+ {\r
+ char musicpath[64]={0};\r
+ get_music_path(musicpath,64);\r
+ //"/user/userdata/music"\r
+ char filepath[256]={0};\r
+ create_mp3_name(filepath,musicpath,buffer_handle->file_recv_stat.file_name);\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
+ printf("filepath %s\r\n",filepath);\r
+ }\r
+ else\r
+ {\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
+\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("create file %s error %X\n",buffer_handle->file_recv_stat.file_name,buffer_handle->file_recv_stat.file);\r
- } \r
- }\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("6185 buffer_handle->file_recv_stat.file \n");\r
+ printf("6194 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
+ //写入文件\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.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
+\r
OTA_FILE_value= ((float) buffer_handle->file_recv_stat.received_size / (float)buffer_handle->file_recv_stat.file_size) *100;\r
\r
\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
+ if(buffer_handle->file_recv_stat.file_size == buffer_handle->file_recv_stat.received_size)\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
+ 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
- }else{\r
- printf("handle_recv_file write file failed! ret %d != %d\n",writtensize,datalen);\r
- return ERRCODE_FAIL;\r
- }\r
+ ble_reply_cmd(OTA_FILE_SUCC_CMD,1);//接收成功\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
+ else if (last_package_id==package_id)\r
{\r
- free(buffer_handle->file_recv_stat.file_name);\r
- buffer_handle->file_recv_stat.file_name=NULL;\r
+ uint32_t replydata=0xffffffff;\r
+ printf("包重复\r\n");\r
+ //ble_reply_msgarr(6,4,&replydata,4);\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
+ else if (last_package_id!=package_id)\r
{\r
- osTimerStop(BR_TRANSFER_timer);\r
- osTimerDelete(BR_TRANSFER_timer);\r
- BR_TRANSFER_timer = NULL;\r
+ uint32_t replydata= last_package_id+1;\r
+ ble_reply_msgarr(6,4,&replydata,4);\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
+ return ERRCODE_SUCC;\r
}\r
- else if (last_package_id!=package_id)\r
+ else\r
{\r
- uint32_t replydata= last_package_id+1;\r
- ble_reply_msgarr(6,4,&replydata,4);\r
+ return ERRCODE_FAIL;\r
}\r
- return ERRCODE_SUCC;\r
- }\r
- else\r
- {\r
- return ERRCODE_FAIL;\r
}\r
+ return ERRCODE_FAIL;\r
}\r
\r
\r
{\r
case 1: //ota\r
do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_TYPE_STARTOTA,NULL,0);\r
- \r
+\r
+ ble_reply_cmd(FILE_SUCC_TRANSFER,1);\r
+\r
TRANSMIT_DATA=TRANS_OTA_SUCC;\r
CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1);\r
\r
TRANSMIT_DATA=TRANS_MP3_SUCC;\r
CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1);\r
\r
- ble_reply_cmd(DIAL_INSTALL_REPY_CMD,1);\r
+ ble_reply_cmd(FILE_SUCC_TRANSFER,1);\r
ble_mp3_list_update();\r
\r
break;\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_SUCC_INSTALL,1);\r
}\r
\r
\r
TRANSMIT_DATA= TRANS_DIAL_FAIL;\r
CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1);\r
\r
- ble_reply_cmd(DIAL_INSTALL_REPY_CMD,0);\r
+ ble_reply_cmd(DIAL_SUCC_INSTALL,0);\r
\r
}\r
break;\r
osTimerDelete(BR_TRANSFER_timer);\r
BR_TRANSFER_timer = NULL;\r
}\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
printf("取消当前AI对话\r\n");\r
uint8_t data=1;\r
- ble_data_type type_={0x05,0x07,data_len,1,1};\r
- send_big_data(type_,(char *)&data,data_len);\r
+ ble_data_type type_={0x05,0x07,1,1,1};\r
+ send_big_data(type_,(char *)&data,1);\r
AI_is_end_state=0;\r
\r
}\r
uint8_t phone_mac_data[6]={0};\r
\r
#define ble_add_max_num 10\r
-static bd_addr_t phone_addr[ble_add_max_num];\r
-static uint16_t ble_conn_id[ble_add_max_num];\r
+static bd_addr_t phone_addr[ble_add_max_num]={0};\r
+static uint16_t ble_conn_id[ble_add_max_num]={0};\r
\r
\r
bd_addr_t disconect_addr;//断开连接地址不需要反序\r
gap_ble_adv_params_t adv_para;\r
memset_s(&adv_para, sizeof(gap_ble_adv_params_t), 0, sizeof(gap_ble_adv_params_t));\r
\r
- // adv_para.min_interval = 0x30;\r
- // adv_para.max_interval = 0x60;\r
- // adv_para.min_interval = 140 * 32;\r
- // adv_para.max_interval = 160 * 32;\r
adv_para.min_interval = 0x640;\r
adv_para.max_interval = 0x640;\r
adv_para.adv_type = GAP_BLE_ADV_CONN_SCAN_UNDIR;\r
\r
clean_phone_info(conn_id);\r
\r
- if(conn_id==g_ble_conn_id)\r
+ //如果ble连接全部断连,则需要重新开启广播\r
+ //可能因ble连接不够稳定,快速断开ble连接,无法将连接判定为app连接导致断连的时候没有正确重新开启广播\r
+ \r
+ if(conn_id==g_ble_conn_id || !get_ble_connect())\r
{\r
free_ble_data(); \r
\r
ble_ancs_client_clear(conn_id);\r
}\r
\r
- }\r
- \r
- //如果ble连接全部断连,则需要重新开启广播\r
- //可能因ble连接不够稳定,快速断开ble连接,无法将连接判定为app连接导致断连的时候没有正确重新开启广播\r
- if(!get_ble_connect())\r
- {\r
svr_ble_adv_start();\r
- Bleconnect = GAP_BLE_STATE_DISCONNECTED;//蓝牙已断开\r
- ble_disconnect_ok();\r
-\r
- free_ble_data(); \r
-\r
- if(get_ble_pair())\r
- {\r
- ble_ancs_client_clear(conn_id);\r
- }\r
}\r
-\r
- if(ble_is_Alipay_bind()==true)\r
+ else if (ble_is_Alipay_bind()==true)\r
{\r
//如果当前页面处于支付宝界面,则重新开广播\r
svr_ble_adv_start();\r
{\r
gap_conn_param_update_t conn_param = { 0 };\r
conn_param.conn_handle = g_ble_conn_id; /* param 0: conn_handle */\r
- conn_param.interval_min =data; /* param 1: interval_min 10ms */\r
+ conn_param.interval_min =data; /* param 1: interval_min 1.25ms */\r
conn_param.interval_max = data; /* param 2: interval_max */\r
conn_param.slave_latency = 6; /* param 3: slave_latency */\r
- conn_param.timeout_multiplier = 700; /* param 4: timeout_multiplier */\r
+ conn_param.timeout_multiplier = 700; /* param 4: timeout_multiplier 10ms */\r
int ret = gap_ble_connect_param_update(&conn_param);\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"gap ble update connection parameters %d ret: %X\n",data,ret); \r
}\r
}\r
}\r
// uint16_t interval; /*!< @if Eng interval\r
- // @else 链路调度间隔,单位slot @endif */\r
+ // @else 链路调度间隔,单位slot 1.25ms@endif */\r
// uint16_t latency; /*!< @if Eng latency\r
// @else 延迟周期,单位slot @endif */\r
// uint16_t timeout; /*!< @if Eng timeout\r
\r
uint16_t get_ble_interval(void)\r
{\r
- return ble_interval;\r
+ float temp_data =(float)ble_interval*1.25f;\r
+\r
+ return (uint16_t)temp_data;\r
+ \r
}\r
\r
void srv_gap_ble_connect_param_update_callback(uint16_t conn_id, errcode_t status,\r
return ERRCODE_SUCC;\r
}\r
\r
+\r
void send_pair_succ(bd_addr_t *addr)\r
{\r
sendParieSuccess(1,addr);\r
}\r
\r
\r
+void Check_ble_adv_status(void)\r
+{\r
+\r
+ if(get_ble_connect())\r
+ {\r
+ return;\r
+ }\r
+ else\r
+ {\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"get_ble_adv_status %s \n", get_ble_adv_status()?"true":"fales");\r
+ if(get_ble_adv_status()==0)\r
+ {\r
+ if(AdverFlag)\r
+ {\r
+ svr_ble_adv_start_param(); \r
+ }\r
+ \r
+ }\r
+ }\r
+ return;\r
+}\r
+\r
\r
#ifdef __cplusplus\r
}\r