aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnna Herrera <annaherrera@google.com>2022-05-14 01:37:28 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-05-14 01:37:28 +0000
commit9c0f103a4afbc40eb5d6b729436ce413b525adb4 (patch)
tree03b13dcab9187e86c67d0231a994bddbfe94e8b4
parent161fff24d0b55eaa5c43d09a309df7bb431625f1 (diff)
parent15693f5e93f0c0d68ebe858c1d4f3f98061c7819 (diff)
downloadchre-9c0f103a4afbc40eb5d6b729436ce413b525adb4.tar.gz
Sync CHRE BLE API with legacy APCF version am: 15693f5e93
Original change: https://googleplex-android-review.googlesource.com/c/platform/system/chre/+/18289789 Change-Id: I195423a6ac84620d048b5eaf00313f7795af4e35 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--apps/ble_world/ble_world.cc24
-rw-r--r--chre_api/include/chre_api/chre/ble.h70
-rw-r--r--core/ble_request_manager.cc22
-rw-r--r--core/include/chre/core/ble_request_manager.h6
-rw-r--r--core/tests/ble_request_test.cc10
-rw-r--r--platform/linux/pal_ble.cc2
-rw-r--r--test/simulation/ble_test.cc2
7 files changed, 49 insertions, 87 deletions
diff --git a/apps/ble_world/ble_world.cc b/apps/ble_world/ble_world.cc
index 4835caa1..507b5833 100644
--- a/apps/ble_world/ble_world.cc
+++ b/apps/ble_world/ble_world.cc
@@ -40,10 +40,8 @@ const chreBleScanMode kScanModes[] = {CHRE_BLE_SCAN_MODE_BACKGROUND,
enum ScanRequestType {
NO_FILTER = 0,
- SERVICE_DATA_UUID_16 = 1,
- SERVICE_DATA_UUID_32 = 2,
- SERVICE_DATA_UUID_128 = 3,
- STOP_SCAN = 4,
+ SERVICE_DATA_16 = 1,
+ STOP_SCAN = 2,
};
chreBleScanFilter *getBleScanFilter(ScanRequestType &scanRequestType) {
@@ -56,24 +54,12 @@ chreBleScanFilter *getBleScanFilter(ScanRequestType &scanRequestType) {
switch (scanRequestType) {
case NO_FILTER:
filter = nullptr;
- scanRequestType = SERVICE_DATA_UUID_16;
+ scanRequestType = SERVICE_DATA_16;
break;
- case SERVICE_DATA_UUID_16:
- scanFilter->type = CHRE_BLE_FILTER_TYPE_SERVICE_DATA_UUID_16;
+ case SERVICE_DATA_16:
+ scanFilter->type = CHRE_BLE_AD_TYPE_SERVICE_DATA_WITH_UUID_16;
scanFilter->len = 2;
filter->scanFilters = scanFilter.release();
- scanRequestType = SERVICE_DATA_UUID_32;
- break;
- case SERVICE_DATA_UUID_32:
- scanFilter->type = CHRE_BLE_FILTER_TYPE_SERVICE_DATA_UUID_32;
- scanFilter->len = 4;
- filter->scanFilters = scanFilter.release();
- scanRequestType = SERVICE_DATA_UUID_128;
- break;
- case SERVICE_DATA_UUID_128:
- scanFilter->type = CHRE_BLE_FILTER_TYPE_SERVICE_DATA_UUID_128;
- scanFilter->len = 16;
- filter->scanFilters = scanFilter.release();
scanRequestType = STOP_SCAN;
break;
case STOP_SCAN:
diff --git a/chre_api/include/chre_api/chre/ble.h b/chre_api/include/chre_api/chre/ble.h
index ac473df8..5212891f 100644
--- a/chre_api/include/chre_api/chre/ble.h
+++ b/chre_api/include/chre_api/chre/ble.h
@@ -72,7 +72,7 @@ extern "C" {
* 0x0157) for that particular filtering capability, as found in
* https://source.android.com/devices/bluetooth/hci_requirements
*
- * For example, the Service Data UUID filter has a sub-command of 0x7; hence
+ * For example, the Service Data filter has a sub-command of 0x7; hence
* the filtering capability is indicated by (1 << 0x7).
*
* @defgroup CHRE_BLE_FILTER_CAPABILITIES
@@ -84,9 +84,9 @@ extern "C" {
//! CHRE BLE supports RSSI filters
#define CHRE_BLE_FILTER_CAPABILITIES_RSSI UINT32_C(1 << 1)
-//! CHRE BLE supports Service Data UUID filters (Corresponding HCI OCF: 0x0157,
-//! Sub: 0x07)
-#define CHRE_BLE_FILTER_CAPABILITIES_SERVICE_DATA_UUID UINT32_C(1 << 7)
+//! CHRE BLE supports Service Data filters (Corresponding HCI OCF: 0x0157,
+//! Sub-command: 0x07)
+#define CHRE_BLE_FILTER_CAPABILITIES_SERVICE_DATA UINT32_C(1 << 7)
/** @} */
/**
@@ -126,11 +126,6 @@ extern "C" {
/** @} */
/**
- * Maximum length of a BLE UUID in bytes.
- */
-#define CHRE_BLE_UUID_LEN_MAX (16)
-
-/**
* Maximum BLE (legacy) advertisement payload data length, in bytes
* This is calculated by subtracting 2 (type + len) from 31 (max payload).
*/
@@ -157,6 +152,11 @@ extern "C" {
#define CHRE_BLE_TX_POWER_NONE (127)
/**
+ * Indicates ADI field was not provided in advertisement.
+ */
+#define CHRE_BLE_ADI_NONE (0xFF)
+
+/**
* The CHRE BLE advertising event type is based on the BT Core Spec v5.2,
* Vol 4, Part E, Section 7.7.65.13, LE Extended Advertising Report event,
* Event_Type.
@@ -239,15 +239,9 @@ enum chreBleScanMode {
* Assigned Numbers, Generic Access Profile.
* ref: https://www.bluetooth.com/specifications/assigned-numbers/
*/
-enum chreBleScanFilterAdType {
- //! Service Data - 16-bit UUID
- CHRE_BLE_FILTER_TYPE_SERVICE_DATA_UUID_16 = 0x16,
-
- //! Service Data - 32-bit UUID
- CHRE_BLE_FILTER_TYPE_SERVICE_DATA_UUID_32 = 0x20,
-
- //! Service Data - 128-bit UUID
- CHRE_BLE_FILTER_TYPE_SERVICE_DATA_UUID_128 = 0x21,
+enum chreBleAdType {
+ //! Service Data with 16-bit UUID
+ CHRE_BLE_AD_TYPE_SERVICE_DATA_WITH_UUID_16 = 0x16,
};
/**
@@ -259,26 +253,32 @@ enum chreBleScanFilterAdType {
* data & dataMask == advData & dataMask
* where advData is the advertisement packet data for the specified AD type.
*
- * The syntax of CHRE scan filter definitions are based on the upcoming Android
- * Advertising Packet Content Filter (APCF) HCI requirement subtype 0x08
- * ref:
- * https://source.android.com/devices/bluetooth/hci_requirements#le_apcf_command-set_filtering_parameters_sub_cmd
- * and specific AD Types among those defined in the Bluetooth spec Assigned
- * Numbers, Generic Access Profile
- * ref: https://www.bluetooth.com/specifications/assigned-numbers/
+ * The CHRE generic filter structure represents a generic filter on an AD Type
+ * as defined in the Bluetooth spec Assigned Numbers, Generic Access Profile
+ * (ref: https://www.bluetooth.com/specifications/assigned-numbers/). This
+ * generic structure is used by the Advertising Packet Content Filter
+ * (APCF) HCI generic AD type sub-command 0x08 (ref:
+ * https://source.android.com/devices/bluetooth/hci_requirements#le_apcf_command).
+ *
+ * Note that the CHRE implementation may not support every kind of filter that
+ * can be represented by this structure. Use chreBleGetFilterCapabilities() to
+ * discover supported filtering capabilities at runtime.
*
- * For example, to add a 32-bit service data UUID filter requiring the most
- * significant byte to be 0x42, the following settings would be used:
- * type = CHRE_BLE_FILTER_TYPE_SERVICE_DATA_UUID_32
- * len = 4
- * data = {0x42, 0, 0, 0}
- * dataMask = {0xff, 0, 0, 0}
+ * For example, to filter on a 16 bit service data UUID of 0xFE2C, the following
+ * settings would be used:
+ * type = CHRE_BLE_AD_TYPE_SERVICE_DATA_WITH_UUID_16
+ * len = 2
+ * data = {0xFE, 0x2C}
+ * dataMask = {0xFF, 0xFF}
*/
struct chreBleGenericFilter {
- //! Acceptable values among enum chreBleScanFilterAdType
+ //! Acceptable values among enum chreBleAdType
uint8_t type;
- //! Length of data and dataMask
+ /**
+ * Length of data and dataMask. AD payloads shorter than this length will not
+ * be matched by the filter. Length must be greater than 0.
+ */
uint8_t len;
//! Used in combination with dataMask to filter an advertisement
@@ -298,7 +298,7 @@ struct chreBleGenericFilter {
* to take advantage of CHRE scan filters as much as possible, but must design
* their logic as to not depend on CHRE filtering.
*
- * The syntax of CHRE scan filter definitions are based on the upcoming Android
+ * The syntax of CHRE scan filter definitions are based on the Android
* Advertising Packet Content Filter (APCF) HCI requirement subtype 0x08
* ref:
* https://source.android.com/devices/bluetooth/hci_requirements#le_apcf_command-set_filtering_parameters_sub_cmd
@@ -402,7 +402,7 @@ struct chreBleAdvertisingReport {
//! Value of the Advertising SID subfield in the ADI field of the PDU among
//! the range of [0, 0x0f].
- //! A value of 0xff indicates no ADI field was provided.
+ //! CHRE_BLE_ADI_NONE indicates no ADI field was provided.
//! Other values are reserved.
uint8_t advertisingSid;
diff --git a/core/ble_request_manager.cc b/core/ble_request_manager.cc
index a959761d..f5aef540 100644
--- a/core/ble_request_manager.cc
+++ b/core/ble_request_manager.cc
@@ -396,9 +396,7 @@ bool BleRequestManager::validateParams(const BleRequest &request) {
valid = false;
break;
}
-
- uint8_t expectedLen = getFilterLenByAdType(filter.type);
- if (expectedLen != filter.len) {
+ if (filter.len == 0 || filter.len > CHRE_BLE_DATA_LEN_MAX) {
valid = false;
break;
}
@@ -426,23 +424,7 @@ void BleRequestManager::postAsyncResultEventFatal(uint16_t instanceId,
}
bool BleRequestManager::isValidAdType(uint8_t adType) {
- return adType == CHRE_BLE_FILTER_TYPE_SERVICE_DATA_UUID_16 ||
- adType == CHRE_BLE_FILTER_TYPE_SERVICE_DATA_UUID_32 ||
- adType == CHRE_BLE_FILTER_TYPE_SERVICE_DATA_UUID_128;
-}
-
-uint8_t BleRequestManager::getFilterLenByAdType(uint8_t adType) {
- switch (adType) {
- case CHRE_BLE_FILTER_TYPE_SERVICE_DATA_UUID_16:
- return 2;
- case CHRE_BLE_FILTER_TYPE_SERVICE_DATA_UUID_32:
- return 4;
- case CHRE_BLE_FILTER_TYPE_SERVICE_DATA_UUID_128:
- return 16;
- default:
- CHRE_ASSERT(false);
- return UINT8_MAX;
- }
+ return adType == CHRE_BLE_AD_TYPE_SERVICE_DATA_WITH_UUID_16;
}
bool BleRequestManager::bleSettingEnabled() {
diff --git a/core/include/chre/core/ble_request_manager.h b/core/include/chre/core/ble_request_manager.h
index 654ef096..432a3c02 100644
--- a/core/include/chre/core/ble_request_manager.h
+++ b/core/include/chre/core/ble_request_manager.h
@@ -359,12 +359,6 @@ class BleRequestManager : public NonCopyable {
static bool isValidAdType(uint8_t adType);
/**
- * @return Valid length associated with a given advertisement type. UINT8_MAX
- * if ad type is invalid.
- */
- static uint8_t getFilterLenByAdType(uint8_t adType);
-
- /**
* @return true if BLE setting is enabled.
*/
bool bleSettingEnabled();
diff --git a/core/tests/ble_request_test.cc b/core/tests/ble_request_test.cc
index d3894d46..f3ed88b3 100644
--- a/core/tests/ble_request_test.cc
+++ b/core/tests/ble_request_test.cc
@@ -52,7 +52,7 @@ TEST(BleRequest, MergeWithReplacesParametersOfDisabledRequest) {
filter.rssiThreshold = -5;
filter.scanFilterCount = 1;
auto scanFilters = std::make_unique<chreBleGenericFilter>();
- scanFilters->type = CHRE_BLE_FILTER_TYPE_SERVICE_DATA_UUID_16;
+ scanFilters->type = CHRE_BLE_AD_TYPE_SERVICE_DATA_WITH_UUID_16;
scanFilters->len = 2;
filter.scanFilters = scanFilters.get();
BleRequest enabled(0, true, CHRE_BLE_SCAN_MODE_AGGRESSIVE, 20, &filter);
@@ -65,7 +65,7 @@ TEST(BleRequest, MergeWithReplacesParametersOfDisabledRequest) {
EXPECT_EQ(20, mergedRequest.getReportDelayMs());
EXPECT_EQ(-5, mergedRequest.getRssiThreshold());
EXPECT_EQ(1, mergedRequest.getGenericFilters().size());
- EXPECT_EQ(CHRE_BLE_FILTER_TYPE_SERVICE_DATA_UUID_16,
+ EXPECT_EQ(CHRE_BLE_AD_TYPE_SERVICE_DATA_WITH_UUID_16,
mergedRequest.getGenericFilters()[0].type);
EXPECT_EQ(2, mergedRequest.getGenericFilters()[0].len);
}
@@ -92,7 +92,7 @@ TEST(BleRequest, IsEquivalentToAdvanced) {
filter.rssiThreshold = -5;
filter.scanFilterCount = 1;
auto scanFilters = std::make_unique<chreBleGenericFilter>();
- scanFilters->type = CHRE_BLE_FILTER_TYPE_SERVICE_DATA_UUID_16;
+ scanFilters->type = CHRE_BLE_AD_TYPE_SERVICE_DATA_WITH_UUID_16;
scanFilters->len = 4;
filter.scanFilters = scanFilters.get();
@@ -107,7 +107,7 @@ TEST(BleRequest, IsNotEquivalentToAdvanced) {
filter.rssiThreshold = -5;
filter.scanFilterCount = 1;
auto scanFilters = std::make_unique<chreBleGenericFilter>();
- scanFilters->type = CHRE_BLE_FILTER_TYPE_SERVICE_DATA_UUID_16;
+ scanFilters->type = CHRE_BLE_AD_TYPE_SERVICE_DATA_WITH_UUID_16;
scanFilters->len = 4;
filter.scanFilters = scanFilters.get();
@@ -126,7 +126,7 @@ TEST(BleRequest, GetScanFilter) {
filter.rssiThreshold = -5;
filter.scanFilterCount = 1;
auto scanFilters = std::make_unique<chreBleGenericFilter>();
- scanFilters->type = CHRE_BLE_FILTER_TYPE_SERVICE_DATA_UUID_16;
+ scanFilters->type = CHRE_BLE_AD_TYPE_SERVICE_DATA_WITH_UUID_16;
scanFilters->len = 4;
filter.scanFilters = scanFilters.get();
diff --git a/platform/linux/pal_ble.cc b/platform/linux/pal_ble.cc
index 7cb074f7..27621707 100644
--- a/platform/linux/pal_ble.cc
+++ b/platform/linux/pal_ble.cc
@@ -92,7 +92,7 @@ uint32_t chrePalBleGetCapabilities() {
uint32_t chrePalBleGetFilterCapabilities() {
return CHRE_BLE_FILTER_CAPABILITIES_RSSI |
- CHRE_BLE_FILTER_CAPABILITIES_SERVICE_DATA_UUID;
+ CHRE_BLE_FILTER_CAPABILITIES_SERVICE_DATA;
}
bool chrePalBleStartScan(chreBleScanMode mode, uint32_t /* reportDelayMs */,
diff --git a/test/simulation/ble_test.cc b/test/simulation/ble_test.cc
index 5c3ff8e7..eb65b2e6 100644
--- a/test/simulation/ble_test.cc
+++ b/test/simulation/ble_test.cc
@@ -81,7 +81,7 @@ TEST_F(TestBase, BleCapabilitiesTest) {
sendEventToNanoapp(app, GET_FILTER_CAPABILITIES);
waitForEvent(GET_FILTER_CAPABILITIES, &capabilities);
ASSERT_EQ(capabilities, CHRE_BLE_FILTER_CAPABILITIES_RSSI |
- CHRE_BLE_FILTER_CAPABILITIES_SERVICE_DATA_UUID);
+ CHRE_BLE_FILTER_CAPABILITIES_SERVICE_DATA);
}
struct BleTestNanoapp : public TestNanoapp {