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

Commit 23e8de26 authored by Mathias Agopian's avatar Mathias Agopian
Browse files

propagate sensor event rate properly

Change-Id: I32e67d30e4295285a6827956cc8161b2025d70bc
parent 5df13ef3
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -100,13 +100,13 @@ sensors_destroy_queue(JNIEnv *env, jclass clazz, jint nativeQueue)

static jboolean
sensors_enable_sensor(JNIEnv *env, jclass clazz,
        jint nativeQueue, jstring name, jint sensor, jint enable)
        jint nativeQueue, jstring name, jint sensor, jint delay)
{
    sp<SensorEventQueue> queue(reinterpret_cast<SensorEventQueue *>(nativeQueue));
    if (queue == 0) return JNI_FALSE;
    status_t res;
    if (enable) {
        res = queue->enableSensor(sensor);
    if (delay >= 0) {
        res = queue->enableSensor(sensor, delay);
    } else {
        res = queue->disableSensor(sensor);
    }
+4 −2
Original line number Diff line number Diff line
@@ -62,10 +62,12 @@ public:

    status_t enableSensor(Sensor const* sensor) const;
    status_t disableSensor(Sensor const* sensor) const;
    status_t enableSensor(int32_t handle) const;
    status_t disableSensor(int32_t handle) const;
    status_t setEventRate(Sensor const* sensor, nsecs_t ns) const;

    // these are here only to support SensorManager.java
    status_t enableSensor(int32_t handle, int32_t ms) const;
    status_t disableSensor(int32_t handle) const;

private:
    sp<PollLoop> getPollLoop() const;
    sp<ISensorEventConnection> mSensorEventConnection;
+6 −2
Original line number Diff line number Diff line
@@ -114,8 +114,12 @@ status_t SensorEventQueue::disableSensor(Sensor const* sensor) const {
    return mSensorEventConnection->enableDisable(sensor->getHandle(), false);
}

status_t SensorEventQueue::enableSensor(int32_t handle) const {
    return mSensorEventConnection->enableDisable(handle, true);
status_t SensorEventQueue::enableSensor(int32_t handle, int32_t ms) const {
    status_t err = mSensorEventConnection->enableDisable(handle, true);
    if (err == NO_ERROR) {
        mSensorEventConnection->setEventRate(handle, ms2ns(ms));
    }
    return err;
}

status_t SensorEventQueue::disableSensor(int32_t handle) const {
+9 −1
Original line number Diff line number Diff line
@@ -77,6 +77,9 @@ ANDROID_SINGLETON_STATIC_INSTANCE(BatteryService)

// ---------------------------------------------------------------------------

// 100 events/s max
static const nsecs_t MINIMUM_EVENT_PERIOD = ms2ns(10);

SensorService::SensorService()
    : Thread(false),
      mSensorDevice(0),
@@ -284,7 +287,6 @@ status_t SensorService::disable(const sp<SensorEventConnection>& connection,
    status_t err = NO_ERROR;
    Mutex::Autolock _l(mLock);
    SensorRecord* rec = mActiveSensors.valueFor(handle);
    LOGW("sensor (handle=%d) is not enabled", handle);
    if (rec) {
        // see if this connection becomes inactive
        connection->removeSensor(handle);
@@ -310,6 +312,12 @@ status_t SensorService::setRate(const sp<SensorEventConnection>& connection,
    if (mInitCheck != NO_ERROR)
        return mInitCheck;

    if (ns < 0)
        return BAD_VALUE;

    if (ns < MINIMUM_EVENT_PERIOD)
        ns = MINIMUM_EVENT_PERIOD;

    status_t err = NO_ERROR;
    Mutex::Autolock _l(mLock);