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
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
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
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