经典蓝牙状态同步,修复a2dp snk 不能工作等问题。
authorSnickerSun <snickersun@163.com>
Fri, 10 May 2024 04:07:00 +0000 (12:07 +0800)
committerSnickerSun <snickersun@163.com>
Fri, 10 May 2024 04:07:00 +0000 (12:07 +0800)
code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/BluetoothModel.h
code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp
code/sdk/application/wearable/fd230app/nativeui/classicbluetooth/src/BluetoothServiceOptionsPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/config/include/ConfigModel.h
code/sdk/application/wearable/fd230app/nativeui/config/include/ConfigModelC.h
code/sdk/application/wearable/fd230app/nativeui/config/src/ConfigModel.cpp
code/sdk/application/wearable/service/ble_service/bleservice/bleService.c
code/sdk/drivers/peripheral/utils/custom_utils.c
code/sdk/drivers/peripheral/utils/custom_utils.h

index 4a45677..6e0539d 100644 (file)
@@ -127,6 +127,7 @@ void BtRemoteNameChangedCallback(const bd_addr_t *bdAddr, const unsigned char *d
 void BtIsAcceptConnOnSafeModeCallback(const bd_addr_t *bd_addr, bool *res);\r
 void BtInitCallBacks(void);\r
 void BtInitCallBacksEx(void);\r
+void BtA2dpInit(void);\r
 void BtInitGatts(void);\r
 void BtInitSpp(void);\r
 void BleAdvStart(void);\r
index 1af4453..c415098 100644 (file)
@@ -1173,8 +1173,17 @@ static a2dp_snk_callbacks_t g_a2dp_snk_callbacks = {
     BtA2dpSnkPlayingStateChangedCb,\r
     BtA2dpSnkConfigChangedCb\r
 };\r
-\r
-void BtInitCallBacks()\r
+void BtA2dpInit(void)\r
+{\r
+    /* a2dp source */\r
+    g_a2dpSrcCallbacks.connectstate_changed_cb = A2dpSrcConnectstateChanged;\r
+    g_a2dpSrcCallbacks.configuration_changed_cb = A2dpSrcConfigureChanged;\r
+    g_a2dpSrcCallbacks.playing_state_changed_cb = A2dpSrcPlayingStateChanged;\r
+    a2dp_src_register_callbacks(&g_a2dpSrcCallbacks);\r
+    /* a2dp sink */\r
+    a2dp_snk_register_callbacks(&g_a2dp_snk_callbacks);\r
+}\r
+void BtInitCallBacks(void)\r
 {\r
     g_btGapCallBacks.discovery_result_callback = BtGapDiscoveryResultCallback;\r
     g_btGapCallBacks.discovery_state_changed_callback = BtGapDiscoveryStateChangedCallback;\r
@@ -1187,12 +1196,7 @@ void BtInitCallBacks()
     g_btGapCallBacks.pair_confiremed_callback = BtGapPairConfirmedCallback;\r
     gap_register_callbacks(&g_btGapCallBacks);\r
 \r
-    g_a2dpSrcCallbacks.connectstate_changed_cb = A2dpSrcConnectstateChanged;\r
-    g_a2dpSrcCallbacks.configuration_changed_cb = A2dpSrcConfigureChanged;\r
-    g_a2dpSrcCallbacks.playing_state_changed_cb = A2dpSrcPlayingStateChanged;\r
-    a2dp_src_register_callbacks(&g_a2dpSrcCallbacks);\r
-    /* a2dp sink */\r
-    a2dp_snk_register_callbacks(&g_a2dp_snk_callbacks);\r
+   \r
 }\r
 \r
 void BtInitCallBacksEx()\r
index 19adeb5..e7012e0 100644 (file)
@@ -82,10 +82,12 @@ namespace OHOS
                     if (it->second == "HFP")
                     {
                         ConfigModel::GetInstance()->SetHFPState(true);
+                        enable_hfp_service(true);
                     }
                     else if (it->second == "A2DP")
                     {
                         ConfigModel::GetInstance()->SetA2DPState(true);
+                        enable_a2dp_service(true);
                     }
                 }
                 else
@@ -94,10 +96,12 @@ namespace OHOS
                     if (it->second == "HFP")
                     {
                         ConfigModel::GetInstance()->SetHFPState(false);
+                        enable_hfp_service(false);
                     }
                     else if (it->second == "A2DP")
                     {
                         ConfigModel::GetInstance()->SetA2DPState(false);
+                        enable_a2dp_service(false);
                     }
                 }
             }
index b0d9c40..c6e2d3f 100644 (file)
@@ -68,6 +68,7 @@ namespace OHOS
             CONFIGMODEL_ITEM_MOTIONRECOGNITION,//运动识别
             CONFIGMODEL_ITEM_HFP, //通话蓝牙开关
             CONFIGMODEL_ITEM_A2DP,//媒体蓝牙开关
+            CONFIGMODEL_ITEM_SPP,//SPP蓝牙开关
             CONFIGMODEL_ITEM_TRANING_FREQ,//训练实时数据上传频率
             CONFIGMODEL_ITEM_TRANING_AUTO,//开启关闭自动获取实时数据
             CONFIGMODEL_ITEM_TRAINING_HEART_MAX,//训练最高心率
@@ -230,6 +231,7 @@ namespace OHOS
             {ConfigDataType::DATATYPE_BOOL,    "MotionRecognition",        "false" },// CONFIGMODEL_ITEM_MOTIONRECOGNITION
             {ConfigDataType::DATATYPE_BOOL,    "HFP",                      "false" },// CONFIGMODEL_ITEM_HFP
             {ConfigDataType::DATATYPE_BOOL,    "A2DP",                     "false" },// CONFIGMODEL_ITEM_A2DP
+            {ConfigDataType::DATATYPE_BOOL,    "SPP",                      "true" },// CONFIGMODEL_ITEM_SPP,//SPP蓝牙开关
             {ConfigDataType::DATATYPE_INT,     "traningfreq",              "10"     },// CONFIGMODEL_ITEM_TRANING_FREQ //训练实时数据上传频率//单位秒
             {ConfigDataType::DATATYPE_BOOL,    "traningauto",              "0"      },//CONFIGMODEL_ITEM_TRANING_AUTO,//开启关闭自动获取实时数据
             {ConfigDataType::DATATYPE_INT,     "traningheart",             "190"  },//CONFIGMODEL_ITEM_TRAINING_HEART_MAX//训练最高心率
index 4041c76..caa10bd 100644 (file)
@@ -73,6 +73,14 @@ void initialize4GCapability(void);
  * @brief 初始化运动识别开关 
  */
 void initializeMotionRecognition(void);
+
+
+bool get_SPP_switch(void);
+
+bool get_HFP_switch(void);
+
+bool get_A2DP_switch(void);
+
 #ifdef __cplusplus
 #if __cplusplus
 }
index 57cf3e3..293af73 100644 (file)
@@ -919,6 +919,28 @@ void initializeMotionRecognition(void)
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "initializeMotionRecognition");
     bool isopen = OHOS::ConfigModel::GetInstance()->GetMotionRecognition();
 }
+
+
+bool get_SPP_switch(void)
+{
+    bool isopen = OHOS::ConfigModel::GetInstance()->get_configData_bool(OHOS::ConfigModel::CONFIGMODEL_ITEM_SPP);
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "getSPPSwitch %d",isopen);
+    return isopen;
+}
+
+bool get_HFP_switch(void)
+{
+    bool isopen = OHOS::ConfigModel::GetInstance()->GetHFPState();
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "getHFPSwitch %d",isopen);
+    return isopen;
+}
+
+bool get_A2DP_switch(void)
+{
+    bool isopen = OHOS::ConfigModel::GetInstance()->GetA2DPState();
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "getA2DPSwitch %d",isopen);
+    return isopen;
+}
 #ifdef __cplusplus
 #if __cplusplus
 }
index e735498..ef167b7 100644 (file)
@@ -76,7 +76,7 @@ static uint8_t exit_alipay_gui = 0;
 static gap_ble_callbacks_t g_ble_gapble_cbs;\r
 static gatts_callbacks_t g_ble_gatts_cbs;\r
 static gap_call_backs_t g_btGapCallBacks;\r
-static a2dp_src_callbacks_t g_a2dpSrcCallbacks;\r
+\r
 \r
 static bool g_ble_adv_start_state = false;\r
 uint16_t g_ble_server_id = 1;\r
@@ -100,8 +100,6 @@ uint8_t Bleconnect = 0;//蓝牙默认是断开 0 1 为连接
 uint8_t devpair_state = 0;//设备配对状态 0 未配对 1已配对成功\r
 uint8_t bond_flag = 0;//绑定标识\r
 uint16_t ble_nus_max_data_len = SDK_BLE_MTU_MIN - 3; \r
-#define A2DP_STREAM_ACCEPT_TIMER_PERIOD 500\r
-static osal_timer g_a2dp_stream_accept_timer = {NULL, NULL, 0, 0};\r
 \r
 uint16_t data2ae3Cmd = 0;//2ae3短指令特征值\r
 uint16_t data2ae4Cmd = 0;\r
@@ -1020,287 +1018,6 @@ static void svr_gap_ble_auth_complete_callback(uint16_t conn_id, const bd_addr_t
     sendParieSuccess(1,&phone_addr);\r
     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]);\r
 }\r
-// 回调: gap_read_remote_rssi_value 接口的数据上报\r
-static void svr_gap_ble_ReadRemoteRssiEventCallback(const bd_addr_t *bdAddr, int rssi, int status)\r
-{\r
-    UNUSED(status);\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtGapReadRemoteRssiEventCallback addr: %02x%02x%02x%02x%02x%02x",\r
-        bdAddr->addr[5], bdAddr->addr[4], bdAddr->addr[3], /* mac下标 0 1 2 3 4 5 */\r
-        bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0]); /* mac下标 0 1 2 3 4 5 */\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "bt BtGapReadRemoteRssiEventCallback SetSortCaseRssi: %d status: %d", rssi, status);\r
-}\r
-\r
-// 回调:发现状态变化上报/扫描结束\r
-static void svr_gap_ble_DiscoveryStateChangedCallback(int status)\r
-{\r
-    UNUSED(status);\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "bt BtGapDiscoveryStateChangedCallback %d", status);\r
-}\r
-\r
-\r
-static void svr_gap_ble_PairStatusChangedCallback(const bd_addr_t *bdAddr, int status)\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtGapPairStatusChangedCallback addr: ****%02x%02x%02x%02x status: %d\n",\r
-        bdAddr->addr[3], bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0], status); /* addr下标 0 1 2 3 */\r
-    if (status == GAP_PAIR_PAIRED) {\r
-       \r
-    }\r
-}\r
-\r
-static void svr_gap_ble_RequestedCallback(const bd_addr_t *bdAddr)\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtGapPairRequestedCallback addr: ****%02x%02x%02x%02x\n",\r
-        bdAddr->addr[3], bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0]); /* addr下标 0 1 2 3 */\r
-}\r
-\r
-static void svr_gap_ble_ConfirmedCallback(const bd_addr_t *bdAddr, int req_type, int number)\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtGapPairConfirmedCallback addr: ****%02x%02x%02x%02x req_type: %d number: %d\n",\r
-        bdAddr->addr[3], bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0], /* addr下标 0 1 2 3 */\r
-        req_type, number);\r
-}\r
-\r
-// 回调:扫描结果处理/发现结果上报\r
-static void svr_gap_ble_DiscoveryResultCallback(const bd_addr_t *bdAddr)\r
-{\r
-    if ((gap_get_device_class(bdAddr) & 0x200) != 0) {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtGapDiscoveryResultCallback: Mobile Phone Device");\r
-        return;\r
-    }\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtGapDiscoveryResultCallback");\r
-    if (bdAddr == NULL) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "addr nullptr");\r
-        return;\r
-    }\r
-}\r
-\r
-// 回调:ACL连接状态上报\r
-static void svr_gap_br_AclStateChangedCallback(const bd_addr_t *bdAddr, gap_acl_state_t state, unsigned int reason)\r
-{\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt GapAclStateChangedCallback state %d, reason %x succ or err", state, reason);\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "addr: %02x%02x%02x%02x%02x%02x",\r
-        bdAddr->addr[5], bdAddr->addr[4], bdAddr->addr[3], /* mac下标 0 1 2 3 4 5 */\r
-        bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0]); /* mac下标 0 1 2 3 4 5 */\r
-    if ((gap_get_device_class(bdAddr) & 0x200) != 0) {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GapAclStateChangedCallback: Mobile Phone Device");\r
-        return;\r
-    }\r
-    if(state == GAP_ACL_STATE_DISCONNECTED || state == GAP_ACL_STATE_LE_DISCONNECTED)\r
-    {\r
-        // gap_remove_all_pairs();\r
-    }\r
-\r
-}\r
-// 回调:远端设备名称变化\r
-static void svr_gap_ble_RemoteNameChangedCallback(const bd_addr_t *bdAddr, const unsigned char *deviceName, unsigned char length)\r
-{\r
-    if ((gap_get_device_class(bdAddr) & 0x200) != 0) {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtRemoteNameChangedCallback: Mobile Phone Device");\r
-        return;\r
-    }\r
-    if (bdAddr == NULL) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BtRemoteNameChangedCallback addr nullptr");\r
-        return;\r
-    }\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtRemoteNameChangedCallback addr: %02x%02x%02x%02x%02x%02x",\r
-                  bdAddr->addr[5], bdAddr->addr[4], bdAddr->addr[3], /* mac下标 0 1 2 3 4 5 */\r
-                  bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0]); /* mac下标 0 1 2 3 4 5 */\r
-\r
-}\r
-\r
-static void svr_gap_ble_IsAcceptConnOnSafeModeCallback(const bd_addr_t *bdAddr, bool *res)\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BtIsAcceptConnOnSafeModeCallback addr: %02x%02x%02x%02x%02x%02x set *res true",\r
-        bdAddr->addr[5], bdAddr->addr[4], bdAddr->addr[3], /* addr下标 3 4 5 */\r
-        bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0]); /* addr下标 0 1 2 */\r
-    *res = true;\r
-}\r
-\r
-static void A2dp_SrcConnectstateChanged(bd_addr_t *bdAddr, int connState)\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "a2dp_src_connectStateChangedCallback addr: %02x%02x%02x%02x%02x%02x connState: %x",\r
-        bdAddr->addr[5], bdAddr->addr[4], bdAddr->addr[3], /* 5 4 3 idx */\r
-        bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0], connState); /* 2 1 0 idx */\r
-    if ((gap_get_device_class(bdAddr) & 0x200) != 0) {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "a2dp_src_connectstateChangedCb: Mobile Phone Device");\r
-        return;\r
-    }\r
-    if (connState == PROFILE_STATE_CONNECTED) {\r
-        avrcp_ct_connect(bdAddr);\r
-        // PhoneAudioManagerSetDeviceConnState(OUT_BLUETOOTH_A2DP, AUDIO_DEVICE_CONNECTED);\r
-    }\r
-\r
-    if (connState == PROFILE_STATE_DISCONNECTED) {\r
-        // PhoneAudioManagerSetDeviceConnState(OUT_BLUETOOTH_A2DP, AUDIO_DEVICE_DISCONNECTED);\r
-    }\r
-}\r
-\r
-\r
-static void A2dp_SrcPlayingStateChanged(bd_addr_t *bdAddr, int playState)\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "A2dpSrcPlayingStateChangedCallback addr: %02x%02x%02x%02x%02x%02x playState: %x",\r
-        bdAddr->addr[5], bdAddr->addr[4], bdAddr->addr[3], /* 5 4 3 idx */\r
-        bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0], playState); /* 2 1 0 idx */\r
-}\r
-\r
-static void A2dp_SrcConfigureChanged(bd_addr_t *bdAddr, a2dp_codec_info_t *info)\r
-{\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "A2dpSrcConfigurationChangedCallback addr: %02x%02x%02x%02x%02x%02x ",\r
-        bdAddr->addr[5], bdAddr->addr[4], bdAddr->addr[3], /* 5 4 3 idx */\r
-        bdAddr->addr[2], bdAddr->addr[1], bdAddr->addr[0]); /* 2 1 0 idx */\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "codec_priority: %04x codec_type: %04x sample_rate: %02x bits_per_sample: %02x channel_mode: %02x ",\r
-        info->codec_priority, info->codec_type, info->sample_rate, info->bits_per_sample, info->channel_mode);\r
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "codec_specific1: %04x codec_specific2: %04x codec_specific3: %04x codec_specific4: %04x",\r
-        info->codec_specific1, info->codec_specific2, info->codec_specific3, info->codec_specific4);\r
-}\r
-static void BtA2dpSnkAcceptTimerStop(void)\r
-{\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "stop timer\n");\r
-    if (g_a2dp_stream_accept_timer.timer != NULL) {\r
-        (void)osal_timer_stop(&g_a2dp_stream_accept_timer);\r
-        (void)osal_timer_destroy(&g_a2dp_stream_accept_timer);\r
-        g_a2dp_stream_accept_timer.timer = NULL;\r
-    }\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "stop timer success!\n");\r
-}\r
-\r
-static void BtA2dpSnStartAcceptHandler(unsigned long data)\r
-{\r
-    UNUSED(data);\r
-    bd_addr_t active_bd_addr = a2dp_snk_get_active_device();\r
-    a2dp_snk_start_accept(&active_bd_addr);\r
-    BtA2dpSnkAcceptTimerStop();\r
-}\r
-\r
-static errcode_t BtA2dpSnkStartAcceptTimer(void)\r
-{\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "start timer\n");\r
-    if (g_a2dp_stream_accept_timer.timer != NULL) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "timer is running");\r
-        return ERRCODE_SUCC;\r
-    }\r
-\r
-    g_a2dp_stream_accept_timer.handler = BtA2dpSnStartAcceptHandler;\r
-    g_a2dp_stream_accept_timer.interval = A2DP_STREAM_ACCEPT_TIMER_PERIOD;\r
-\r
-    int32_t timer_ret = osal_timer_init(&g_a2dp_stream_accept_timer);\r
-    if (timer_ret != EOK) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "create timer error! ret: %x\n", timer_ret);\r
-        BtA2dpSnkAcceptTimerStop();\r
-        return ERRCODE_FAIL;\r
-    }\r
-    timer_ret = osal_timer_start(&g_a2dp_stream_accept_timer);\r
-    if (timer_ret != EOK) {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "start timer error! ret: %x\n", timer_ret);\r
-        BtA2dpSnkAcceptTimerStop();\r
-        return ERRCODE_FAIL;\r
-    }\r
-    return ERRCODE_SUCC;\r
-}\r
-\r
-static int32_t BtA2dpSnkAudioCreate()\r
-{\r
-#if MEDIA_A2DP_SNK_INTERFACE\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "audioFormat %d channelCount %d sampleRate %d \n",\r
-        g_audio_format_config.audioFormat, g_audio_format_config.channelCount, g_audio_format_config.sampleRate);\r
-\r
-    int32_t ret = AudioManagerA2dpSinkSetParam(g_audio_format_config);\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "AudioManagerA2dpSinkSetParam ret %x\n", ret);\r
-    ret = AudioManagerA2dpSinkCreate();\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "AudioManagerA2dpSinkCreate ret %x\n", ret);\r
-#endif\r
-    /* 起定时器接受音乐开始请求 */\r
-    (void)BtA2dpSnkStartAcceptTimer();\r
-    return 0;\r
-}\r
-\r
-static int32_t BtA2dpSnkAudioDestroy()\r
-{\r
-#if MEDIA_A2DP_SNK_INTERFACE\r
-    int32_t ret = AudioManagerA2dpSinkDestroy();\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "AudioManagerA2dpSinkDestroy ret %x\n", ret);\r
-#endif\r
-    return 0;\r
-}\r
-\r
-\r
-\r
-static void BtA2dpSnkConnectStateChangedCb(bd_addr_t *bd_addr, int conn_state)\r
-{\r
-    if(conn_state == 4)//取消配对\r
-    {\r
-\r
-    }else if(conn_state == 2)//配对成功 发送配对成功的指令 手机mac地址\r
-    {\r
-        // sendParieSuccess();\r
-    }\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "BtA2dpSnkConnectStateChangedCb addr: ****%02x%02x%02x%02x%02x%02x conn_state: %x\n",\r
-        bd_addr->addr[5],bd_addr->addr[4],bd_addr->addr[3], bd_addr->addr[2], bd_addr->addr[1], bd_addr->addr[0], conn_state); /* 3 2 1 0 idx */\r
-}\r
-\r
-static void BtA2dpSnkStartStreamReqCb(bd_addr_t *bd_addr)\r
-{\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "addr: ****%02x%02x%02x%02x \n",\r
-        bd_addr->addr[3], bd_addr->addr[2], bd_addr->addr[1], bd_addr->addr[0]); /* 3 2 1 0 idx */\r
-    BtA2dpSnkAudioCreate();\r
-}\r
-\r
-static void BtA2dpSnkPlayingStateChangedCb(bd_addr_t *bd_addr, int playing_state)\r
-{\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "addr: ****%02x%02x%02x%02x playing_state: %x\n",\r
-        bd_addr->addr[3], bd_addr->addr[2], bd_addr->addr[1], bd_addr->addr[0], playing_state); /* 3 2 1 0 idx */\r
-    if (playing_state == A2DP_NOT_PLAYING) {\r
-        BtA2dpSnkAudioDestroy();\r
-    }\r
-}\r
-\r
-static void BtA2dpSnkConfigChangedCb(bd_addr_t *bd_addr, a2dp_snk_codec_info_t *info)\r
-{\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "addr: ****%02x%02x%02x%02x ",\r
-        bd_addr->addr[3], bd_addr->addr[2], bd_addr->addr[1], bd_addr->addr[0]); /* 3 2 1 0 idx */\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP,\r
-        "codec_priority: %04x codec_type: %04x sample_rate: %02x bits_per_sample: %02x channel_mode: %02x",\r
-        info->codec_priority, info->codec_type, info->sample_rate, info->bits_per_sample, info->channel_mode);\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP,\r
-        "codec_specific1: %04x codec_specific2: %04x codec_specific3: %04x codec_specific4: %04x\n",\r
-        (unsigned int)info->codec_specific1,\r
-        (unsigned int)info->codec_specific2,\r
-        (unsigned int)info->codec_specific3,\r
-        (unsigned int)info->codec_specific4);\r
-#if MEDIA_A2DP_SNK_INTERFACE\r
-    if (info->codec_type == A2DP_SNK_CODEC_TYPE_AAC) {\r
-        g_audio_format_config.audioFormat = AAC_LC;\r
-    } else {\r
-        g_audio_format_config.audioFormat = SBC;\r
-    }\r
-    /* channel count 1 or 2 */\r
-    g_audio_format_config.channelCount = (info->channel_mode == A2DP_SNK_CODEC_CHANNEL_MODE_NONE ? 1 : 2);\r
-\r
-    switch (info->sample_rate) {\r
-        case A2DP_SNK_CODEC_SAMPLE_RATE_48000:\r
-            g_audio_format_config.sampleRate = BT_AUDIO_A2DP_SMAPLE_RATE48000;\r
-            break;\r
-        case A2DP_SNK_CODEC_SAMPLE_RATE_88200:\r
-            g_audio_format_config.sampleRate = BT_AUDIO_A2DP_SMAPLE_RATE88200;\r
-            break;\r
-        case A2DP_SNK_CODEC_SAMPLE_RATE_96000:\r
-            g_audio_format_config.sampleRate = BT_AUDIO_A2DP_SMAPLE_RATE96000;\r
-            break;\r
-        default:\r
-            g_audio_format_config.sampleRate = BT_AUDIO_A2DP_SMAPLE_RATE44100;\r
-            break;\r
-    }\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "audioFormat %d channelCount %d sampleRate %d \n",\r
-        g_audio_format_config.audioFormat, g_audio_format_config.channelCount, g_audio_format_config.sampleRate);\r
-#endif\r
-}\r
-\r
-static a2dp_snk_callbacks_t g_a2dp_snk_callbacks = {\r
-    BtA2dpSnkConnectStateChangedCb,\r
-    BtA2dpSnkStartStreamReqCb,\r
-    BtA2dpSnkPlayingStateChangedCb,\r
-    BtA2dpSnkConfigChangedCb\r
-};\r
 void svr_ble_btcallback_reg(void)//ble基础通讯服务注册回调函数\r
 {\r
     \r
@@ -1311,24 +1028,7 @@ void svr_ble_btcallback_reg(void)//ble基础通讯服务注册回调函数
     sec_params.sc_mode = GAP_BLE_GAP_SECURITY_MODE1_LEVEL2;\r
     errcode_t ret = gap_ble_set_sec_param(&sec_params);//设置配对参数 发起配对弹窗\r
 \r
-    g_btGapCallBacks.discovery_result_callback = svr_gap_ble_DiscoveryResultCallback;\r
-    g_btGapCallBacks.discovery_state_changed_callback = svr_gap_ble_DiscoveryStateChangedCallback;\r
-    g_btGapCallBacks.acl_state_changed_callbak = svr_gap_br_AclStateChangedCallback;\r
-    g_btGapCallBacks.read_remote_rssi_event_callback = svr_gap_ble_ReadRemoteRssiEventCallback;\r
-    g_btGapCallBacks.remote_name_changed_callback = svr_gap_ble_RemoteNameChangedCallback;\r
-    g_btGapCallBacks.is_accept_conn_on_safe_mode_callback = svr_gap_ble_IsAcceptConnOnSafeModeCallback;\r
-    g_btGapCallBacks.pair_status_changed_callback = svr_gap_ble_PairStatusChangedCallback;\r
-    g_btGapCallBacks.pair_requested_callback = svr_gap_ble_RequestedCallback;\r
-    g_btGapCallBacks.pair_confiremed_callback = svr_gap_ble_ConfirmedCallback; \r
-    \r
-    gap_register_callbacks(&g_btGapCallBacks);\r
-\r
-    g_a2dpSrcCallbacks.connectstate_changed_cb = A2dp_SrcConnectstateChanged;\r
-    g_a2dpSrcCallbacks.configuration_changed_cb = A2dp_SrcConfigureChanged;\r
-    g_a2dpSrcCallbacks.playing_state_changed_cb = A2dp_SrcPlayingStateChanged;\r
-    a2dp_src_register_callbacks(&g_a2dpSrcCallbacks);\r
 \r
-    a2dp_snk_register_callbacks(&g_a2dp_snk_callbacks);\r
 \r
     g_ble_gapble_cbs.conn_state_change_cb = svr_ble_connstate_change_cb;\r
     g_ble_gapble_cbs.start_adv_cb = svr_ble_adv_start_cb;\r
index 4162387..9f60e32 100644 (file)
@@ -193,6 +193,49 @@ bool is_doing_shutdown_or_reboot(void)
     return doing_shutdown_or_reboot;
 }
 
+
+bool enable_hfp_service(bool _enable)
+{
+    uint8_t stat=uapi_dev_runtime_get_br_connect_stat();
+    if (_enable == true)
+    {
+        stat |= 0x01;
+    }else{
+        stat &= ~0x01;
+    }
+    uapi_dev_runtime_set_br_connect_stat(stat);
+    return true;
+}
+
+bool enable_a2dp_service(bool _enable)
+{
+    uint8_t stat=uapi_dev_runtime_get_br_connect_stat();
+    if (_enable == true)
+    {
+        stat |= 0x02;
+    }else{
+        stat &= ~0x02;
+    }
+    uapi_dev_runtime_set_br_connect_stat(stat);
+    return true;
+}
+
+bool enable_spp_service(bool _enable)
+{
+    uint8_t stat=uapi_dev_runtime_get_br_connect_stat();
+    if (_enable == true)
+    {
+        stat |= 0x04;
+    }else{
+        stat &= ~0x04;
+    }
+    uapi_dev_runtime_set_br_connect_stat(stat);
+    return true;
+}
+
+extern void BtInitSpp(void);
+extern void BtA2dpInit(void);
+extern void BtInitCallBacks(void);
 bool start_custom_ble_service(void)
 {
 #ifdef SUPPORT_BLE_SERVICE
@@ -200,9 +243,23 @@ bool start_custom_ble_service(void)
         PRINT("start custom protocol classic bt ble service !\r\n");
         // bool ret = enable_bt_stack();
 #endif 
+    // if(uapi_dev_runtime_get_bt_powerstat()==true)
+    {
+
+        PRINT("register custom protocol classic bt service !\r\n");
+
+        BtInitCallBacks();
+        BtA2dpInit();
+        enable_a2dp_service(true);
+        BtInitSpp();
+        enable_spp_service(true);
+        
+    }
+
     uapi_dev_runtime_set_bt_powerstat(1);
     return true;
 }
+
 bool stop_custom_ble_service(void)
 {
 #ifdef SUPPORT_BLE_SERVICE
index c809038..68d01b7 100644 (file)
@@ -139,6 +139,9 @@ bool stop_custom_ble_service(void);
 bool start_alipay_ble_service(void);
 bool stop_alipay_ble_service(void);
 
+bool enable_hfp_service(bool _enable);
+bool enable_a2dp_service(bool _enable);
+bool enable_spp_service(bool _enable);
 
 uint32_t uapi_calendar_recover_date(void);
 uint32_t uapi_calendar_store_date(void);