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

Commit 8719e3b6 authored by Aravind Akella's avatar Aravind Akella Committed by Android (Google) Code Review
Browse files

Merge "Enable sensor data injection mode through adb." into mnc-dev

parents e59cb43e 841a5926
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