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

Commit 0f95c565 authored by Aravind Akella's avatar Aravind Akella Committed by Android Git Automerger
Browse files

am 8719e3b6: Merge "Enable sensor data injection mode through adb." into mnc-dev

* commit '8719e3b6':
  Enable sensor data injection mode through adb.
parents 00078817 8719e3b6
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@ public:
    virtual Vector<Sensor> getSensorList(const String16& opPackageName) = 0;
    virtual sp<ISensorEventConnection> createSensorEventConnection(const String8& packageName,
             int mode, const String16& opPackageName) = 0;
    virtual status_t enableDataInjection(int enable) = 0;
    virtual int32_t isDataInjectionEnabled() = 0;
};

// ----------------------------------------------------------------------------
+1 −1
Original line number Diff line number Diff line
@@ -107,7 +107,7 @@ public:
    ssize_t getSensorList(Sensor const* const** list) const;
    Sensor const* getDefaultSensor(int type);
    sp<SensorEventQueue> createEventQueue(String8 packageName = String8(""), int mode = 0);
    status_t enableDataInjection(bool enable);
    bool isDataInjectionEnabled();

private:
    // DeathRecipient interface
+2 −4
Original line number Diff line number Diff line
@@ -77,10 +77,9 @@ public:
        return interface_cast<ISensorEventConnection>(reply.readStrongBinder());
    }

    virtual status_t enableDataInjection(int enable) {
    virtual int isDataInjectionEnabled() {
        Parcel data, reply;
        data.writeInterfaceToken(ISensorServer::getInterfaceDescriptor());
        data.writeInt32(enable);
        remote()->transact(ENABLE_DATA_INJECTION, data, &reply);
        return reply.readInt32();
    }
@@ -121,8 +120,7 @@ status_t BnSensorServer::onTransact(
        }
        case ENABLE_DATA_INJECTION: {
            CHECK_INTERFACE(ISensorServer, data, reply);
            int32_t enable = data.readInt32();
            status_t ret = enableDataInjection(enable);
            int32_t ret = isDataInjectionEnabled();
            reply->writeInt32(static_cast<int32_t>(ret));
            return NO_ERROR;
        }
+15 −7
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <stdint.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <linux/errno.h>

#include <utils/Errors.h>
#include <utils/RefBase.h>
@@ -150,13 +151,20 @@ status_t SensorEventQueue::setEventRate(Sensor const* sensor, nsecs_t ns) const
}

status_t SensorEventQueue::injectSensorEvent(const ASensorEvent& event) {
    do {
        // Blocking call.
        ssize_t size = ::send(mSensorChannel->getFd(), &event, sizeof(event), MSG_NOSIGNAL);
   if (size < 0) {
       ALOGE("injectSensorEvent failure %zd %d", size, mSensorChannel->getFd());
        if (size >= 0) {
            return NO_ERROR;
        } else if (size < 0 && errno == EAGAIN) {
            // If send is returning a "Try again" error, sleep for 100ms and try again. In all
            // other cases log a failure and exit.
            usleep(100000);
        } else {
            ALOGE("injectSensorEvent failure %s %zd", strerror(errno), size);
            return INVALID_OPERATION;
        }
   return NO_ERROR;
    } while (true);
}

void SensorEventQueue::sendAck(const ASensorEvent* events, int count) {
+3 −3
Original line number Diff line number Diff line
@@ -153,12 +153,12 @@ sp<SensorEventQueue> SensorManager::createEventQueue(String8 packageName, int mo
    return queue;
}

status_t SensorManager::enableDataInjection(bool enable) {
bool SensorManager::isDataInjectionEnabled() {
    Mutex::Autolock _l(mLock);
    if (assertStateLocked() == NO_ERROR) {
        return mSensorServer->enableDataInjection(enable);
        return mSensorServer->isDataInjectionEnabled();
    }
    return INVALID_OPERATION;
    return false;
}

// ----------------------------------------------------------------------------
Loading