summaryrefslogtreecommitdiff
path: root/sensors/2.0/default/Sensors.cpp
diff options
context:
space:
mode:
authorBrian Stack <bstack@google.com>2018-10-19 15:58:09 -0700
committerBrian Stack <bstack@google.com>2018-10-24 16:26:27 -0700
commit475d4d4d5ecd13ee614009dabf9b1fb6b87dd966 (patch)
treec5dba9ae696e7ce1d11cd7413dd688362ed6a567 /sensors/2.0/default/Sensors.cpp
parent60fcdcf635736cecbadcbbbd26e9858af671bbbe (diff)
Default implementation for initialize()
Implements the default initialize() function for Sensors HAL 2.0 Bug: 111070257 Test: Builds Change-Id: I1d1f0d732d931adaf12ae40167eea484887fb140
Diffstat (limited to 'sensors/2.0/default/Sensors.cpp')
-rw-r--r--sensors/2.0/default/Sensors.cpp51
1 files changed, 46 insertions, 5 deletions
diff --git a/sensors/2.0/default/Sensors.cpp b/sensors/2.0/default/Sensors.cpp
index 181349d4fb..ea6e000286 100644
--- a/sensors/2.0/default/Sensors.cpp
+++ b/sensors/2.0/default/Sensors.cpp
@@ -16,6 +16,8 @@
#include "Sensors.h"
+#include <log/log.h>
+
namespace android {
namespace hardware {
namespace sensors {
@@ -28,6 +30,12 @@ using ::android::hardware::sensors::V1_0::RateLevel;
using ::android::hardware::sensors::V1_0::Result;
using ::android::hardware::sensors::V1_0::SharedMemInfo;
+Sensors::Sensors() : mEventQueueFlag(nullptr) {}
+
+Sensors::~Sensors() {
+ deleteEventFlag();
+}
+
// Methods from ::android::hardware::sensors::V2_0::ISensors follow.
Return<void> Sensors::getSensorsList(getSensorsList_cb /* _hidl_cb */) {
// TODO implement
@@ -45,11 +53,37 @@ Return<Result> Sensors::activate(int32_t /* sensorHandle */, bool /* enabled */)
}
Return<Result> Sensors::initialize(
- const ::android::hardware::MQDescriptorSync<Event>& /* eventQueueDescriptor */,
- const ::android::hardware::MQDescriptorSync<uint32_t>& /* wakeLockDescriptor */,
- const sp<ISensorsCallback>& /* sensorsCallback */) {
- // TODO implement
- return Result{};
+ const ::android::hardware::MQDescriptorSync<Event>& eventQueueDescriptor,
+ const ::android::hardware::MQDescriptorSync<uint32_t>& wakeLockDescriptor,
+ const sp<ISensorsCallback>& sensorsCallback) {
+ Result result = Result::OK;
+
+ // Save a reference to the callback
+ mCallback = sensorsCallback;
+
+ // Create the Event FMQ from the eventQueueDescriptor. Reset the read/write positions.
+ mEventQueue =
+ std::make_unique<EventMessageQueue>(eventQueueDescriptor, true /* resetPointers */);
+
+ // Ensure that any existing EventFlag is properly deleted
+ deleteEventFlag();
+
+ // Create the EventFlag that is used to signal to the framework that sensor events have been
+ // written to the Event FMQ
+ if (EventFlag::createEventFlag(mEventQueue->getEventFlagWord(), &mEventQueueFlag) != OK) {
+ result = Result::BAD_VALUE;
+ }
+
+ // Create the Wake Lock FMQ that is used by the framework to communicate whenever WAKE_UP
+ // events have been successfully read and handled by the framework.
+ mWakeLockQueue =
+ std::make_unique<WakeLockMessageQueue>(wakeLockDescriptor, true /* resetPointers */);
+
+ if (!mCallback || !mEventQueue || !mWakeLockQueue || mEventQueueFlag == nullptr) {
+ result = Result::BAD_VALUE;
+ }
+
+ return result;
}
Return<Result> Sensors::batch(int32_t /* sensorHandle */, int64_t /* samplingPeriodNs */,
@@ -86,6 +120,13 @@ Return<void> Sensors::configDirectReport(int32_t /* sensorHandle */, int32_t /*
return Void();
}
+void Sensors::deleteEventFlag() {
+ status_t status = EventFlag::deleteEventFlag(&mEventQueueFlag);
+ if (status != OK) {
+ ALOGI("Failed to delete event flag: %d", status);
+ }
+}
+
} // namespace implementation
} // namespace V2_0
} // namespace sensors