Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 99172974 authored by Michael Sun's avatar Michael Sun
Browse files

btaa: subscribe to SystemSuspend for wakelock notification

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
parent 0e67533c
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -19,9 +19,11 @@
#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,
+25 −0
Original line number Diff line number Diff line
@@ -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