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

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

Merge "Send wake event to ISensorHalWrapper fmq when switching to Hal Bypass Mode" into main

parents 415c59e4 d8119dab
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -178,6 +178,11 @@ ssize_t AidlSensorHalWrapper::pollFmq(sensors_event_t *buffer, size_t maxNumEven
        if ((eventFlagState & asBaseType(INTERNAL_WAKE)) && mReconnecting) {
            ALOGD("Event FMQ internal wake, returning from poll with no events");
            return DEAD_OBJECT;
        } else if ((eventFlagState & asBaseType(INTERNAL_WAKE)) && mInHalBypassMode &&
                   availableEvents == 0) {
            ALOGD("Event FMQ internal wake due to HAL Bypass Mode, returning from poll with no "
                  "events");
            return OK;
        }
    }

@@ -221,6 +226,17 @@ std::vector<sensor_t> AidlSensorHalWrapper::getSensorsList() {

status_t AidlSensorHalWrapper::setOperationMode(SensorService::Mode mode) {
    if (mSensors == nullptr) return NO_INIT;
    if (mode == SensorService::Mode::HAL_BYPASS_REPLAY_DATA_INJECTION) {
        if (!mInHalBypassMode) {
            mInHalBypassMode = true;
            mEventQueueFlag->wake(asBaseType(INTERNAL_WAKE));
        }
        return OK;
    } else {
        if (mInHalBypassMode) {
            mInHalBypassMode = false;
        }
    }
    return convertToStatus(mSensors->setOperationMode(static_cast<ISensors::OperationMode>(mode)));
}

+16 −0
Original line number Diff line number Diff line
@@ -203,6 +203,11 @@ ssize_t HidlSensorHalWrapper::pollFmq(sensors_event_t* buffer, size_t maxNumEven
        if ((eventFlagState & asBaseType(INTERNAL_WAKE)) && mReconnecting) {
            ALOGD("Event FMQ internal wake, returning from poll with no events");
            return DEAD_OBJECT;
        } else if ((eventFlagState & asBaseType(INTERNAL_WAKE)) && mInHalBypassMode &&
                   availableEvents == 0) {
            ALOGD("Event FMQ internal wake due to HAL Bypass Mode, returning from poll with no "
                  "events");
            return OK;
        }
    }

@@ -251,6 +256,17 @@ std::vector<sensor_t> HidlSensorHalWrapper::getSensorsList() {

status_t HidlSensorHalWrapper::setOperationMode(SensorService::Mode mode) {
    if (mSensors == nullptr) return NO_INIT;
    if (mode == SensorService::Mode::HAL_BYPASS_REPLAY_DATA_INJECTION) {
        if (!mInHalBypassMode) {
            mInHalBypassMode = true;
            mEventQueueFlag->wake(asBaseType(INTERNAL_WAKE));
        }
        return OK;
    } else {
        if (mInHalBypassMode) {
            mInHalBypassMode = false;
        }
    }
    return checkReturnAndGetStatus(
            mSensors->setOperationMode(static_cast<hardware::sensors::V1_0::OperationMode>(mode)));
}
+2 −0
Original line number Diff line number Diff line
@@ -97,6 +97,8 @@ public:
    virtual void writeWakeLockHandled(uint32_t count) = 0;

    std::atomic_bool mReconnecting = false;

    std::atomic_bool mInHalBypassMode = false;
};

} // namespace android
+0 −1
Original line number Diff line number Diff line
@@ -812,7 +812,6 @@ status_t SensorDevice::setMode(uint32_t mode) {
            }
            mInHalBypassMode = true;
        }
        return OK;
    } else {
        if (mInHalBypassMode) {
            // We are transitioning out of HAL Bypass mode. We need to notify the reader thread