Loading system/btif/include/btif_gatt_util.h +0 −3 Original line number Diff line number Diff line Loading @@ -25,9 +25,6 @@ #include "bta/include/bta_gatt_api.h" void btif_to_bta_response(tGATTS_RSP* p_dest, btgatt_response_t* p_src); void btif_to_bta_uuid_mask(tBTM_BLE_PF_COND_MASK* p_mask, const bluetooth::Uuid& p_src, const bluetooth::Uuid& svc_uuid); void btif_gatt_check_encrypted_link(RawAddress bd_addr, tGATT_TRANSPORT transport); Loading system/btif/src/btif_ble_scanner.cc +11 −83 Original line number Diff line number Diff line Loading @@ -255,90 +255,18 @@ class BleScannerInterfaceImpl : public BleScannerInterface { jni_thread_wrapper(FROM_HERE, std::move(cb)))); } void ScanFilterAddRemove(int action, int filt_type, int filt_index, int company_id, int company_id_mask, const bluetooth::Uuid* p_uuid, const bluetooth::Uuid* p_uuid_mask, const RawAddress* bd_addr, char addr_type, vector<uint8_t> data, vector<uint8_t> mask, void ScanFilterAdd(int filter_index, std::vector<ApcfCommand> filters, FilterConfigCallback cb) override { BTIF_TRACE_DEBUG("%s, %d, %d", __func__, action, filt_type); BTIF_TRACE_DEBUG("%s: %d", __func__, filter_index); /* If data is passed, both mask and data have to be the same length */ if (data.size() != mask.size() && data.size() != 0 && mask.size() != 0) return; switch (filt_type) { case BTM_BLE_PF_ADDR_FILTER: { tBLE_BD_ADDR target_addr; target_addr.bda = *bd_addr; target_addr.type = addr_type; do_in_bta_thread( FROM_HERE, base::Bind(&BTM_LE_PF_addr_filter, action, filt_index, std::move(target_addr), jni_thread_wrapper(FROM_HERE, Bind(cb, filt_type)))); return; } case BTM_BLE_PF_SRVC_DATA: do_in_bta_thread(FROM_HERE, base::Bind(&BTM_LE_PF_srvc_data, action, filt_index)); return; case BTM_BLE_PF_SRVC_UUID: case BTM_BLE_PF_SRVC_SOL_UUID: { if (p_uuid_mask == NULL) { do_in_bta_thread( FROM_HERE, base::Bind(&BTM_LE_PF_uuid_filter, action, filt_index, filt_type, *p_uuid, BTM_BLE_PF_LOGIC_AND, nullptr, jni_thread_wrapper(FROM_HERE, Bind(cb, filt_type)))); return; } tBTM_BLE_PF_COND_MASK* mask = new tBTM_BLE_PF_COND_MASK; btif_to_bta_uuid_mask(mask, *p_uuid_mask, *p_uuid); do_in_bta_thread( FROM_HERE, base::Bind(&BTM_LE_PF_uuid_filter, action, filt_index, filt_type, *p_uuid, BTM_BLE_PF_LOGIC_AND, base::Owned(mask), jni_thread_wrapper(FROM_HERE, Bind(cb, filt_type)))); return; } case BTM_BLE_PF_LOCAL_NAME: { do_in_bta_thread( FROM_HERE, base::Bind(&BTM_LE_PF_local_name, action, filt_index, std::move(data), jni_thread_wrapper(FROM_HERE, Bind(cb, filt_type)))); return; } case BTM_BLE_PF_MANU_DATA: { do_in_bta_thread( FROM_HERE, base::Bind(&BTM_LE_PF_manu_data, action, filt_index, company_id, company_id_mask, std::move(data), std::move(mask), jni_thread_wrapper(FROM_HERE, Bind(cb, filt_type)))); return; } case BTM_BLE_PF_SRVC_DATA_PATTERN: { do_in_bta_thread( base::Bind( &BTM_LE_PF_set, filter_index, std::move(filters), jni_thread_wrapper( FROM_HERE, base::Bind(&BTM_LE_PF_srvc_data_pattern, action, filt_index, std::move(data), std::move(mask), jni_thread_wrapper(FROM_HERE, Bind(cb, filt_type)))); return; } default: LOG_ERROR(LOG_TAG, "%s: Unknown filter type (%d)!", __func__, action); return; } Bind(std::move(cb), 0 /*TODO: this used to be filter type, unused ?*/)))); } void ScanFilterClear(int filter_index, FilterConfigCallback cb) override { Loading system/btif/src/btif_gatt_util.cc +0 −25 Original line number Diff line number Diff line Loading @@ -53,31 +53,6 @@ void btif_to_bta_response(tGATTS_RSP* p_dest, btgatt_response_t* p_src) { memcpy(p_dest->attr_value.value, p_src->attr_value.value, GATT_MAX_ATTR_LEN); } void btif_to_bta_uuid_mask(tBTM_BLE_PF_COND_MASK* p_mask, const bluetooth::Uuid& uuid_mask, const bluetooth::Uuid& svc_uuid) { // we use svc_uuid for uuid_mask length picking ? int uuid_len = svc_uuid.GetShortestRepresentationSize(); switch (uuid_len) { case Uuid::kNumBytes16: p_mask->uuid16_mask = uuid_mask.As16Bit(); break; case Uuid::kNumBytes32: p_mask->uuid32_mask = uuid_mask.As32Bit(); break; case Uuid::kNumBytes128: memcpy(p_mask->uuid128_mask, uuid_mask.To128BitLE().data(), Uuid::kNumBytes128); break; default: break; } } /******************************************************************************* * Encrypted link map handling ******************************************************************************/ Loading system/include/hardware/ble_scanner.h +2 −8 Original line number Diff line number Diff line Loading @@ -86,13 +86,7 @@ class BleScannerInterface { FilterParamSetupCallback cb) = 0; /** Configure a scan filter condition */ virtual void ScanFilterAddRemove(int action, int filt_type, int filt_index, int company_id, int company_id_mask, const bluetooth::Uuid* p_uuid, const bluetooth::Uuid* p_uuid_mask, const RawAddress* bd_addr, char addr_type, std::vector<uint8_t> data, std::vector<uint8_t> p_mask, virtual void ScanFilterAdd(int filter_index, std::vector<ApcfCommand> filters, FilterConfigCallback cb) = 0; /** Clear all scan filter conditions for specific filter index*/ Loading system/include/hardware/bt_common_types.h +15 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ #include "bluetooth.h" #include <bluetooth/uuid.h> #include <vector> typedef struct { uint8_t client_if; Loading Loading @@ -86,4 +87,18 @@ typedef struct { uint16_t num_of_tracking_entries; } btgatt_filt_param_setup_t; // Advertising Packet Content Filter struct ApcfCommand { uint8_t type; RawAddress address; uint8_t addr_type; bluetooth::Uuid uuid; bluetooth::Uuid uuid_mask; std::vector<uint8_t> name; uint16_t company; uint16_t company_mask; std::vector<uint8_t> data; std::vector<uint8_t> data_mask; }; #endif /* ANDROID_INCLUDE_BT_COMMON_TYPES_H */ Loading
system/btif/include/btif_gatt_util.h +0 −3 Original line number Diff line number Diff line Loading @@ -25,9 +25,6 @@ #include "bta/include/bta_gatt_api.h" void btif_to_bta_response(tGATTS_RSP* p_dest, btgatt_response_t* p_src); void btif_to_bta_uuid_mask(tBTM_BLE_PF_COND_MASK* p_mask, const bluetooth::Uuid& p_src, const bluetooth::Uuid& svc_uuid); void btif_gatt_check_encrypted_link(RawAddress bd_addr, tGATT_TRANSPORT transport); Loading
system/btif/src/btif_ble_scanner.cc +11 −83 Original line number Diff line number Diff line Loading @@ -255,90 +255,18 @@ class BleScannerInterfaceImpl : public BleScannerInterface { jni_thread_wrapper(FROM_HERE, std::move(cb)))); } void ScanFilterAddRemove(int action, int filt_type, int filt_index, int company_id, int company_id_mask, const bluetooth::Uuid* p_uuid, const bluetooth::Uuid* p_uuid_mask, const RawAddress* bd_addr, char addr_type, vector<uint8_t> data, vector<uint8_t> mask, void ScanFilterAdd(int filter_index, std::vector<ApcfCommand> filters, FilterConfigCallback cb) override { BTIF_TRACE_DEBUG("%s, %d, %d", __func__, action, filt_type); BTIF_TRACE_DEBUG("%s: %d", __func__, filter_index); /* If data is passed, both mask and data have to be the same length */ if (data.size() != mask.size() && data.size() != 0 && mask.size() != 0) return; switch (filt_type) { case BTM_BLE_PF_ADDR_FILTER: { tBLE_BD_ADDR target_addr; target_addr.bda = *bd_addr; target_addr.type = addr_type; do_in_bta_thread( FROM_HERE, base::Bind(&BTM_LE_PF_addr_filter, action, filt_index, std::move(target_addr), jni_thread_wrapper(FROM_HERE, Bind(cb, filt_type)))); return; } case BTM_BLE_PF_SRVC_DATA: do_in_bta_thread(FROM_HERE, base::Bind(&BTM_LE_PF_srvc_data, action, filt_index)); return; case BTM_BLE_PF_SRVC_UUID: case BTM_BLE_PF_SRVC_SOL_UUID: { if (p_uuid_mask == NULL) { do_in_bta_thread( FROM_HERE, base::Bind(&BTM_LE_PF_uuid_filter, action, filt_index, filt_type, *p_uuid, BTM_BLE_PF_LOGIC_AND, nullptr, jni_thread_wrapper(FROM_HERE, Bind(cb, filt_type)))); return; } tBTM_BLE_PF_COND_MASK* mask = new tBTM_BLE_PF_COND_MASK; btif_to_bta_uuid_mask(mask, *p_uuid_mask, *p_uuid); do_in_bta_thread( FROM_HERE, base::Bind(&BTM_LE_PF_uuid_filter, action, filt_index, filt_type, *p_uuid, BTM_BLE_PF_LOGIC_AND, base::Owned(mask), jni_thread_wrapper(FROM_HERE, Bind(cb, filt_type)))); return; } case BTM_BLE_PF_LOCAL_NAME: { do_in_bta_thread( FROM_HERE, base::Bind(&BTM_LE_PF_local_name, action, filt_index, std::move(data), jni_thread_wrapper(FROM_HERE, Bind(cb, filt_type)))); return; } case BTM_BLE_PF_MANU_DATA: { do_in_bta_thread( FROM_HERE, base::Bind(&BTM_LE_PF_manu_data, action, filt_index, company_id, company_id_mask, std::move(data), std::move(mask), jni_thread_wrapper(FROM_HERE, Bind(cb, filt_type)))); return; } case BTM_BLE_PF_SRVC_DATA_PATTERN: { do_in_bta_thread( base::Bind( &BTM_LE_PF_set, filter_index, std::move(filters), jni_thread_wrapper( FROM_HERE, base::Bind(&BTM_LE_PF_srvc_data_pattern, action, filt_index, std::move(data), std::move(mask), jni_thread_wrapper(FROM_HERE, Bind(cb, filt_type)))); return; } default: LOG_ERROR(LOG_TAG, "%s: Unknown filter type (%d)!", __func__, action); return; } Bind(std::move(cb), 0 /*TODO: this used to be filter type, unused ?*/)))); } void ScanFilterClear(int filter_index, FilterConfigCallback cb) override { Loading
system/btif/src/btif_gatt_util.cc +0 −25 Original line number Diff line number Diff line Loading @@ -53,31 +53,6 @@ void btif_to_bta_response(tGATTS_RSP* p_dest, btgatt_response_t* p_src) { memcpy(p_dest->attr_value.value, p_src->attr_value.value, GATT_MAX_ATTR_LEN); } void btif_to_bta_uuid_mask(tBTM_BLE_PF_COND_MASK* p_mask, const bluetooth::Uuid& uuid_mask, const bluetooth::Uuid& svc_uuid) { // we use svc_uuid for uuid_mask length picking ? int uuid_len = svc_uuid.GetShortestRepresentationSize(); switch (uuid_len) { case Uuid::kNumBytes16: p_mask->uuid16_mask = uuid_mask.As16Bit(); break; case Uuid::kNumBytes32: p_mask->uuid32_mask = uuid_mask.As32Bit(); break; case Uuid::kNumBytes128: memcpy(p_mask->uuid128_mask, uuid_mask.To128BitLE().data(), Uuid::kNumBytes128); break; default: break; } } /******************************************************************************* * Encrypted link map handling ******************************************************************************/ Loading
system/include/hardware/ble_scanner.h +2 −8 Original line number Diff line number Diff line Loading @@ -86,13 +86,7 @@ class BleScannerInterface { FilterParamSetupCallback cb) = 0; /** Configure a scan filter condition */ virtual void ScanFilterAddRemove(int action, int filt_type, int filt_index, int company_id, int company_id_mask, const bluetooth::Uuid* p_uuid, const bluetooth::Uuid* p_uuid_mask, const RawAddress* bd_addr, char addr_type, std::vector<uint8_t> data, std::vector<uint8_t> p_mask, virtual void ScanFilterAdd(int filter_index, std::vector<ApcfCommand> filters, FilterConfigCallback cb) = 0; /** Clear all scan filter conditions for specific filter index*/ Loading
system/include/hardware/bt_common_types.h +15 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ #include "bluetooth.h" #include <bluetooth/uuid.h> #include <vector> typedef struct { uint8_t client_if; Loading Loading @@ -86,4 +87,18 @@ typedef struct { uint16_t num_of_tracking_entries; } btgatt_filt_param_setup_t; // Advertising Packet Content Filter struct ApcfCommand { uint8_t type; RawAddress address; uint8_t addr_type; bluetooth::Uuid uuid; bluetooth::Uuid uuid_mask; std::vector<uint8_t> name; uint16_t company; uint16_t company_mask; std::vector<uint8_t> data; std::vector<uint8_t> data_mask; }; #endif /* ANDROID_INCLUDE_BT_COMMON_TYPES_H */