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

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

Merge "Notify Wake Lock Queue's EventFlag after write"

parents d327d936 a24e7d4f
Loading
Loading
Loading
Loading
+21 −4
Original line number Original line Diff line number Diff line
@@ -35,6 +35,7 @@ using namespace android::hardware::sensors::V1_0;
using namespace android::hardware::sensors::V1_0::implementation;
using namespace android::hardware::sensors::V1_0::implementation;
using android::hardware::sensors::V2_0::ISensorsCallback;
using android::hardware::sensors::V2_0::ISensorsCallback;
using android::hardware::sensors::V2_0::EventQueueFlagBits;
using android::hardware::sensors::V2_0::EventQueueFlagBits;
using android::hardware::sensors::V2_0::WakeLockQueueFlagBits;
using android::hardware::hidl_vec;
using android::hardware::hidl_vec;
using android::hardware::Return;
using android::hardware::Return;
using android::SensorDeviceUtils::HidlServiceRegistrationWaiter;
using android::SensorDeviceUtils::HidlServiceRegistrationWaiter;
@@ -94,6 +95,8 @@ struct SensorsCallback : public ISensorsCallback {
SensorDevice::SensorDevice()
SensorDevice::SensorDevice()
        : mHidlTransportErrors(20),
        : mHidlTransportErrors(20),
          mRestartWaiter(new HidlServiceRegistrationWaiter()),
          mRestartWaiter(new HidlServiceRegistrationWaiter()),
          mEventQueueFlag(nullptr),
          mWakeLockQueueFlag(nullptr),
          mReconnecting(false) {
          mReconnecting(false) {
    if (!connectHidlService()) {
    if (!connectHidlService()) {
        return;
        return;
@@ -137,6 +140,11 @@ SensorDevice::~SensorDevice() {
        hardware::EventFlag::deleteEventFlag(&mEventQueueFlag);
        hardware::EventFlag::deleteEventFlag(&mEventQueueFlag);
        mEventQueueFlag = nullptr;
        mEventQueueFlag = nullptr;
    }
    }

    if (mWakeLockQueueFlag != nullptr) {
        hardware::EventFlag::deleteEventFlag(&mWakeLockQueueFlag);
        mWakeLockQueueFlag = nullptr;
    }
}
}


bool SensorDevice::connectHidlService() {
bool SensorDevice::connectHidlService() {
@@ -198,10 +206,16 @@ SensorDevice::HalConnectionStatus SensorDevice::connectHidlServiceV2_0() {
                SensorEventQueue::MAX_RECEIVE_BUFFER_EVENT_COUNT,
                SensorEventQueue::MAX_RECEIVE_BUFFER_EVENT_COUNT,
                true /* configureEventFlagWord */);
                true /* configureEventFlagWord */);


        hardware::EventFlag::deleteEventFlag(&mEventQueueFlag);
        hardware::EventFlag::createEventFlag(mEventQueue->getEventFlagWord(), &mEventQueueFlag);
        hardware::EventFlag::createEventFlag(mEventQueue->getEventFlagWord(), &mEventQueueFlag);


        hardware::EventFlag::deleteEventFlag(&mWakeLockQueueFlag);
        hardware::EventFlag::createEventFlag(mWakeLockQueue->getEventFlagWord(),
                                             &mWakeLockQueueFlag);

        CHECK(mSensors != nullptr && mEventQueue != nullptr &&
        CHECK(mSensors != nullptr && mEventQueue != nullptr &&
                mWakeLockQueue != nullptr && mEventQueueFlag != nullptr);
                mWakeLockQueue != nullptr && mEventQueueFlag != nullptr &&
                mWakeLockQueueFlag != nullptr);


        status_t status = StatusFromResult(checkReturn(mSensors->initialize(
        status_t status = StatusFromResult(checkReturn(mSensors->initialize(
                *mEventQueue->getDesc(),
                *mEventQueue->getDesc(),
@@ -512,11 +526,14 @@ Return<void> SensorDevice::onDynamicSensorsDisconnected(
}
}


void SensorDevice::writeWakeLockHandled(uint32_t count) {
void SensorDevice::writeWakeLockHandled(uint32_t count) {
    if (mSensors != nullptr && mSensors->supportsMessageQueues() &&
    if (mSensors != nullptr && mSensors->supportsMessageQueues()) {
            !mWakeLockQueue->write(&count)) {
        if (mWakeLockQueue->write(&count)) {
            mWakeLockQueueFlag->wake(asBaseType(WakeLockQueueFlagBits::DATA_WRITTEN));
        } else {
            ALOGW("Failed to write wake lock handled");
            ALOGW("Failed to write wake lock handled");
        }
        }
    }
    }
}


void SensorDevice::autoDisable(void *ident, int handle) {
void SensorDevice::autoDisable(void *ident, int handle) {
    Mutex::Autolock _l(mLock);
    Mutex::Autolock _l(mLock);
+1 −0
Original line number Original line Diff line number Diff line
@@ -238,6 +238,7 @@ private:
    std::unique_ptr<WakeLockQueue> mWakeLockQueue;
    std::unique_ptr<WakeLockQueue> mWakeLockQueue;


    hardware::EventFlag* mEventQueueFlag;
    hardware::EventFlag* mEventQueueFlag;
    hardware::EventFlag* mWakeLockQueueFlag;


    std::array<Event, SensorEventQueue::MAX_RECEIVE_BUFFER_EVENT_COUNT> mEventBuffer;
    std::array<Event, SensorEventQueue::MAX_RECEIVE_BUFFER_EVENT_COUNT> mEventBuffer;