Loading system/bta/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ cc_defaults { "packages/modules/Bluetooth/system/bta/include", "packages/modules/Bluetooth/system/btcore/include", "packages/modules/Bluetooth/system/btif/avrcp", "packages/modules/Bluetooth/system/btif/include", "packages/modules/Bluetooth/system/hci/include", "packages/modules/Bluetooth/system/internal_include", "packages/modules/Bluetooth/system/stack/include", Loading system/bta/ag/bta_ag_act.cc +11 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ #include "bta_api.h" #include "bta_dm_api.h" #include "bta_sys.h" #include "btif_config.h" #include "l2c_api.h" #include "osi/include/osi.h" #include "port_api.h" Loading Loading @@ -457,6 +458,16 @@ void bta_ag_rfc_open(tBTA_AG_SCB* p_scb, const tBTA_AG_DATA& data) { p_scb->cmee_enabled = false; p_scb->inband_enabled = ((p_scb->features & BTA_AG_FEAT_INBAND) == BTA_AG_FEAT_INBAND); if (p_scb->conn_service == BTA_AG_HFP) { size_t version_value_size = sizeof(p_scb->peer_version); if (!btif_config_get_bin( p_scb->peer_addr.ToString(), HFP_VERSION_CONFIG_KEY, (uint8_t*)&p_scb->peer_version, &version_value_size)) { APPL_TRACE_WARNING("%s: Failed read cached peer HFP version for %s", __func__, p_scb->peer_addr.ToString().c_str()); p_scb->peer_version = HFP_HSP_VERSION_UNKNOWN; } } /* set up AT command interpreter */ p_scb->at_cb.p_at_tbl = bta_ag_at_tbl[p_scb->conn_service]; Loading system/bta/ag/bta_ag_main.cc +1 −0 Original line number Diff line number Diff line Loading @@ -309,6 +309,7 @@ static tBTA_AG_SCB* bta_ag_scb_alloc(void) { p_scb->codec_fallback = false; p_scb->peer_codecs = BTA_AG_CODEC_CVSD; p_scb->sco_codec = BTA_AG_CODEC_CVSD; p_scb->peer_version = HFP_HSP_VERSION_UNKNOWN; /* set up timers */ p_scb->ring_timer = alarm_new("bta_ag.scb_ring_timer"); p_scb->collision_timer = alarm_new("bta_ag.scb_collision_timer"); Loading system/bta/ag/bta_ag_sdp.cc +25 −5 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ #include "bta_ag_int.h" #include "bta_api.h" #include "bta_sys.h" #include "btif_config.h" #include "btm_api.h" #include "osi/include/osi.h" #include "sdp_api.h" Loading Loading @@ -297,7 +298,10 @@ bool bta_ag_sdp_find_attr(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK service) { if (service & BTA_HFP_SERVICE_MASK) { uuid = UUID_SERVCLASS_HF_HANDSFREE; /* If there is no cached peer version, use default one */ if (p_scb->peer_version == HFP_HSP_VERSION_UNKNOWN) { p_scb->peer_version = HFP_VERSION_1_1; /* Default version */ } } else if (service & BTA_HSP_SERVICE_MASK && p_scb->role == BTA_AG_INT) { uuid = UUID_SERVCLASS_HEADSET_HS; p_scb->peer_version = HSP_VERSION_1_2; /* Default version */ Loading Loading @@ -333,13 +337,27 @@ bool bta_ag_sdp_find_attr(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK service) { } /* get profile version (if failure, version parameter is not updated) */ if (!SDP_FindProfileVersionInRec(p_rec, uuid, &p_scb->peer_version)) { uint16_t peer_version = HFP_HSP_VERSION_UNKNOWN; if (!SDP_FindProfileVersionInRec(p_rec, uuid, &peer_version)) { APPL_TRACE_WARNING("%s: Get peer_version failed, using default 0x%04x", __func__, p_scb->peer_version); peer_version = p_scb->peer_version; } /* get features if HFP */ if (service & BTA_HFP_SERVICE_MASK) { /* Update cached peer version if the new one is different */ if (peer_version != p_scb->peer_version) { p_scb->peer_version = peer_version; if (btif_config_set_bin( p_scb->peer_addr.ToString(), HFP_VERSION_CONFIG_KEY, (const uint8_t*)&peer_version, sizeof(peer_version))) { btif_config_save(); } else { APPL_TRACE_WARNING("%s: Failed to store peer HFP version for %s", __func__, p_scb->peer_addr.ToString().c_str()); } } /* get features if HFP */ p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SUPPORTED_FEATURES); if (p_attr != nullptr) { /* Found attribute. Get value. */ Loading @@ -348,8 +366,10 @@ bool bta_ag_sdp_find_attr(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK service) { if (p_scb->peer_features == 0) p_scb->peer_features = p_attr->attr_value.v.u16; } } else /* HSP */ { } else { /* No peer version caching for HSP, use discovered one directly */ p_scb->peer_version = peer_version; /* get features if HSP */ p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_REMOTE_AUDIO_VOLUME_CONTROL); if (p_attr != nullptr) { Loading system/bta/include/bta_ag_api.h +3 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ /* Number of SCBs (AG service instances that can be registered) */ #define BTA_AG_MAX_NUM_CLIENTS 6 #define HFP_HSP_VERSION_UNKNOWN 0x0000 #define HFP_VERSION_1_1 0x0101 #define HFP_VERSION_1_5 0x0105 #define HFP_VERSION_1_6 0x0106 Loading @@ -44,6 +45,8 @@ #define HSP_VERSION_1_0 0x0100 #define HSP_VERSION_1_2 0x0102 #define HFP_VERSION_CONFIG_KEY "HfpVersion" /* Note, if you change the default version here, please also change the one in * bta_hs_api.h, they are meant to be the same. */ Loading Loading
system/bta/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ cc_defaults { "packages/modules/Bluetooth/system/bta/include", "packages/modules/Bluetooth/system/btcore/include", "packages/modules/Bluetooth/system/btif/avrcp", "packages/modules/Bluetooth/system/btif/include", "packages/modules/Bluetooth/system/hci/include", "packages/modules/Bluetooth/system/internal_include", "packages/modules/Bluetooth/system/stack/include", Loading
system/bta/ag/bta_ag_act.cc +11 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ #include "bta_api.h" #include "bta_dm_api.h" #include "bta_sys.h" #include "btif_config.h" #include "l2c_api.h" #include "osi/include/osi.h" #include "port_api.h" Loading Loading @@ -457,6 +458,16 @@ void bta_ag_rfc_open(tBTA_AG_SCB* p_scb, const tBTA_AG_DATA& data) { p_scb->cmee_enabled = false; p_scb->inband_enabled = ((p_scb->features & BTA_AG_FEAT_INBAND) == BTA_AG_FEAT_INBAND); if (p_scb->conn_service == BTA_AG_HFP) { size_t version_value_size = sizeof(p_scb->peer_version); if (!btif_config_get_bin( p_scb->peer_addr.ToString(), HFP_VERSION_CONFIG_KEY, (uint8_t*)&p_scb->peer_version, &version_value_size)) { APPL_TRACE_WARNING("%s: Failed read cached peer HFP version for %s", __func__, p_scb->peer_addr.ToString().c_str()); p_scb->peer_version = HFP_HSP_VERSION_UNKNOWN; } } /* set up AT command interpreter */ p_scb->at_cb.p_at_tbl = bta_ag_at_tbl[p_scb->conn_service]; Loading
system/bta/ag/bta_ag_main.cc +1 −0 Original line number Diff line number Diff line Loading @@ -309,6 +309,7 @@ static tBTA_AG_SCB* bta_ag_scb_alloc(void) { p_scb->codec_fallback = false; p_scb->peer_codecs = BTA_AG_CODEC_CVSD; p_scb->sco_codec = BTA_AG_CODEC_CVSD; p_scb->peer_version = HFP_HSP_VERSION_UNKNOWN; /* set up timers */ p_scb->ring_timer = alarm_new("bta_ag.scb_ring_timer"); p_scb->collision_timer = alarm_new("bta_ag.scb_collision_timer"); Loading
system/bta/ag/bta_ag_sdp.cc +25 −5 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ #include "bta_ag_int.h" #include "bta_api.h" #include "bta_sys.h" #include "btif_config.h" #include "btm_api.h" #include "osi/include/osi.h" #include "sdp_api.h" Loading Loading @@ -297,7 +298,10 @@ bool bta_ag_sdp_find_attr(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK service) { if (service & BTA_HFP_SERVICE_MASK) { uuid = UUID_SERVCLASS_HF_HANDSFREE; /* If there is no cached peer version, use default one */ if (p_scb->peer_version == HFP_HSP_VERSION_UNKNOWN) { p_scb->peer_version = HFP_VERSION_1_1; /* Default version */ } } else if (service & BTA_HSP_SERVICE_MASK && p_scb->role == BTA_AG_INT) { uuid = UUID_SERVCLASS_HEADSET_HS; p_scb->peer_version = HSP_VERSION_1_2; /* Default version */ Loading Loading @@ -333,13 +337,27 @@ bool bta_ag_sdp_find_attr(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK service) { } /* get profile version (if failure, version parameter is not updated) */ if (!SDP_FindProfileVersionInRec(p_rec, uuid, &p_scb->peer_version)) { uint16_t peer_version = HFP_HSP_VERSION_UNKNOWN; if (!SDP_FindProfileVersionInRec(p_rec, uuid, &peer_version)) { APPL_TRACE_WARNING("%s: Get peer_version failed, using default 0x%04x", __func__, p_scb->peer_version); peer_version = p_scb->peer_version; } /* get features if HFP */ if (service & BTA_HFP_SERVICE_MASK) { /* Update cached peer version if the new one is different */ if (peer_version != p_scb->peer_version) { p_scb->peer_version = peer_version; if (btif_config_set_bin( p_scb->peer_addr.ToString(), HFP_VERSION_CONFIG_KEY, (const uint8_t*)&peer_version, sizeof(peer_version))) { btif_config_save(); } else { APPL_TRACE_WARNING("%s: Failed to store peer HFP version for %s", __func__, p_scb->peer_addr.ToString().c_str()); } } /* get features if HFP */ p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_SUPPORTED_FEATURES); if (p_attr != nullptr) { /* Found attribute. Get value. */ Loading @@ -348,8 +366,10 @@ bool bta_ag_sdp_find_attr(tBTA_AG_SCB* p_scb, tBTA_SERVICE_MASK service) { if (p_scb->peer_features == 0) p_scb->peer_features = p_attr->attr_value.v.u16; } } else /* HSP */ { } else { /* No peer version caching for HSP, use discovered one directly */ p_scb->peer_version = peer_version; /* get features if HSP */ p_attr = SDP_FindAttributeInRec(p_rec, ATTR_ID_REMOTE_AUDIO_VOLUME_CONTROL); if (p_attr != nullptr) { Loading
system/bta/include/bta_ag_api.h +3 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ /* Number of SCBs (AG service instances that can be registered) */ #define BTA_AG_MAX_NUM_CLIENTS 6 #define HFP_HSP_VERSION_UNKNOWN 0x0000 #define HFP_VERSION_1_1 0x0101 #define HFP_VERSION_1_5 0x0105 #define HFP_VERSION_1_6 0x0106 Loading @@ -44,6 +45,8 @@ #define HSP_VERSION_1_0 0x0100 #define HSP_VERSION_1_2 0x0102 #define HFP_VERSION_CONFIG_KEY "HfpVersion" /* Note, if you change the default version here, please also change the one in * bta_hs_api.h, they are meant to be the same. */ Loading