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

Commit cc3d4377 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Default implementation for initialize()"

parents b8c39d62 475d4d4d
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -26,6 +26,8 @@ cc_binary {
    shared_libs: [
        "android.hardware.sensors@1.0",
        "android.hardware.sensors@2.0",
        "libcutils",
        "libfmq",
        "libhidlbase",
        "libhidltransport",
        "liblog",
+46 −5
Original line number Diff line number Diff line
@@ -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
+38 −0
Original line number Diff line number Diff line
@@ -18,9 +18,12 @@
#define ANDROID_HARDWARE_SENSORS_V2_0_SENSORS_H

#include <android/hardware/sensors/2.0/ISensors.h>
#include <fmq/MessageQueue.h>
#include <hidl/MQDescriptor.h>
#include <hidl/Status.h>

#include <memory>

namespace android {
namespace hardware {
namespace sensors {
@@ -28,10 +31,13 @@ namespace V2_0 {
namespace implementation {

using ::android::sp;
using ::android::hardware::EventFlag;
using ::android::hardware::hidl_array;
using ::android::hardware::hidl_memory;
using ::android::hardware::hidl_string;
using ::android::hardware::hidl_vec;
using ::android::hardware::MessageQueue;
using ::android::hardware::MQDescriptor;
using ::android::hardware::Return;
using ::android::hardware::Void;

@@ -42,6 +48,9 @@ struct Sensors : public ISensors {
    using Result = ::android::hardware::sensors::V1_0::Result;
    using SharedMemInfo = ::android::hardware::sensors::V1_0::SharedMemInfo;

    Sensors();
    virtual ~Sensors();

    // Methods from ::android::hardware::sensors::V2_0::ISensors follow.
    Return<void> getSensorsList(getSensorsList_cb _hidl_cb) override;

@@ -68,6 +77,35 @@ struct Sensors : public ISensors {

    Return<void> configDirectReport(int32_t sensorHandle, int32_t channelHandle, RateLevel rate,
                                    configDirectReport_cb _hidl_cb) override;

   private:
    /**
     * Utility function to delete the Event Flag
     */
    void deleteEventFlag();

    using EventMessageQueue = MessageQueue<Event, kSynchronizedReadWrite>;
    using WakeLockMessageQueue = MessageQueue<uint32_t, kSynchronizedReadWrite>;

    /**
     * The Event FMQ where sensor events are written
     */
    std::unique_ptr<EventMessageQueue> mEventQueue;

    /**
     * The Wake Lock FMQ that is read to determine when the framework has handled WAKE_UP events
     */
    std::unique_ptr<WakeLockMessageQueue> mWakeLockQueue;

    /**
     * Event Flag to signal to the framework when sensor events are available to be read
     */
    EventFlag* mEventQueueFlag;

    /**
     * Callback for asynchronous events, such as dynamic sensor connections.
     */
    sp<ISensorsCallback> mCallback;
};

}  // namespace implementation