#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 {
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,
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;
~ActivityAttributionImpl() override = default;
ActivityAttributionImpl(ActivityAttributionCallbacks* callbacks);
+ void onWakelockAcquired(void);
+ void onWakelockReleased(void);
void onWakeup(bool success, const std::vector<std::string>& wakeupReasons);
private:
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);
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