diff options
author | Brian Stack <bstack@google.com> | 2018-10-19 15:58:09 -0700 |
---|---|---|
committer | Brian Stack <bstack@google.com> | 2018-10-24 16:26:27 -0700 |
commit | 475d4d4d5ecd13ee614009dabf9b1fb6b87dd966 (patch) | |
tree | c5dba9ae696e7ce1d11cd7413dd688362ed6a567 /sensors/2.0/default/Sensors.cpp | |
parent | 60fcdcf635736cecbadcbbbd26e9858af671bbbe (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.cpp | 51 |
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 |