OSDN Git Service

btaa: subscribe to SystemSuspend for wakelock notification
authorMichael Sun <michaelfsun@google.com>
Fri, 6 Nov 2020 08:18:19 +0000 (08:18 +0000)
committerMichael Sun <michaelfsun@google.com>
Tue, 10 Nov 2020 08:29:00 +0000 (08:29 +0000)
Subscribe to the SystemSuspend provided wakelock information by the
Bluetooth wakelock name.

Tag: #feature
Bug: 170315554
Test: verified BTAA module receives specified wakelock notification

Change-Id: Iad4dbf36690aea2ba9b1f151f0d0d118e6015781

btaa/include/activity_attribution.h
btaa/src/activity_attribution.cc

index a84066f..137fc67 100644 (file)
 #pragma once
 
 #include <aidl/android/system/suspend/BnSuspendCallback.h>
+#include <aidl/android/system/suspend/BnWakelockCallback.h>
 #include <hardware/bt_activity_attribution.h>
 
 using aidl::android::system::suspend::BnSuspendCallback;
+using aidl::android::system::suspend::BnWakelockCallback;
 using Status = ::ndk::ScopedAStatus;
 
 namespace bluetooth {
@@ -34,6 +36,12 @@ class ActivityAttribution {
   static void Initialize(ActivityAttributionCallbacks* callbacks);
 };
 
+class WakelockCallback : public BnWakelockCallback {
+ public:
+  Status notifyAcquired(void) override;
+  Status notifyReleased(void) override;
+};
+
 class WakeupCallback : public BnSuspendCallback {
  public:
   Status notifyWakeup(bool success,
index 0321ca1..07fd58c 100644 (file)
@@ -29,6 +29,8 @@ using namespace ndk;
 namespace bluetooth {
 namespace activity_attribution {
 
+static const std::string kBtWakelockName("hal_bluetooth_lock");
+
 class ActivityAttributionImpl;
 static std::shared_ptr<ISuspendControlService> controlService;
 static std::unique_ptr<ActivityAttributionImpl> instance;
@@ -38,6 +40,8 @@ class ActivityAttributionImpl : public ActivityAttribution {
   ~ActivityAttributionImpl() override = default;
   ActivityAttributionImpl(ActivityAttributionCallbacks* callbacks);
 
+  void onWakelockAcquired(void);
+  void onWakelockReleased(void);
   void onWakeup(bool success, const std::vector<std::string>& wakeupReasons);
 
  private:
@@ -48,9 +52,23 @@ ActivityAttributionImpl::ActivityAttributionImpl(
     ActivityAttributionCallbacks* callbacks)
     : mCallbacks(callbacks) {}
 
+void ActivityAttributionImpl::onWakelockAcquired(void) {}
+
+void ActivityAttributionImpl::onWakelockReleased(void) {}
+
 void ActivityAttributionImpl::onWakeup(
     bool success, const std::vector<std::string>& wakeupReasons) {}
 
+Status WakelockCallback::notifyAcquired(void) {
+  instance->onWakelockAcquired();
+  return Status::ok();
+}
+
+Status WakelockCallback::notifyReleased(void) {
+  instance->onWakelockReleased();
+  return Status::ok();
+}
+
 Status WakeupCallback::notifyWakeup(
     bool success, const std::vector<std::string>& wakeupReasons) {
   instance->onWakeup(success, wakeupReasons);
@@ -81,6 +99,13 @@ void ActivityAttribution::Initialize(ActivityAttributionCallbacks* callbacks) {
     LOG(ERROR) << __func__ << " Fail to register wakeup callback";
     return;
   }
+
+  register_callback_status = controlService->registerWakelockCallback(
+      SharedRefBase::make<WakelockCallback>(), kBtWakelockName, &is_registered);
+  if (!is_registered || !register_callback_status.isOk()) {
+    LOG(ERROR) << __func__ << " Fail to register wakelock callback";
+    return;
+  }
 }
 
 }  // namespace activity_attribution