From: hcj <1224667075@qq.com> Date: Wed, 21 Aug 2024 09:03:41 +0000 (+0800) Subject: 优化安卓连接流程 X-Git-Tag: release_V1.2.70_20241020_135402~609^2~5 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=cee067eaac5da1770e0934c5cd5de06619f8198f;p=mirrors%2FFD230.git 优化安卓连接流程 --- diff --git a/code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/BluetoothModel.h b/code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/BluetoothModel.h index 50e695cd8..9190e5ab9 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/BluetoothModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/BluetoothModel.h @@ -14,7 +14,7 @@ #include "bts_def.h" #include "bts_br_gap.h" - +#include namespace OHOS { @@ -34,6 +34,16 @@ typedef struct { } BluetoothCaseInfo; +typedef struct { + uint8_t id; + uint32_t timetamp_begin; + uint32_t timetamp_end; + std::string titel; + std::string content; +}ScheduleInfo; + + + class BluetoothItemView; class BluetoothModel { @@ -145,6 +155,7 @@ void uapi_connect_pbap_pce(void); int uapi_reconnect(void); int uapi_set_acl_connect_A2DP(void); void uapi_get_br_address(bd_addr_t *bdaddr); +void uapi_set_br_address(bd_addr_t *bdaddr); #ifdef __cplusplus } diff --git a/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp index 20a2f857f..02e9bb02c 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp @@ -769,10 +769,13 @@ void BtGapPairStatusChangedCallback(const bd_addr_t *bdAddr, int status) // } // uapi_a2dp_snk_connect(); // a2dp_snk_connect(bdAddr); - if(cm_custom_ble_service_on_flag() && !get_ble_pair()) + if(cm_custom_ble_service_on_flag() && !get_ble_pair()&& (status == GAP_PAIR_PAIRED)) { - if(cm_get_A2DP_switch() || cm_get_HFP_switch()) - uapi_a2dp_snk_connect(); + send_pair_succ((bd_addr_t*)bdAddr); + // if(cm_get_A2DP_switch() || cm_get_HFP_switch()) + // uapi_a2dp_snk_connect(); + hand_watch_first_time_Paired(); + svr_ble_adv_stop(); //uapi_reconnect(); WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uapi_a2dp_snk_connect"); } @@ -1701,11 +1704,27 @@ void uapi_get_br_address(bd_addr_t *bdaddr) if(BtGapPair_bdAddr.addr[0]==0 && BtGapPair_bdAddr.addr[1]==0 && BtGapPair_bdAddr.addr[2]==0 && BtGapPair_bdAddr.addr[3]==0 ) - get_phone_addr(bdaddr); - else + { + uint8_t MacType = 0; + uint8_t mac_data[6]; + memset(mac_data,0,6); + GetwatchSaveMac(mac_data,&MacType); + BtGapPair_bdAddr.addr[0]=mac_data[0]; + BtGapPair_bdAddr.addr[1]=mac_data[1]; + BtGapPair_bdAddr.addr[2]=mac_data[2]; + BtGapPair_bdAddr.addr[3]=mac_data[3]; + BtGapPair_bdAddr.addr[4]=mac_data[4]; + BtGapPair_bdAddr.addr[5]=mac_data[5]; + BtGapPair_bdAddr.type=MacType; + } memcpy(bdaddr,&BtGapPair_bdAddr,sizeof(bd_addr_t)); +} +void uapi_set_br_address(bd_addr_t *bdaddr) +{ + memcpy(&BtGapPair_bdAddr,bdaddr,sizeof(bd_addr_t)); } + static uint8_t br_cmd=0; int uapi_a2dp_snk_connect() { diff --git a/code/sdk/application/wearable/service/ble_service/blemoder/bletest.cpp b/code/sdk/application/wearable/service/ble_service/blemoder/bletest.cpp index de63b5cde..28291ed90 100644 --- a/code/sdk/application/wearable/service/ble_service/blemoder/bletest.cpp +++ b/code/sdk/application/wearable/service/ble_service/blemoder/bletest.cpp @@ -96,6 +96,28 @@ bool is_first_pair(void) } +bool Ble_Set_ScheduleInfo(uint8_t id,uint32_t timetamp_begin,uint32_t timetamp_end,char *title,char *data) +{ + OHOS::ScheduleInfo info; + info.id=id; + info.timetamp_begin=timetamp_begin; + info.timetamp_end=timetamp_end; + info.titel.append(title,strlen(title)+1); + info.content.append(data,strlen(data)+1); + + printf("///////////////////日程数据////////////////////\r\n"); + printf("id:%d\r\n",info.id); + printf("timetamp_begin:%d\r\n",info.timetamp_begin); + printf("timetamp_end:%d\r\n",info.timetamp_end); + printf("titel:%s\r\n",info.titel.c_str()); + printf("content:%s\r\n",info.content.c_str()); + + printf("//////////////////////////////////////////////\r\n"); + +} + + + //在此处实现,给UI回复消息。 void ble_app_reply(bool data) { diff --git a/code/sdk/application/wearable/service/ble_service/blemoder/bletest.h b/code/sdk/application/wearable/service/ble_service/blemoder/bletest.h index 5d54a924f..1c11521a0 100644 --- a/code/sdk/application/wearable/service/ble_service/blemoder/bletest.h +++ b/code/sdk/application/wearable/service/ble_service/blemoder/bletest.h @@ -106,6 +106,9 @@ typedef struct uint32_t freq; }msg_drink_info_t; + + + void read_message_data(void);//读内存信息数据开机读一次 struct message_infor_t *get_message_info(void); void set_weather_now_data(int humidity, char* windScale, char* textNight,int uvIndex,int temp,int iconNight); @@ -352,6 +355,8 @@ uint8_t get_br_is_pair(void); void set_br_pair(void); bool get_lcd_state(void); +////////////////////////////////////////////////////////////////////////// +bool Ble_Set_ScheduleInfo(uint8_t id,uint32_t timetamp_begin,uint32_t timetamp_end,char *title,char *data); #ifdef __cplusplus #if __cplusplus diff --git a/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c b/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c index b1a352783..10485dbba 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c @@ -614,12 +614,15 @@ void comfirmPaire(uint8_t flag) // printf("gap_ble_pair_remote_device 333333333 %x-%x-%x-%x-%x-%x\r\n",phone_addr.addr[0],phone_addr.addr[1],phone_addr.addr[2],phone_addr.addr[3],phone_addr.addr[4],phone_addr.addr[5]); // 一键双连使能(依赖安全连接参数配置) - - errcode_t code = gap_ble_pair_remote_device(&phone_addr); - if(code!=ERRCODE_SUCC) + if(get_ble_pair()) { - printf("gap_ble_pair_remote_device fail %X\r\n",code); + errcode_t code = gap_ble_pair_remote_device(&phone_addr); + if(code!=ERRCODE_SUCC) + { + printf("gap_ble_pair_remote_device fail %X\r\n",code); + } } + }else{ first_bond = 0; errcode_t ret = 0; @@ -1070,9 +1073,16 @@ void sendBindInfor(uint8_t *data) printf("phone_addr:%02x-%02x-%02x-%02x-%02x-%02x type:%d ",phone_addr.addr[0],phone_addr.addr[1],phone_addr.addr[2], phone_addr.addr[3],phone_addr.addr[4],phone_addr.addr[5],phone_addr.type); - - ret = gap_ble_pair_remote_device(&phone_addr); - printf("gap_ble_pair_remote_device ret:%x \r\n",ret); + if(get_ble_pair()) + { + errcode_t code = gap_ble_pair_remote_device(&phone_addr); + if(code!=ERRCODE_SUCC) + { + printf("gap_ble_pair_remote_device fail %X\r\n",code); + } + } + // ret = gap_ble_pair_remote_device(&phone_addr); + // printf("gap_ble_pair_remote_device ret:%x \r\n",ret); bond = 0x02;//手表与该手机绑定过 value[17] = bond;// value[18] = Calculate_CRC(value,18); @@ -2142,10 +2152,23 @@ uint8_t parse_jsonCheck_weather(uint8_t *buf,uint8_t *check)//json 格式解析 set_weather_one_data(tempMin,iconDay,fxDate,tempMax,textDay,i); } - + if( cm_custom_ble_service_on_flag() && cm_get_HFP_switch()) uapi_pbap_cmd_start_client(); + bd_addr_t bdaddr={0}; + uapi_get_br_address(&bdaddr); + if( cm_custom_ble_service_on_flag() && (cm_get_HFP_switch()||cm_get_A2DP_switch())) + { + if (false==bt_is_acl_connected(&bdaddr)) + { + int ret = gap_reconnect_media_device(&bdaddr); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " gap_reconnect_media_device ret = %u", ret); + } + + } + + ble_UpdateMainWeatherData(); cJSON_Delete(root); *check = 1; @@ -2259,6 +2282,7 @@ uint8_t binCheck_AI(uint8_t *buf,uint8_t *check,uint16_t len)//json 格式解析 //offset+=1; } if(offset>=len)break; + if(buf[offset]==0) { offset++; @@ -2274,7 +2298,7 @@ uint8_t binCheck_AI(uint8_t *buf,uint8_t *check,uint16_t len)//json 格式解析 memcpy_s(error_buf,256,&buf[offset],txt_len); printf("binCheck_AI Question txtbuf:%s %d\r\n",error_buf,txt_len); ble_set_ai_Answer_str(error_buf,0); - + offset+=txt_len; printf("AI 解析失败\r\n"); } @@ -2295,8 +2319,8 @@ uint8_t binCheck_AI(uint8_t *buf,uint8_t *check,uint16_t len)//json 格式解析 memcpy_s(error_buf,256,&buf[offset],txt_len); printf("binCheck_AI Question txtbuf:%s %d\r\n",error_buf,txt_len); ble_set_ai_Answer_str(error_buf,3); - - printf("AI 解析失败\r\n"); + offset+=txt_len; + printf("AI 回应错误\r\n"); } if(offset>=len)break; @@ -2321,7 +2345,8 @@ uint8_t binCheck_AI(uint8_t *buf,uint8_t *check,uint16_t len)//json 格式解析 printf("binCheck_AI Question txtbuf:%s %d\r\n",error_buf,txt_len); ble_set_ai_Answer_str(error_buf,4); - printf("AI 解析失败\r\n"); + offset+=txt_len; + //printf("AI 解析失败\r\n"); } if(offset>=len)break; @@ -2455,6 +2480,123 @@ void SaveChatGPTCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,u } } + +bool bin_Check_schedule(uint8_t *data,uint16_t len) +{ + uint16 offset=0; + uint16 buf_len=0; + while (offset=len) + break; + + memcpy_s(&buf_len,2,&data[offset],2); + offset+=2; + if(offset>=len) + break; + + char *title=(char*)malloc(buf_len+1); + memset_s(title,512,0,buf_len+1); + memcpy_s(title,512,&data[offset],buf_len); + + offset+=buf_len; + if(offset>=len) + { + if(title) + { + free(title); + } + break; + } + uint32_t timetemp_begin=0; + memcpy_s(&timetemp_begin,4,&data[offset],4); + offset+=4; + if(offset>=len) + break; + uint32_t timetemp_end=0; + memcpy_s(&timetemp_end,4,&data[offset],4); + offset+=4; + if(offset>=len) + break; + + memcpy_s(&buf_len,2,&data[offset],2); + offset+=2; + if(offset>=len) + break; + + char *data=(char*)malloc(buf_len+1); + memset_s(data,512,0,buf_len+1); + memcpy_s(data,512,&data[offset],buf_len); + + offset+=buf_len; + if(offset>=len) + { + if(title) + { + free(title); + } + if(data) + { + free(data); + } + break; + } + Ble_Set_ScheduleInfo(id,timetemp_begin,timetemp_end,title,data); + if(title) + { + free(title); + } + if(data) + { + free(data); + } + + } + return true; +} +void APP_send_schedule_Cmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue) +{ + uint32_t tmp = 1; + uint16_t tmp_data = 1; + uint8_t sendBuf[19]; + memset(sendBuf,0,19); + sendBuf[0] = 0x72; + sendBuf[1] = 0x02; + sendBuf[2] = 0x24; + memcpy(sendBuf+3,&tmp,4); + memcpy(sendBuf+7,&tmp,4); + memcpy(sendBuf+11,&tmp,4); + memcpy(sendBuf+15,&tmp_data,2); + // printf("GetWeatherCmd:len:%d data:%s\r\n",len,data); + //"sk-proj-04ogvrZQqyaiv1OWw8OZT3BlbkFJG9Gyr8oFvRdmr3oXQNbX" + if(Check_CRC(data,len,crcvalue)) + { + + + if(bin_Check_schedule(data,len)) + { + sendBuf[17] = 1; + } + else + { + sendBuf[17] = 2; + } + sendBuf[18] = Calculate_CRC(sendBuf,18); + sendBleData(sendBuf,19); + } + else + { + sendBuf[17] = 0; + sendBuf[18] = Calculate_CRC(sendBuf,18); + sendBleData(sendBuf,19); + } +} + + + void GetGPSCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8_t crcvalue) { send_big_data(1,NULL,0,0,1,1,0x4f,2); @@ -2746,6 +2888,10 @@ void type2AE4Data(ble_read_data *buffer_handle,uint8_t *buf_cmd,uint8_t *data,ui case APP_SEND_AI_KEY_IS_AVAILABLE_CMD: APP_reply_AI_is_ready(data,datalen); break; + case SYN_APP_SCHEDULE_DATA_CMD: + APP_send_schedule_Cmd(typeID,data,datalen,totalData,crcvalue); + break; + default: break; diff --git a/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.h b/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.h index d229fd919..1f396e3e3 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.h +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.h @@ -626,6 +626,7 @@ TYPE:02 #define DELETE_FILE_CMD 0x0222 //删除指定文件 #define SYN_BASIC_REAL_HEATR_CMD 0x024B //同步基础训练试试心率记录 #define APP_SEND_CHATGPT_KEY_CMD 0x0223 //APP发送chatGPT key +#define SYN_APP_SCHEDULE_DATA_CMD 0x0224 //同步schedule信息 #define SYN_TODAY_BASIC_TRAIN_TXT_CMD 0x024D //同步当天任意时间之后的基础训练记录 #define APP_SEND_AI_KEY_IS_AVAILABLE_CMD 0x0506 //查询AI是否可用,APP 回复 @@ -801,6 +802,7 @@ bool get_ctkd_flag(void); uint8_t parse_jsonCheck_weather(uint8_t *buf,uint8_t *check);//json 格式解析 天气数据 uint8_t read_jsonHistory_weather(void); +void GetwatchSaveMac(uint8_t *mac,uint8_t *mactype); ///////////////////////////自定义文件传输协议///////////////////////////// #define OTA_FILE_MSG_CMD 0x0601 #define OTA_FILE_DATA_CMD 0x0602 diff --git a/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c b/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c index 84872f223..f15e1516d 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c @@ -131,6 +131,7 @@ static void set_phone_info(bd_addr_t *addr)//保存手机信息 包含手机mac memcpy(&phone_addr,addr,sizeof(bd_addr_t)); memcpy(&disconect_addr,addr,sizeof(bd_addr_t)); } + enum{ BLE_CHARACTERISTIC_RECV_ID_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_NOTIFY|GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP|GATT_CHARACTER_PROPERTY_BIT_WRITE|GATT_CHARACTER_PROPERTY_BIT_READ, BLE_CHARACTERISTIC_SNED_SHORT_ID_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_WRITE|GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP, @@ -162,7 +163,7 @@ void br_adv_start(uint8_t sec) if(!get_br_is_pair()) { - gap_br_set_bt_scan_mode(GAP_SCAN_MODE_CONNECTABLE_GENERAL_DISCOVERABLE, sec); + //gap_br_set_bt_scan_mode(GAP_SCAN_MODE_CONNECTABLE_GENERAL_DISCOVERABLE, sec); } } @@ -313,7 +314,10 @@ void svr_ble_connstate_change_cb(unsigned short conn_id, bd_addr_t *addr, gap_bl gap_ble_pair_state_t pair_state, gap_ble_disc_reason_t disc_reason) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "svr_ble_connstate_change_cb gap_ble_conn_state_t conn_state:%d pair_state:%d disc_reason:%d\r\n",conn_state,pair_state,disc_reason); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, + "svr_ble_connstate_change_cb gap_ble_conn_state_t conn_state:%d pair_state:%d disc_reason:%d\r\n", + conn_state,pair_state,disc_reason); + g_ble_conn_id = conn_id; if (GAP_BLE_STATE_DISCONNECTED == conn_state) { // restart ble adv when disconnected @@ -342,8 +346,8 @@ void svr_ble_connstate_change_cb(unsigned short conn_id, bd_addr_t *addr, gap_bl //int ret= a2dp_snk_connect(addr); - // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "addr: ****%02x%02x%02x%02x playing_state: %x\n", - // g_bd_addr.addr[3], g_bd_addr.addr[2], g_bd_addr.addr[1], g_bd_addr.addr[0], g_bd_addr.type); /* 3 2 1 0 idx */ + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "addr: ****%02x%02x%02x%02x \n", + addr->addr[3], addr->addr[2], addr->addr[1], addr->addr[0]); /* 3 2 1 0 idx */ //WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"state(int): %x\n", ret); @@ -408,8 +412,8 @@ void svr_pair_result_cbt_cb(uint16_t conn_id, const bd_addr_t *addr, errcode_t s } - // int ret = gap_connect_remote_device(addr); - // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_connect_remote_device!!! %X\r\n",ret); + int ret = gap_connect_remote_device(addr); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_connect_remote_device!!! %X\r\n",ret); } @@ -1278,8 +1282,14 @@ static void svr_ble_mtu_exchange(uint8_t server_id, uint16_t conn_id, uint16_t m /******************* gap_ble ************************************/ void svr_gap_ble_auth_complete_callback(uint16_t conn_id, const bd_addr_t *addr, errcode_t status,ble_auth_info_evt_t* evt) { - sendParieSuccess(1,&phone_addr); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_gap_ble_auth_complete_callback %x %x %x %x %x %x\r\n",addr->addr[0],addr->addr[1],addr->addr[2],addr->addr[3],addr->addr[4],addr->addr[5]); + //sendParieSuccess(1,&phone_addr); //???? + sendParieSuccess(1,addr); + uapi_set_br_address(addr); + + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_gap_ble_auth_complete_callback %x %x %x %x %x %x\r\n", + phone_addr.addr[0],phone_addr.addr[1],phone_addr.addr[2],phone_addr.addr[3],phone_addr.addr[4],phone_addr.addr[5]); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_gap_ble_auth_complete_callback %x %x %x %x %x %x\r\n", + addr->addr[0],addr->addr[1],addr->addr[2],addr->addr[3],addr->addr[4],addr->addr[5]); } @@ -1482,8 +1492,8 @@ void custom_ble_service_start(void) AdverFlag = true; svr_ble_adv_start_param(); - - gap_br_set_bt_scan_mode(GAP_SCAN_MODE_CONNECTABLE, 0); + gap_br_set_bt_scan_mode(GAP_SCAN_MODE_CONNECTABLE_GENERAL_DISCOVERABLE, 0); + //gap_br_set_bt_scan_mode(GAP_SCAN_MODE_CONNECTABLE, 0); } @@ -1689,6 +1699,10 @@ errcode_t uapi_blesrv_service_init(void) return ERRCODE_SUCC; } +void send_pair_succ(bd_addr_t *addr) +{ + sendParieSuccess(1,addr); +} diff --git a/code/sdk/application/wearable/service/ble_service/bleservice/bleService.h b/code/sdk/application/wearable/service/ble_service/bleservice/bleService.h index a955a2f7f..8438e0476 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleService.h +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleService.h @@ -61,6 +61,9 @@ void uapi_ble_disconnect_device(void); void br_adv_start(uint8_t sec); void br_adv_stop(void); + +void send_pair_succ(bd_addr_t *addr); + #ifdef __cplusplus } #endif