Snap for 8598433 from 15693f5e93f0c0d68ebe858c1d4f3f98061c7819 to tm-frc-neuralnetworks-release

Change-Id: If58809417cac39cd0abe137e81e95605cfd935bb
diff --git a/apps/ble_world/ble_world.cc b/apps/ble_world/ble_world.cc
index 4835caa..507b583 100644
--- a/apps/ble_world/ble_world.cc
+++ b/apps/ble_world/ble_world.cc
@@ -40,10 +40,8 @@
 
 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 @@
   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 ac473df..5212891 100644
--- a/chre_api/include/chre_api/chre/ble.h
+++ b/chre_api/include/chre_api/chre/ble.h
@@ -72,7 +72,7 @@
  * 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 @@
 //! 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 @@
 /** @} */
 
 /**
- * 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 @@
 #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 @@
  * 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 @@
  *   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).
  *
- * 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}
+ * 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 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 @@
  * 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 @@
 
   //! 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 a959761..f5aef54 100644
--- a/core/ble_request_manager.cc
+++ b/core/ble_request_manager.cc
@@ -396,9 +396,7 @@
         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 @@
 }
 
 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 654ef09..432a3c0 100644
--- a/core/include/chre/core/ble_request_manager.h
+++ b/core/include/chre/core/ble_request_manager.h
@@ -359,12 +359,6 @@
   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 d3894d4..f3ed88b 100644
--- a/core/tests/ble_request_test.cc
+++ b/core/tests/ble_request_test.cc
@@ -52,7 +52,7 @@
   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 @@
   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 @@
   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 @@
   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 @@
   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/host/hal_generic/common/hal_chre_socket_connection.cc b/host/hal_generic/common/hal_chre_socket_connection.cc
index 8ad38b9..2070508 100644
--- a/host/hal_generic/common/hal_chre_socket_connection.cc
+++ b/host/hal_generic/common/hal_chre_socket_connection.cc
@@ -50,13 +50,10 @@
     IChreSocketCallback *callback) {
   constexpr char kChreSocketName[] = "chre";
 
-  if (!mClient.connectInBackground(kChreSocketName, this)) {
+  mSocketCallbacks = sp<SocketCallbacks>::make(*this, callback);
+  if (!mClient.connectInBackground(kChreSocketName, mSocketCallbacks)) {
     ALOGE("Couldn't start socket client");
   }
-#ifdef CHRE_HAL_SOCKET_METRICS_ENABLED
-  mLastClearedTimestamp = elapsedRealtime();
-#endif  // CHRE_HAL_SOCKET_METRICS_ENABLED
-  mCallback = callback;
 }
 
 bool HalChreSocketConnection::getContextHubs(
@@ -171,14 +168,22 @@
   return mClient.sendMessage(builder.GetBufferPointer(), builder.GetSize());
 }
 
-void HalChreSocketConnection::onMessageReceived(const void *data,
-                                                size_t length) {
-  if (!chre::HostProtocolHost::decodeMessageFromChre(data, length, *this)) {
+HalChreSocketConnection::SocketCallbacks::SocketCallbacks(
+    HalChreSocketConnection &parent, IChreSocketCallback *callback)
+    : mParent(parent), mCallback(callback) {
+#ifdef CHRE_HAL_SOCKET_METRICS_ENABLED
+  mLastClearedTimestamp = elapsedRealtime();
+#endif  // CHRE_HAL_SOCKET_METRICS_ENABLED
+}
+
+void HalChreSocketConnection::SocketCallbacks::onMessageReceived(
+    const void *data, size_t length) {
+  if (!HostProtocolHost::decodeMessageFromChre(data, length, *this)) {
     ALOGE("Failed to decode message");
   }
 }
 
-void HalChreSocketConnection::onConnected() {
+void HalChreSocketConnection::SocketCallbacks::onConnected() {
   ALOGI("Reconnected to CHRE daemon");
   if (mHaveConnected) {
     ALOGI("Reconnected to CHRE daemon");
@@ -187,11 +192,11 @@
   mHaveConnected = true;
 }
 
-void HalChreSocketConnection::onDisconnected() {
+void HalChreSocketConnection::SocketCallbacks::onDisconnected() {
   ALOGW("Lost connection to CHRE daemon");
 }
 
-void HalChreSocketConnection::handleNanoappMessage(
+void HalChreSocketConnection::SocketCallbacks::handleNanoappMessage(
     const ::chre::fbs::NanoappMessageT &message) {
   ALOGD("Got message from nanoapp: ID 0x%" PRIx64, message.app_id);
   mCallback->onNanoappMessage(message);
@@ -220,58 +225,59 @@
           .values{std::move(values)},
       };
 
-      reportMetric(atom);
+      mParent.reportMetric(atom);
     }
   }
 #endif  // CHRE_HAL_SOCKET_METRICS_ENABLED
 }
 
-void HalChreSocketConnection::handleHubInfoResponse(
+void HalChreSocketConnection::SocketCallbacks::handleHubInfoResponse(
     const ::chre::fbs::HubInfoResponseT &response) {
   ALOGD("Got hub info response");
 
-  std::lock_guard<std::mutex> lock(mHubInfoMutex);
-  if (mHubInfoValid) {
+  std::lock_guard<std::mutex> lock(mParent.mHubInfoMutex);
+  if (mParent.mHubInfoValid) {
     ALOGI("Ignoring duplicate/unsolicited hub info response");
   } else {
-    mHubInfoResponse = response;
-    mHubInfoValid = true;
-    mHubInfoCond.notify_all();
+    mParent.mHubInfoResponse = response;
+    mParent.mHubInfoValid = true;
+    mParent.mHubInfoCond.notify_all();
   }
 }
 
-void HalChreSocketConnection::handleNanoappListResponse(
+void HalChreSocketConnection::SocketCallbacks::handleNanoappListResponse(
     const ::chre::fbs::NanoappListResponseT &response) {
   ALOGD("Got nanoapp list response with %zu apps", response.nanoapps.size());
   mCallback->onNanoappListResponse(response);
 }
 
-void HalChreSocketConnection::handleLoadNanoappResponse(
+void HalChreSocketConnection::SocketCallbacks::handleLoadNanoappResponse(
     const ::chre::fbs::LoadNanoappResponseT &response) {
   ALOGD("Got load nanoapp response for transaction %" PRIu32
         " fragment %" PRIu32 " with result %d",
         response.transaction_id, response.fragment_id, response.success);
-  std::unique_lock<std::mutex> lock(mPendingLoadTransactionMutex);
+  std::unique_lock<std::mutex> lock(mParent.mPendingLoadTransactionMutex);
 
   // TODO: Handle timeout in receiving load response
-  if (!mPendingLoadTransaction.has_value()) {
+  if (!mParent.mPendingLoadTransaction.has_value()) {
     ALOGE(
         "Dropping unexpected load response (no pending transaction "
         "exists)");
   } else {
-    FragmentedLoadTransaction &transaction = mPendingLoadTransaction.value();
+    FragmentedLoadTransaction &transaction =
+        mParent.mPendingLoadTransaction.value();
 
-    if (!isExpectedLoadResponseLocked(response)) {
+    if (!mParent.isExpectedLoadResponseLocked(response)) {
       ALOGE("Dropping unexpected load response, expected transaction %" PRIu32
             " fragment %" PRIu32 ", received transaction %" PRIu32
             " fragment %" PRIu32,
-            transaction.getTransactionId(), mCurrentFragmentId,
+            transaction.getTransactionId(), mParent.mCurrentFragmentId,
             response.transaction_id, response.fragment_id);
     } else {
       bool success = false;
       bool continueLoadRequest = false;
       if (response.success && !transaction.isComplete()) {
-        if (sendFragmentedLoadNanoAppRequest(transaction)) {
+        if (mParent.sendFragmentedLoadNanoAppRequest(transaction)) {
           continueLoadRequest = true;
           success = true;
         }
@@ -280,7 +286,7 @@
       }
 
       if (!continueLoadRequest) {
-        mPendingLoadTransaction.reset();
+        mParent.mPendingLoadTransaction.reset();
         lock.unlock();
         mCallback->onTransactionResult(response.transaction_id, success);
       }
@@ -288,7 +294,7 @@
   }
 }
 
-void HalChreSocketConnection::handleUnloadNanoappResponse(
+void HalChreSocketConnection::SocketCallbacks::handleUnloadNanoappResponse(
     const ::chre::fbs::UnloadNanoappResponseT &response) {
   ALOGV("Got unload nanoapp response for transaction %" PRIu32
         " with result %d",
@@ -296,13 +302,13 @@
   mCallback->onTransactionResult(response.transaction_id, response.success);
 }
 
-void HalChreSocketConnection::handleDebugDumpData(
+void HalChreSocketConnection::SocketCallbacks::handleDebugDumpData(
     const ::chre::fbs::DebugDumpDataT &data) {
   ALOGV("Got debug dump data, size %zu", data.debug_str.size());
   mCallback->onDebugDumpData(data);
 }
 
-void HalChreSocketConnection::handleDebugDumpResponse(
+void HalChreSocketConnection::SocketCallbacks::handleDebugDumpResponse(
     const ::chre::fbs::DebugDumpResponseT &response) {
   ALOGV("Got debug dump response, success %d, data count %" PRIu32,
         response.success, response.data_count);
diff --git a/host/hal_generic/common/hal_chre_socket_connection.h b/host/hal_generic/common/hal_chre_socket_connection.h
index 1f8a4a0..983816c 100644
--- a/host/hal_generic/common/hal_chre_socket_connection.h
+++ b/host/hal_generic/common/hal_chre_socket_connection.h
@@ -93,9 +93,7 @@
 /**
  * A helper class that can be used to connect to the CHRE socket.
  */
-class HalChreSocketConnection
-    : public ::android::chre::SocketClient::ICallbacks,
-      public ::android::chre::IChreMessageHandlers {
+class HalChreSocketConnection {
  public:
   HalChreSocketConnection(IChreSocketCallback *callback);
 
@@ -122,27 +120,47 @@
 
   bool onHostEndpointDisconnected(uint16_t hostEndpointId);
 
-  void onMessageReceived(const void *data, size_t length) override;
-  void onConnected() override;
-  void onDisconnected() override;
-  void handleNanoappMessage(
-      const ::chre::fbs::NanoappMessageT &message) override;
-  void handleHubInfoResponse(
-      const ::chre::fbs::HubInfoResponseT &response) override;
-  void handleNanoappListResponse(
-      const ::chre::fbs::NanoappListResponseT &response) override;
-  void handleLoadNanoappResponse(
-      const ::chre::fbs::LoadNanoappResponseT &response) override;
-  void handleUnloadNanoappResponse(
-      const ::chre::fbs::UnloadNanoappResponseT &response) override;
-  void handleDebugDumpData(const ::chre::fbs::DebugDumpDataT &data) override;
-  void handleDebugDumpResponse(
-      const ::chre::fbs::DebugDumpResponseT &response) override;
-
  private:
-  ::android::chre::SocketClient mClient;
+  class SocketCallbacks : public ::android::chre::SocketClient::ICallbacks,
+                          public ::android::chre::IChreMessageHandlers {
+   public:
+    explicit SocketCallbacks(HalChreSocketConnection &parent,
+                             IChreSocketCallback *callback);
 
-  IChreSocketCallback *mCallback = nullptr;
+    void onMessageReceived(const void *data, size_t length) override;
+    void onConnected() override;
+    void onDisconnected() override;
+    void handleNanoappMessage(
+        const ::chre::fbs::NanoappMessageT &message) override;
+    void handleHubInfoResponse(
+        const ::chre::fbs::HubInfoResponseT &response) override;
+    void handleNanoappListResponse(
+        const ::chre::fbs::NanoappListResponseT &response) override;
+    void handleLoadNanoappResponse(
+        const ::chre::fbs::LoadNanoappResponseT &response) override;
+    void handleUnloadNanoappResponse(
+        const ::chre::fbs::UnloadNanoappResponseT &response) override;
+    void handleDebugDumpData(const ::chre::fbs::DebugDumpDataT &data) override;
+    void handleDebugDumpResponse(
+        const ::chre::fbs::DebugDumpResponseT &response) override;
+
+   private:
+    HalChreSocketConnection &mParent;
+    IChreSocketCallback *mCallback = nullptr;
+    bool mHaveConnected = false;
+
+#ifdef CHRE_HAL_SOCKET_METRICS_ENABLED
+    long mLastClearedTimestamp = 0;
+    static constexpr uint32_t kOneDayinMillis = 24 * 60 * 60 * 1000;
+    static constexpr uint16_t kMaxDailyReportedApWakeUp = 200;
+    uint16_t mNanoappWokeUpCount = 0;
+    std::mutex mNanoappWokeApCountMutex;
+#endif  // CHRE_HAL_SOCKET_METRICS_ENABLED
+  };
+
+  sp<SocketCallbacks> mSocketCallbacks;
+
+  ::android::chre::SocketClient mClient;
 
   ::chre::fbs::HubInfoResponseT mHubInfoResponse;
   bool mHubInfoValid = false;
@@ -154,16 +172,6 @@
   std::optional<chre::FragmentedLoadTransaction> mPendingLoadTransaction;
   std::mutex mPendingLoadTransactionMutex;
 
-  bool mHaveConnected = false;
-
-#ifdef CHRE_HAL_SOCKET_METRICS_ENABLED
-  long mLastClearedTimestamp = 0;
-  static constexpr uint32_t kOneDayinMillis = 24 * 60 * 60 * 1000;
-  static constexpr uint16_t kMaxDailyReportedApWakeUp = 200;
-  uint16_t mNanoappWokeUpCount = 0;
-  std::mutex mNanoappWokeApCountMutex;
-#endif  // CHRE_HAL_SOCKET_METRICS_ENABLED
-
   /**
    * Checks to see if a load response matches the currently pending
    * fragmented load transaction. mPendingLoadTransactionMutex must
diff --git a/platform/linux/pal_ble.cc b/platform/linux/pal_ble.cc
index 7cb074f..2762170 100644
--- a/platform/linux/pal_ble.cc
+++ b/platform/linux/pal_ble.cc
@@ -92,7 +92,7 @@
 
 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 5c3ff8e..eb65b2e 100644
--- a/test/simulation/ble_test.cc
+++ b/test/simulation/ble_test.cc
@@ -81,7 +81,7 @@
   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 {