蓝牙修改,根据需求采取,实时更新连接间隔,BR配对优化 1198/1
authorhcj <1224667075@qq.com>
Wed, 16 Oct 2024 12:14:35 +0000 (20:14 +0800)
committerhcj <1224667075@qq.com>
Wed, 16 Oct 2024 12:14:35 +0000 (20:14 +0800)
code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp
code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c
code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.h
code/sdk/application/wearable/service/ble_service/bleservice/bleService.c
code/sdk/application/wearable/service/ble_service/bleservice/bleService.h
code/sdk/application/wearable/service/msg_center/src/notify/debug_output_notification/debug_output_notification.cpp
code/sdk/application/wearable/service/msg_center/src/notify/makephone_notification.cpp

index 65a4977..bcee8c3 100644 (file)
@@ -802,14 +802,15 @@ void BtGapPairStatusChangedCallback(const bd_addr_t *bdAddr, int status)
         {\r
             send_pair_succ((bd_addr_t*)bdAddr);\r
             hand_watch_first_time_Paired();\r
-            svr_ble_adv_stop();\r
+            //svr_ble_adv_stop();\r
             //uapi_reconnect();\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uapi_a2dp_snk_connect");\r
-        }\r
-        if(status == GAP_PAIR_PAIRED)\r
-        {\r
-            set_br_pair();\r
+            set_br_pair(1);\r
+          \r
         }\r
+        // if(  && status == GAP_PAIR_NONE )\r
+        // {\r
+        //     set_br_pair(0);\r
+        // }\r
     }\r
 \r
    \r
@@ -1100,6 +1101,17 @@ void GapAclStateChangedCallback(const bd_addr_t *bdAddr, gap_acl_state_t state,
 \r
             uapi_set_ACL_br_address(bdAddr);\r
 \r
+            if(GAP_PAIR_PAIRED==gap_get_pair_state(bdAddr))\r
+            {\r
+                if(!get_br_is_pair())\r
+                {\r
+                        send_pair_succ((bd_addr_t*)bdAddr);\r
+                        hand_watch_first_time_Paired();\r
+                        set_br_pair(1);\r
+                }\r
+\r
+            }\r
+\r
             gap_br_set_bt_scan_mode(GAP_SCAN_MODE_NONE, 0);\r
 \r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GAP_SCAN_MODE_NONE");\r
index 9abf637..1b6a32a 100644 (file)
@@ -53,6 +53,8 @@ extern "C" {
 #define AI_TXT_BUF_MAX_LEN 1024*3 //json解析失败\r
 \r
 \r
+\r
+\r
 uint32_t packdataLen = 0;\r
 uint32_t totalDataLen = 0;\r
 uint8_t totalpack = 0;\r
@@ -107,6 +109,40 @@ static uint32_t timer_flie_flag=0;
 ble_read_data* ble_read_timer_p=NULL;\r
 \r
 \r
+//MP3文件重命名\r
+static errcode_t create_mp3_name(char* path,char*dir_path ,char* file_name)\r
+{\r
+\r
+    sprintf_s(path,256,"%s/",dir_path);\r
+    uint16_t path_len=strlen(path);\r
+\r
+\r
+    if(strstr(file_name,".mp3"))\r
+    {\r
+        //"光-陈粒.128.mp3"\r
+        printf("%s\r\n",file_name);\r
+        int len=strlen(file_name)-strlen(".mp3");\r
+        for(int i=0;i<len;i++)\r
+        {\r
+            uint8_t Uintdata=0;\r
+            char UintBUF[3]={0};\r
+            //sprintf(UintBUF,"%02X",file_name[i]);\r
+            memcpy_s((void*)&Uintdata,1,(void*)&file_name[i],1);\r
+            sprintf(UintBUF,"%02X",Uintdata);\r
+            printf("%s\r\n",UintBUF);\r
+            memcpy_s(path+path_len,2,UintBUF,2);\r
+            path_len+=2;\r
+        }\r
+        memcpy_s(path+path_len,strlen(".mp3"),".mp3",strlen(".mp3"));\r
+        return ERRCODE_SUCC;\r
+    }\r
+    else\r
+    {\r
+        sprintf_s(path,256,"%s/%s",dir_path,file_name);\r
+    }\r
+    return ERRCODE_FAIL;\r
+    \r
+}\r
 \r
 \r
 #if 1\r
@@ -349,6 +385,22 @@ errcode_t sendBleData(uint8_t *buf,uint16_t len)
     \r
 }\r
 \r
+\r
+errcode_t sendBleData_zhihui(uint8_t *buf,uint16_t len)\r
+{\r
+    errcode_t ret = ERRCODE_FAIL;\r
+    #ifdef BLE_LOG\r
+        printf("bigDataBufState:%d and  sendbigDataBufState %d\r\n",bigDataBufState,sendbigDataBufState);\r
+    #endif\r
+    //if(Bleconnect == true )\r
+    {\r
+        ret = svr_ble_bt_gatts_noyify_zhihui(buf,len);\r
+    }\r
+    return ret;\r
+    \r
+}\r
+\r
+\r
 void sendDataNow(uint8_t *buf,uint16_t len)\r
 {\r
     //if(Bleconnect == true )\r
@@ -357,19 +409,28 @@ void sendDataNow(uint8_t *buf,uint16_t len)
     }\r
 }\r
 \r
+void send_Data_Now_zh(uint8_t *buf,uint16_t len)\r
+{\r
+    {\r
+        svr_ble_bt_gatts_noyify_zhihui(buf,len);\r
+    }\r
+}\r
+\r
+\r
+\r
 void send_big_data(ble_data_type type,char *data, uint16 datalen)\r
 {\r
     // 动态分配内存空间,防止堆栈溢出\r
     uint8_t *buf =NULL;\r
     buf = ym_malloc(17 + datalen + 1); \r
-    memset_s(buf,500,0,17 + datalen + 1);\r
+    memset_s(buf,ble_nus_max_data_len,0,17 + datalen + 1);\r
     if (buf == NULL && datalen!=0) {\r
         printf("内存分配失败\n");\r
         return;\r
     }\r
     if(type.Packet_id>=2)\r
     {\r
-        msleep(10);//多包数据发送增加延迟\r
+        msleep(get_ble_interval()+5);//多包数据发送增加延迟\r
     }\r
     // 设置消息头部信息\r
     buf[0] = 0x72; // 消息头\r
@@ -398,8 +459,15 @@ void send_big_data(ble_data_type type,char *data, uint16 datalen)
     printf("end\r\n");\r
 \r
     // 根据标志位选择发送数据的方式\r
-  \r
+  if(type.type==6)\r
+    {\r
+        send_Data_Now_zh(buf, 17 + datalen + 1);\r
+    }\r
+    else\r
+    {\r
     sendDataNow(buf, 17 + datalen + 1); // 判断是否在传输或接收多包数据\r
+}\r
+   \r
     \r
 \r
     ym_free(buf); // 释放内存空间\r
@@ -538,7 +606,7 @@ errcode_t UnbindSucessCmd(uint8_t flag)//发送解绑指令,解绑界面调用
     value[17] = flag;\r
     value[18] = Calculate_CRC(value,18);\r
     sendok =  sendBleData(value,19);\r
-    msleep(50);//增加延时,确保可以成功发送解除绑定\r
+    msleep(3*get_ble_interval());//增加延时,确保可以成功发送解除绑定\r
 \r
     bd_addr_t addr={0};\r
     get_phone_addr(&addr,g_ble_conn_id);\r
@@ -1450,7 +1518,7 @@ void SetUTCtime(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData,uint8
         sendBuf[17] = set_ok;\r
         sendBuf[18] = Calculate_CRC(sendBuf,18);\r
         sendBleData(sendBuf,19);\r
-        uapi_ble_connect_param_update(50);\r
+       \r
     }\r
        else\r
        {\r
@@ -5308,10 +5376,8 @@ static void GetAiRecordCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *tota
                 ble_data_type type_={0x01,0x34,file_size,pack,pack_id};\r
                 send_big_data(type_,data,read_size);\r
             }\r
-\r
-            //send_big_data(1,data,read_size,file_size,pack_id,pack,0x34,1);\r
             pack_id++;\r
-            msleep(SEND_AIVOICE_PACKAGE_DELAY);\r
+         \r
 \r
         } while (read_size==num);\r
         free(data);\r
@@ -5435,6 +5501,9 @@ static void GetSynDataEndCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *to
         value[17] = 1;//\r
         value[18] = Calculate_CRC(value,18);\r
         sendBleData(value,19);\r
+\r
+        uapi_ble_connect_param_update(BLE_CONNECT_INTERVAL_SLOW);\r
+        \r
     }else\r
     {\r
         value[17] = 0;\r
@@ -5526,6 +5595,9 @@ static void synEndDataCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *total
         value[17] = 1;\r
         value[18] = Calculate_CRC(value,18);\r
         sendBleData(value,19);\r
+\r
+        uapi_ble_connect_param_update(BLE_CONNECT_INTERVAL_SLOW);\r
+\r
     }else\r
     {\r
         value[17] = 0;\r
@@ -6586,7 +6658,17 @@ errcode_t ble_reply_msgarr(uint8_t msg_cmdtype,uint8_t msg_cmdid,uint8_t *replyd
             memcpy_s(replybuf+sizeof(msg_header_t),replydata_len,replydata,replydata_len);            \r
             uint8_t crc_value = Calculate_CRC( replybuf, replybuflen - 1);\r
             replybuf[ replybuflen - 1 ] = crc_value ; //CRC\r
-            errcode_t ret = sendBleData(replybuf,replybuflen);\r
+            errcode_t ret=0;\r
+            if(msg_cmdtype==6)\r
+            {\r
+                ret=sendBleData_zhihui(replybuf,replybuflen);\r
+\r
+            }else\r
+            {\r
+                 ret= sendBleData(replybuf,replybuflen);\r
+            }\r
+           \r
+\r
             printf("ble_reply_msgarr cmdtype %02X cmdid %02X package %d/%d , len %d,total len %d , data[0] %02X crc %02X\n",\r
             reply_cmd_header->cmdtype,\r
             reply_cmd_header->cmdid,\r
@@ -6706,7 +6788,20 @@ errcode_t decode_ota_data(ble_read_data *buffer_handle,uint8_t *data,uint16_t da
                 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
+            }\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("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
@@ -6716,6 +6811,9 @@ errcode_t decode_ota_data(ble_read_data *buffer_handle,uint8_t *data,uint16_t da
                     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
@@ -6923,6 +7021,7 @@ errcode_t decode_ota_json(ble_read_data *buffer_handle)
         buffer_handle->file_recv_stat.received_size = 0;\r
         buffer_handle->file_recv_stat.lrcvalue = 0;\r
         buffer_handle->receive_file_flag = 1;\r
+        uapi_ble_connect_param_update(BLE_CONNECT_INTERVAL_HIGH);\r
         //进入特殊UI\r
         TRANSMIT_DATA=TRANS_OTA_TRANSMITTING;\r
         CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1);\r
@@ -6939,7 +7038,7 @@ errcode_t decode_mp3_json(ble_read_data *buffer_handle)
 {\r
     uint8_t *data = buffer_handle->data+sizeof(msg_header_t);\r
     uint16_t datalen = buffer_handle->totalDataLen;\r
-    printf("ota_json_file_save %s\n",data);\r
+    printf("MP3_file_save %s\n",data);\r
 \r
     /**\r
         MP3文件信息格式\r
@@ -6994,6 +7093,7 @@ errcode_t decode_mp3_json(ble_read_data *buffer_handle)
         buffer_handle->file_recv_stat.received_size = 0;\r
         buffer_handle->file_recv_stat.lrcvalue = 0;\r
         buffer_handle->receive_file_flag = 1;\r
+        uapi_ble_connect_param_update(BLE_CONNECT_INTERVAL_HIGH);\r
         TRANSMIT_DATA=TRANS_MP3_TRANSMITTING;\r
         CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1);\r
 \r
@@ -7159,6 +7259,7 @@ errcode_t decode_single_dial_info(ble_read_data *buffer_handle)
     buffer_handle->file_recv_stat.received_size = 0;\r
     buffer_handle->file_recv_stat.lrcvalue = 0;\r
     buffer_handle->receive_file_flag = 1;\r
+    uapi_ble_connect_param_update(BLE_CONNECT_INTERVAL_HIGH);\r
 \r
     return ERRCODE_SUCC;\r
 \r
@@ -7292,7 +7393,7 @@ bool Read_tar_file_buf_send_Data(uint16_t pack_size,uint8_t id)
 \r
         //send_big_data(1,data,read_size,file_size,pack_id,pack,id,5);\r
         pack_id++;\r
-        msleep(50);\r
+       \r
     } while (read_size==pack_size);\r
     free(data);\r
     fclose(fp);\r
@@ -7323,9 +7424,123 @@ bool read_dir_send_json()
     }\r
 }\r
 \r
+void decode_file_checksum_2AE6(ble_read_data *buffer_handle)\r
+{\r
+    uapi_ble_connect_param_update(BLE_CONNECT_INTERVAL_SLOW);\r
+\r
+    uint8_t msg_crc = get_crc_from_lrc(buffer_handle->lrcvalue);\r
+    if ((msg_crc == buffer_handle->crcvalue) \r
+    || (buffer_handle->cmd_header.direction == MSG_DIRECTION_RECV_ANDROID ))\r
+    {\r
+        uint8_t file_crc = get_crc_from_lrc(buffer_handle->file_recv_stat.lrcvalue);\r
+        uint8_t crc_recv = buffer_handle->data[sizeof(msg_header_t)];\r
+#if 1\r
+        if ((file_crc == crc_recv) ||\r
+            (buffer_handle->cmd_header.direction == MSG_DIRECTION_RECV_ANDROID))\r
+#else\r
+        if (file_crc == crc_recv) \r
+#endif\r
+        {\r
+            ble_reply_cmd(FILE_CHECKSUM_RECV_CMD_ZHIHUI,1);\r
+            switch(buffer_handle->file_recv_stat.file_type)\r
+            {\r
+                case 1: //ota\r
+                    do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_TYPE_STARTOTA,NULL,0);\r
+                   \r
+                    TRANSMIT_DATA=TRANS_OTA_SUCC;\r
+                    CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1);\r
+                    \r
+\r
+                    break;\r
+                case 2://mp3\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_mp3_list_update();\r
+\r
+                    break;\r
+                case 3://dial\r
+                    //TODO: 设置成当前下载的表盘\r
+                    if (install_dial() == ERRCODE_SUCC)\r
+                    {\r
+                        //ble_set_dial_by_id(ble_dial_uid);\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
+                        }\r
+                        \r
+\r
+\r
+                      //  ble_reply_cmd(GET_TRANS_END_CMD,1);\r
+                        \r
+                    }\r
+                    else\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
+\r
+                    }\r
+                    break;\r
+                default:\r
+                    break;\r
+            }\r
+        }else{\r
+            ble_reply_cmd(FILE_CHECKSUM_RECV_CMD_ZHIHUI,2);\r
+            switch (buffer_handle->file_recv_stat.file_type)\r
+            {\r
+             case 1: //ota\r
+                    TRANSMIT_DATA=TRANS_OTA_FAIL;\r
+                    CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1);\r
+                    break;\r
+            case 2://mp3\r
+                    TRANSMIT_DATA=TRANS_MP3_FAIL;\r
+                    CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1);\r
+\r
+                    break;\r
+            case 3://dial\r
+                    TRANSMIT_DATA= TRANS_DIAL_FAIL;\r
+                    CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1);\r
+        \r
+                    break;\r
+                default:\r
+                    break;\r
+            }\r
+\r
+        }\r
+    }else{\r
+        ble_reply_cmd(FILE_CHECKSUM_RECV_CMD_ZHIHUI,0);\r
+        switch (buffer_handle->file_recv_stat.file_type)\r
+        {\r
+            case 1: //ota\r
+                TRANSMIT_DATA=TRANS_OTA_FAIL;\r
+                CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1);\r
+                break;\r
+        case 2://mp3\r
+                TRANSMIT_DATA=TRANS_MP3_FAIL;\r
+                CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1);\r
+\r
+                break;\r
+        case 3://dial\r
+                TRANSMIT_DATA= TRANS_DIAL_FAIL;\r
+                CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1);\r
+                break;\r
+            default:\r
+                break;\r
+        }\r
+    }\r
+    buffer_handle->file_recv_stat.recv_file_stat=0; \r
+}\r
 \r
 void decode_file_checksum(ble_read_data *buffer_handle)\r
 {\r
+    uapi_ble_connect_param_update(BLE_CONNECT_INTERVAL_SLOW);\r
 \r
     uint8_t msg_crc = get_crc_from_lrc(buffer_handle->lrcvalue);\r
     if ((msg_crc == buffer_handle->crcvalue) \r
@@ -7615,11 +7830,9 @@ void type2AE6Data(ble_read_data *buffer_handle,uint8_t *cmd_buf ,uint8_t *data,u
         //     }               \r
         // }\r
 \r
-        case OTA_FILE_SUCC_CMD :\r
-        {\r
-            decode_file_checksum(buffer_handle);\r
+        case FILE_CHECKSUM_RECV_CMD_ZHIHUI :\r
+            decode_file_checksum_2AE6(buffer_handle);\r
             break;\r
-        }\r
             \r
         case OTA_FILE_FAIL_CMD :\r
             break;\r
@@ -7763,40 +7976,7 @@ static errcode_t check_package_same(uint8_t* lastdata,uint8_t *newdata , uint16_
         return ERRCODE_FAIL;\r
     }\r
 }\r
-//MP3文件重命名\r
-static errcode_t create_mp3_name(char* path,char*dir_path ,char* file_name)\r
-{\r
-\r
-    sprintf_s(path,256,"%s/",dir_path);\r
-    uint16_t path_len=strlen(path);\r
 \r
-\r
-    if(strstr(file_name,".mp3"))\r
-    {\r
-        //"光-陈粒.128.mp3"\r
-        printf("%s\r\n",file_name);\r
-        int len=strlen(file_name)-strlen(".mp3");\r
-        for(int i=0;i<len;i++)\r
-        {\r
-            uint8_t Uintdata=0;\r
-            char UintBUF[3]={0};\r
-            //sprintf(UintBUF,"%02X",file_name[i]);\r
-            memcpy_s((void*)&Uintdata,1,(void*)&file_name[i],1);\r
-            sprintf(UintBUF,"%02X",Uintdata);\r
-            printf("%s\r\n",UintBUF);\r
-            memcpy_s(path+path_len,2,UintBUF,2);\r
-            path_len+=2;\r
-        }\r
-        memcpy_s(path+path_len,strlen(".mp3"),".mp3",strlen(".mp3"));\r
-        return ERRCODE_SUCC;\r
-    }\r
-    else\r
-    {\r
-        sprintf_s(path,256,"%s/%s",dir_path,file_name);\r
-    }\r
-    return ERRCODE_FAIL;\r
-    \r
-}\r
 errcode_t handle_recv_file(ble_read_data *buffer_handle,uint8_t *data, uint16_t event_size)\r
 {\r
 \r
index 926d6b0..941a103 100644 (file)
@@ -841,13 +841,15 @@ void reply_APP_OpenSportModeCmd(bool falg);
 ///////////////////////////自定义文件传输协议/////////////////////////////
 #define OTA_FILE_MSG_CMD  0x0601 
 #define OTA_FILE_DATA_CMD 0x0602
+
 #define OTA_FILE_SUCC_CMD 0x0603 
+
 #define OTA_FILE_FAIL_CMD 0x0604
 ///////////// 
 #define DIAL_COLLECT_FILE_CMD 0x0605
 #define DIAL_SINGEL_FILE_CMD 0x0606 
 #define MP3_FILE_CMD 0x0607
-
+#define FILE_CHECKSUM_RECV_CMD_ZHIHUI 0x0608
 #ifdef __cplusplus
 }
 #endif
index d034565..fcb68fe 100644 (file)
@@ -55,6 +55,7 @@ extern "C" {
 /* Gatt Characteristic UUID */\r
 //自定义 ota 文件传输特征值\r
 #define BLE_ZHIHUI_OTA_ID 0x2ae6\r
+#define BLE_ZHIHUI_OTA_REPLY_ID 0x2ae7\r
 \r
 #define BLE_CHARACTERISTIC_RECV_ID 0x2ae5\r
 #define BLE_CHARACTERISTIC_SNED_SHORT_ID 0x2ae3\r
@@ -82,6 +83,8 @@ extern "C" {
 #define BLE_DEFAULT_NAME_LEN 32\r
 #define BLE_MAC_MAX_LEN 6 //蓝牙mac地址最大个数6个\r
 \r
+\r
+\r
 #define SWAP_U16(x) ((uint16_t)((((uint16_t)(x) & (uint16_t)0x00ffU) << 8) | \\r
                     (((uint16_t)(x) & (uint16_t)0xff00U) >> 8)))\r
 \r
@@ -128,6 +131,8 @@ uint16_t data2ae2Cmd = 0;//read
 uint16_t data2ae1Cmd = 0;//安卓消息来电\r
 uint16_t data2ae0Cmd = 0;//OTA\r
 uint16_t data2ae6Cmd = 0;//自定义OTA \r
+uint16_t data2ae7Cmd = 0;//自定义OTA \r
+\r
 \r
 #define handle_max_len 40\r
 \r
@@ -218,6 +223,8 @@ enum{
     BLE_CHARACTERISTIC_SNED_ANDRIOD_ID_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_WRITE|GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP,\r
     BLE_CHARACTERISTIC_READ_BATTERY_ID_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_READ|GATT_CHARACTER_PROPERTY_BIT_NOTIFY,\r
     BLE_ZHIHUI_OTA_ID_ID_PROPERTIES=GATT_CHARACTER_PROPERTY_BIT_WRITE|GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP,\r
+\r
+    BLE_ZHIHUI_OTA_REPLY_ID_PROPERTIES=GATT_CHARACTER_PROPERTY_BIT_NOTIFY|GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP|GATT_CHARACTER_PROPERTY_BIT_WRITE|GATT_CHARACTER_PROPERTY_BIT_READ,\r
 };\r
 static uint8_t ble_adv_falg = 0;\r
 static bool g_custom_ble_init_flag = false;\r
@@ -508,7 +515,7 @@ void uapi_ble_connect_param_update(uint16_t data)
     conn_param.slave_latency = 6;    /* param 3: slave_latency */\r
     conn_param.timeout_multiplier = 700;    /* param 4: timeout_multiplier */\r
     int ret = gap_ble_connect_param_update(&conn_param);\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"gap ble update connection parameters ret: %X\n", ret);   \r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"gap ble update connection parameters %d ret: %X\n",data,ret);   \r
 }\r
 void svr_pair_result_cbt_cb(uint16_t conn_id, const bd_addr_t *addr, errcode_t status)\r
 {\r
@@ -564,9 +571,19 @@ void svr_pair_result_cbt_cb(uint16_t conn_id, const bd_addr_t *addr, errcode_t s
     //                                  @else   延迟周期,单位slot @endif */\r
     // uint16_t timeout;           /*!< @if Eng timeout\r
     //                                  @else   超时时间,单位10ms @endif */\r
+//发送连续数据参考此数值进行速度调整\r
+//2*slot\r
+static uint16_t ble_interval=50; \r
+\r
+uint16_t get_ble_interval(void)\r
+{\r
+    return ble_interval;\r
+}\r
+\r
 void srv_gap_ble_connect_param_update_callback(uint16_t conn_id, errcode_t status,\r
     const gap_ble_conn_param_update_t *param)\r
 {\r
+        ble_interval=param->interval;\r
       WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, \r
     "conn_id %d status %d gap_ble_conn_param_update_t interval %d latency%d  timeout %d ",conn_id,status,param->interval,param->latency,param->timeout);\r
 }\r
@@ -819,6 +836,46 @@ static void srv_ble_add_chart_decr_recv_cmd(uint8_t server_id,uint16_t srv_handl
     }\r
 }\r
 \r
+\r
+static void srv_ble_add_ZHIHUIOTA_REPLY_chart_decr_recv_cmd(uint8_t server_id,uint16_t srv_handle)\r
+{\r
+    errcode_t ret = 0;\r
+    static uint8_t battery_point_val[] = {0x00, 0x00};\r
+    gatts_add_chara_info_t character;\r
+    gatts_add_desc_info_t descriptor;\r
+\r
+    bts_data_to_uuid_len2(BLE_ZHIHUI_OTA_REPLY_ID, &character.chara_uuid);\r
+    character.permissions = GATT_ATTRIBUTE_PERMISSION_READ | GATT_ATTRIBUTE_PERMISSION_WRITE;\r
+    character.properties = BLE_ZHIHUI_OTA_REPLY_ID_PROPERTIES;\r
+    character.value_len = (uint16_t)sizeof(battery_point_val);\r
+    character.value = battery_point_val;\r
+\r
+    ret = gatts_add_characteristic(server_id, srv_handle, &character);\r
+    if (ret != ERRCODE_SUCC) {\r
+        // ALIPAY_PRINT_ERR(0, "gatts_add_characteristic fail, ret:%u.\r\n", ret);\r
+    }\r
+    bts_data_to_uuid_len2(BLE_UUID_CLIENT_CHARACTERISTIC_CONF, &descriptor.desc_uuid);\r
+    descriptor.permissions =  GATT_ATTRIBUTE_PERMISSION_WRITE;\r
+    descriptor.value_len = (uint16_t)sizeof(battery_point_val);\r
+    descriptor.value = battery_point_val;\r
+    \r
+    ret = gatts_add_descriptor(server_id, srv_handle, &descriptor);\r
+    if (ret != ERRCODE_SUCC) {\r
+        // ALIPAY_PRINT_ERR(0, "gatts_add_descriptor fail, ret:%u.\r\n", ret);\r
+    }\r
+\r
+    bts_data_to_uuid_len2(BLE_UUID_USER_CHARACTERISTIC_CONF, &descriptor.desc_uuid);\r
+    descriptor.permissions =  GATT_ATTRIBUTE_PERMISSION_WRITE | GATT_ATTRIBUTE_PERMISSION_READ;;\r
+    descriptor.value_len = (uint16_t)sizeof(battery_point_val);\r
+    descriptor.value = battery_point_val;\r
+    \r
+    ret = gatts_add_descriptor(server_id, srv_handle, &descriptor);\r
+    if (ret != ERRCODE_SUCC) {\r
+        // ALIPAY_PRINT_ERR(0, "gatts_add_descriptor fail, ret:%u.\r\n", ret);\r
+    }\r
+}\r
+\r
+\r
 static uint8_t g_alipay_character_buf[256] = {0};\r
 static void alipay_add_chart_decr_recv_cmd1(uint8_t server_id,uint16_t srv_handle)\r
 {\r
@@ -974,7 +1031,7 @@ static void svr_ble_bt_gatts_service_add_cb(uint8_t server_id, bt_uuid_t *uuid,
         srv_ble_add_chart_decr_long_cmd(server_id,srv_handle);\r
         srv_ble_add_chart_decr_recv_cmd(server_id,srv_handle);\r
         srv_ble_add_chart_decr_Zhihui_ota(server_id,srv_handle);\r
-\r
+srv_ble_add_ZHIHUIOTA_REPLY_chart_decr_recv_cmd(server_id,srv_handle);\r
         gatts_start_service(server_id, srv_handle);\r
     }\r
     if (ble_gatts_cmp_uuid(uuid, &hid_service_uuid) == true){\r
@@ -1026,6 +1083,7 @@ static void svr_ble_bt_gatts_characteristic_add_cb(uint8_t server_id, bt_uuid_t
 \r
     bt_uuid_t chara_uuid_data_2ae5 = {0};\r
     bts_data_to_uuid_len2(BLE_CHARACTERISTIC_RECV_ID, &chara_uuid_data_2ae5);\r
+\r
     bt_uuid_t chara_uuid_data_2ae3  = {0};\r
     bts_data_to_uuid_len2(BLE_CHARACTERISTIC_SNED_SHORT_ID, &chara_uuid_data_2ae3);\r
     bt_uuid_t chara_uuid_data_2ae4 = {0};\r
@@ -1041,6 +1099,19 @@ static void svr_ble_bt_gatts_characteristic_add_cb(uint8_t server_id, bt_uuid_t
     bt_uuid_t hid_report_uuid_2ae6 = {0};\r
     bts_data_to_uuid_len2(BLE_ZHIHUI_OTA_ID, &hid_report_uuid_2ae6);\r
 \r
+bt_uuid_t chara_uuid_data_2ae7 = {0};\r
+    bts_data_to_uuid_len2(BLE_ZHIHUI_OTA_REPLY_ID, &chara_uuid_data_2ae7);\r
+\r
+    if(ble_gatts_cmp_uuid(uuid, &chara_uuid_data_2ae7))\r
+    {\r
+        if(data2ae7Cmd==0)\r
+        {\r
+            data2ae7Cmd=result->value_handle;\r
+        }\r
+        Is_value_handle[handle_num]=result->value_handle;\r
+        handle_num++;\r
+    }\r
+\r
 \r
     if(ble_gatts_cmp_uuid(uuid, &hid_report_uuid_2ae6))\r
     {\r
@@ -1224,16 +1295,37 @@ errcode_t svr_ble_bt_gatts_noyify(uint8_t *data, uint16_t data_len)//这里是
 \r
             if(ret!=ERRCODE_SUCC)\r
             {\r
-                msleep(200);\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gatts_notify_indicate ret:0x%x. serverid:%u,conn_id:%u,handle:%u.data_len:%d", ret, g_ble_server_id,\r
+                g_ble_conn_id, g_ble_server_handle,data_len);\r
+                ble_set_ai_Answer_str("BLE NOTIF ERROR",5);\r
+            }\r
+       \r
+        }\r
+    }\r
+    return ret;  \r
+}\r
+\r
+\r
+errcode_t svr_ble_bt_gatts_noyify_zhihui(uint8_t *data, uint16_t data_len)//这里是设备数据上报给app手机端\r
+{\r
+    gatts_ntf_ind_t data_info;\r
+    data_info.attr_handle = data2ae7Cmd;\r
+    data_info.value = data;\r
+    data_info.value_len = data_len;\r
+    errcode_t ret = gatts_notify_indicate(g_ble_server_id, g_ble_conn_id, &data_info);\r
+    if(ret!=ERRCODE_SUCC)\r
+    {\r
+        msleep(50);\r
                 ret=gatts_notify_indicate(g_ble_server_id, g_ble_conn_id, &data_info);\r
                 if(ret!=ERRCODE_SUCC)\r
                 {\r
+            msleep(100);\r
+            ret=gatts_notify_indicate(g_ble_server_id, g_ble_conn_id, &data_info);\r
+\r
+            if(ret!=ERRCODE_SUCC)\r
                     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gatts_notify_indicate ret:0x%x. serverid:%u,conn_id:%u,handle:%u.data_len:%d", ret, g_ble_server_id,\r
                     g_ble_conn_id, g_ble_server_handle,data_len);\r
-                    ble_set_ai_Answer_str("BLE NOTIF ERROR",5);\r
-                }\r
-            }\r
-        }\r
+                            }\r
     }\r
     return ret;  \r
 }\r
@@ -1288,6 +1380,54 @@ errcode_t svr_ble_read_data_value_updata_noyify(void)//2ae2
     return ret;  \r
 }\r
 \r
+errcode_t svr_ble_read_data_value_updata_noyify_test(uint8_t test)//2ae2\r
+{\r
+    gatts_ntf_ind_t data_info;\r
+    data_info.attr_handle = data2ae2Cmd;\r
+    static uint8_t battery_point_val[20] = {0};\r
+\r
+    battery_point_val[0] =test;//power ;//power;//电量90\r
+\r
+    uint16_t dial = ble_get_dial_id();\r
+    memcpy_s(&battery_point_val[1],2,&dial,2);\r
+\r
+    uint8_t _major,_mid,_minor;\r
+    uapi_get_fw_version(&_major,&_mid,&_minor);\r
+\r
+    battery_point_val[3] = _major;//固件版本号\r
+    battery_point_val[4] = _mid;\r
+    battery_point_val[5] = _minor;\r
+\r
+    bd_addr_t addr_info;\r
+    errcode_t ret = gap_ble_get_local_addr(&addr_info);\r
+    battery_point_val[6] = addr_info.addr[5];\r
+    battery_point_val[7] = addr_info.addr[4];\r
+    battery_point_val[8] = addr_info.addr[3];\r
+    battery_point_val[9] = addr_info.addr[2];\r
+    battery_point_val[10] = addr_info.addr[1];\r
+    battery_point_val[11] = addr_info.addr[0];\r
+\r
+    battery_point_val[12] = 0;//消息推送开关 默认是关闭 0\r
+    battery_point_val[13] = 0;//多媒体开关\r
+    battery_point_val[14] = 5;//客户编号\r
+    battery_point_val[15] = 5;//产品编号\r
+\r
+    battery_point_val[16] = 0;//硬件版本号\r
+    battery_point_val[17] = 1;\r
+\r
+    battery_point_val[18] = 0;//ble版本号\r
+    battery_point_val[19] = 1;\r
+\r
+\r
+    data_info.value = battery_point_val;\r
+    data_info.value_len = 20;\r
+     ret = gatts_notify_indicate(g_ble_server_id, g_ble_conn_id, &data_info);\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "gatts_notify_indicate ret:0x%x. serverid:%u,conn_id:%u,handle:%u.data_len:%d", ret, g_ble_server_id,\r
+        g_ble_conn_id, g_ble_server_handle,20);\r
+    \r
+    return ret;  \r
+}\r
+\r
 static uint8_t flag=1;\r
 static void svr_ble_bt_gatts_req_read_cb(uint8_t server_id, uint16_t conn_id, gatts_req_read_cb_t *read_cb_para,\r
     errcode_t status)\r
index 893a5c1..2b3705b 100644 (file)
@@ -9,6 +9,11 @@ extern "C" {
 #include "stdbool.h"
 #include "bts_def.h"
 #include "errcode.h"
+
+#define BLE_CONNECT_INTERVAL_SLOW 50
+#define BLE_CONNECT_INTERVAL_HIGH 10
+
+
 extern uint16_t g_ble_conn_id;
 extern uint16_t g_ble_server_id;
 extern bd_addr_t disconect_addr;//断开连接地址不需要反序
@@ -79,6 +84,13 @@ void uapi_ble_connect_param_update(uint16_t data);
 
 bool get_Alipay_ble_connect(void);
 
+errcode_t svr_ble_read_data_value_updata_noyify_test(uint8_t test);
+
+errcode_t svr_ble_bt_gatts_noyify_zhihui(uint8_t *data, uint16_t data_len);
+
+uint16_t get_ble_interval(void);
+
+
 
 #ifdef __cplusplus
 }
index 0a7c191..e13b3f4 100644 (file)
@@ -119,6 +119,7 @@ namespace OHOS
         char *buf_btaddr = (char *)malloc(32);
         if (buf_btaddr == NULL)
             return "";
+        memset_s(buf_btaddr,32,0,32);
         uint8_t ret = uapi_get_btaddr((uint8_t *)buf_btaddr, &len);
         std::string str = std::string(buf_btaddr);
         printf("%s | %s \n", buf_btaddr, str.c_str());
@@ -130,10 +131,13 @@ namespace OHOS
     {
         uint32_t len = 64;
         char *buf_advdata = (char *)malloc(len);
+
         if (buf_advdata == NULL)
             return "";
+        memset_s(buf_advdata,64,0,64);
         get_adv_data(buf_advdata);
 
+
         std::string str = std::string(buf_advdata);
         printf("%s | %s \n", buf_advdata, str.c_str());
 
index c4e6446..704f39a 100755 (executable)
@@ -495,6 +495,8 @@ static void DialingHandle(void)
     CallerLogModel::GetInstance()->SetDialingStatus("正在拨号");
     CallerLogModel::GetInstance()->SetMakePhoneStatus(true);
 
+    InitCallingTimer();
+    
     StartCallTimer(CallTimerType::NOTIFY_PHONE_DIAL_DISPLAY, (int32_t)NOTIFY_ONE_SECOND);