Loading system/bta/gatt/bta_gattc_act.cc +13 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ #include "btif/include/core_callbacks.h" #include "btif/include/stack_manager.h" #include "device/include/controller.h" #include "device/include/interop.h" #include "main/shim/dumpsys.h" #include "osi/include/allocator.h" #include "osi/include/log.h" Loading Loading @@ -816,6 +817,18 @@ void bta_gattc_start_discover(tBTA_GATTC_CLCB* p_clcb, p_clcb->p_srcb->srvc_hdl_db_hash = false; } // Some LMP 5.2 devices also don't support robust caching. This workaround // conditionally disables the feature based on a combination of LMP // version and OUI prefix. if (lmp_version < 0x0c && interop_match_addr(INTEROP_DISABLE_ROBUST_CACHING, &p_clcb->bda)) { LOG_WARN( "Device LMP version 0x%02x <= Bluetooth 5.2 and MAC addr on " "interop list, skipping robust caching", lmp_version); p_clcb->p_srcb->srvc_hdl_db_hash = false; } /* read db hash if db hash characteristic exists */ if (bta_gattc_is_robust_caching_enabled() && p_clcb->p_srcb->srvc_hdl_db_hash && Loading system/conf/interop_database.conf +36 −1 Original line number Diff line number Diff line Loading @@ -808,3 +808,38 @@ fc:35:e6 = Address_Based # HFP AT+BIND missing [INTEROP_SLC_SKIP_BIND_COMMAND] 94:b2:cc:30 = Address_Based # Some remote devices have LMP version in [5.0, 5.2] but do not support robust caching # or correctly response with an error. We disable the database hash lookup for such devices. [INTEROP_DISABLE_ROBUST_CACHING] 08:9b:f1 = Address_Based 20:be:cd = Address_Based 30:34:22 = Address_Based 3c:5c:f1 = Address_Based 40:47:5e = Address_Based 50:27:a9 = Address_Based 64:97:14 = Address_Based 64:c2:69 = Address_Based 68:4a:76 = Address_Based 6c:ae:f6 = Address_Based 78:76:89 = Address_Based 78:d6:d6 = Address_Based 84:70:d7 = Address_Based 98:ed:7e = Address_Based 9c:0b:05 = Address_Based 9c:57:bc = Address_Based 9c:a5:70 = Address_Based a0:8e:24 = Address_Based ac:ec:85 = Address_Based b4:20:46 = Address_Based b4:b9:e6 = Address_Based c0:36:53 = Address_Based c4:f1:74 = Address_Based c8:b8:2f = Address_Based c8:e3:06 = Address_Based d4:05:de = Address_Based d4:3f:32 = Address_Based ec:74:27 = Address_Based f0:21:e0 = Address_Based f0:b6:61 = Address_Based fc:3f:a6 = Address_Based system/device/include/interop.h +5 −0 Original line number Diff line number Diff line Loading @@ -321,6 +321,11 @@ typedef enum { // during connection. INTEROP_DISABLE_ROLE_SWITCH_DURING_CONNECTION, // Some remote devices have LMP version in[5.0, 5.2] but do not support robust // caching or correctly response with an error. We disable the database hash // lookup for such devices. INTEROP_DISABLE_ROBUST_CACHING, INTEROP_HFP_1_7_ALLOWLIST, END_OF_INTEROP_LIST } interop_feature_t; Loading system/device/src/interop.cc +1 −0 Original line number Diff line number Diff line Loading @@ -379,6 +379,7 @@ static const char* interop_feature_string_(const interop_feature_t feature) { CASE_RETURN_STR(INTEROP_DISABLE_AVDTP_SUSPEND) CASE_RETURN_STR(INTEROP_SLC_SKIP_BIND_COMMAND) CASE_RETURN_STR(INTEROP_AVRCP_1_3_ONLY) CASE_RETURN_STR(INTEROP_DISABLE_ROBUST_CACHING); CASE_RETURN_STR(INTEROP_HFP_1_7_ALLOWLIST); } return UNKNOWN_INTEROP_FEATURE; Loading Loading
system/bta/gatt/bta_gattc_act.cc +13 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ #include "btif/include/core_callbacks.h" #include "btif/include/stack_manager.h" #include "device/include/controller.h" #include "device/include/interop.h" #include "main/shim/dumpsys.h" #include "osi/include/allocator.h" #include "osi/include/log.h" Loading Loading @@ -816,6 +817,18 @@ void bta_gattc_start_discover(tBTA_GATTC_CLCB* p_clcb, p_clcb->p_srcb->srvc_hdl_db_hash = false; } // Some LMP 5.2 devices also don't support robust caching. This workaround // conditionally disables the feature based on a combination of LMP // version and OUI prefix. if (lmp_version < 0x0c && interop_match_addr(INTEROP_DISABLE_ROBUST_CACHING, &p_clcb->bda)) { LOG_WARN( "Device LMP version 0x%02x <= Bluetooth 5.2 and MAC addr on " "interop list, skipping robust caching", lmp_version); p_clcb->p_srcb->srvc_hdl_db_hash = false; } /* read db hash if db hash characteristic exists */ if (bta_gattc_is_robust_caching_enabled() && p_clcb->p_srcb->srvc_hdl_db_hash && Loading
system/conf/interop_database.conf +36 −1 Original line number Diff line number Diff line Loading @@ -808,3 +808,38 @@ fc:35:e6 = Address_Based # HFP AT+BIND missing [INTEROP_SLC_SKIP_BIND_COMMAND] 94:b2:cc:30 = Address_Based # Some remote devices have LMP version in [5.0, 5.2] but do not support robust caching # or correctly response with an error. We disable the database hash lookup for such devices. [INTEROP_DISABLE_ROBUST_CACHING] 08:9b:f1 = Address_Based 20:be:cd = Address_Based 30:34:22 = Address_Based 3c:5c:f1 = Address_Based 40:47:5e = Address_Based 50:27:a9 = Address_Based 64:97:14 = Address_Based 64:c2:69 = Address_Based 68:4a:76 = Address_Based 6c:ae:f6 = Address_Based 78:76:89 = Address_Based 78:d6:d6 = Address_Based 84:70:d7 = Address_Based 98:ed:7e = Address_Based 9c:0b:05 = Address_Based 9c:57:bc = Address_Based 9c:a5:70 = Address_Based a0:8e:24 = Address_Based ac:ec:85 = Address_Based b4:20:46 = Address_Based b4:b9:e6 = Address_Based c0:36:53 = Address_Based c4:f1:74 = Address_Based c8:b8:2f = Address_Based c8:e3:06 = Address_Based d4:05:de = Address_Based d4:3f:32 = Address_Based ec:74:27 = Address_Based f0:21:e0 = Address_Based f0:b6:61 = Address_Based fc:3f:a6 = Address_Based
system/device/include/interop.h +5 −0 Original line number Diff line number Diff line Loading @@ -321,6 +321,11 @@ typedef enum { // during connection. INTEROP_DISABLE_ROLE_SWITCH_DURING_CONNECTION, // Some remote devices have LMP version in[5.0, 5.2] but do not support robust // caching or correctly response with an error. We disable the database hash // lookup for such devices. INTEROP_DISABLE_ROBUST_CACHING, INTEROP_HFP_1_7_ALLOWLIST, END_OF_INTEROP_LIST } interop_feature_t; Loading
system/device/src/interop.cc +1 −0 Original line number Diff line number Diff line Loading @@ -379,6 +379,7 @@ static const char* interop_feature_string_(const interop_feature_t feature) { CASE_RETURN_STR(INTEROP_DISABLE_AVDTP_SUSPEND) CASE_RETURN_STR(INTEROP_SLC_SKIP_BIND_COMMAND) CASE_RETURN_STR(INTEROP_AVRCP_1_3_ONLY) CASE_RETURN_STR(INTEROP_DISABLE_ROBUST_CACHING); CASE_RETURN_STR(INTEROP_HFP_1_7_ALLOWLIST); } return UNKNOWN_INTEROP_FEATURE; Loading