From d4db70a7b8b2d136c46c50f89b276f8150be5fc2 Mon Sep 17 00:00:00 2001 From: Jani Suonpera Date: Fri, 9 Oct 2015 11:45:57 +0300 Subject: [PATCH] DO NOT MERGE ANYWHERE Add new interface for sensor physical data This is special solution only for emerald branch. Changes including new const char* value/interface for sensor physical data. Sensor service and manager does not take care of content, structure or other details of string. Sensor HAL is taking care of parsing data from string and setting values to Sensor HW. Change-Id: I3abc3ddc7c6adc4b32a40b9a43f2a94c5af7b2b0 Signed-off-by: Ben Fennema --- include/gui/ISensorServer.h | 1 + include/gui/SensorManager.h | 2 +- libs/gui/ISensorServer.cpp | 21 ++++++++++++++++++++- libs/gui/SensorManager.cpp | 17 +++++++++++++++++ services/sensorservice/SensorDevice.cpp | 15 +++++++++++++++ services/sensorservice/SensorDevice.h | 1 + services/sensorservice/SensorService.cpp | 8 ++++++++ services/sensorservice/SensorService.h | 1 + 8 files changed, 64 insertions(+), 2 deletions(-) diff --git a/include/gui/ISensorServer.h b/include/gui/ISensorServer.h index 3dca2a373..e590ce9c3 100644 --- a/include/gui/ISensorServer.h +++ b/include/gui/ISensorServer.h @@ -41,6 +41,7 @@ public: virtual sp createSensorEventConnection(const String8& packageName, int mode, const String16& opPackageName) = 0; virtual int32_t isDataInjectionEnabled() = 0; + virtual status_t setSensorPhysicalData(const char* physicaldata) = 0; }; // ---------------------------------------------------------------------------- diff --git a/include/gui/SensorManager.h b/include/gui/SensorManager.h index 0cff46c07..2b07ca7ce 100644 --- a/include/gui/SensorManager.h +++ b/include/gui/SensorManager.h @@ -58,7 +58,7 @@ public: Sensor const* getDefaultSensor(int type); sp createEventQueue(String8 packageName = String8(""), int mode = 0); bool isDataInjectionEnabled(); - + bool SetPhysicalData(const char* data); private: // DeathRecipient interface void sensorManagerDied(); diff --git a/libs/gui/ISensorServer.cpp b/libs/gui/ISensorServer.cpp index f581b5c1d..8cd17254b 100644 --- a/libs/gui/ISensorServer.cpp +++ b/libs/gui/ISensorServer.cpp @@ -35,7 +35,8 @@ namespace android { enum { GET_SENSOR_LIST = IBinder::FIRST_CALL_TRANSACTION, CREATE_SENSOR_EVENT_CONNECTION, - ENABLE_DATA_INJECTION + ENABLE_DATA_INJECTION, + SET_SENSOR_PHYSICAL_DATA, }; class BpSensorServer : public BpInterface @@ -83,6 +84,16 @@ public: remote()->transact(ENABLE_DATA_INJECTION, data, &reply); return reply.readInt32(); } + + virtual status_t setSensorPhysicalData(const char* physicaldata) + { + Parcel data, reply; + //ALOGD("ISensorManager::SetSensorPhysicalData(%s)",physicaldata); + data.writeInterfaceToken(ISensorServer::getInterfaceDescriptor()); + data.writeCString(physicaldata); + remote()->transact(SET_SENSOR_PHYSICAL_DATA, data, &reply); + return reply.readInt32(); + } }; // Out-of-line virtual method definition to trigger vtable emission in this @@ -124,6 +135,14 @@ status_t BnSensorServer::onTransact( reply->writeInt32(static_cast(ret)); return NO_ERROR; } + case SET_SENSOR_PHYSICAL_DATA: { + CHECK_INTERFACE(ISensorServer, data, reply); + const char* physicaldata = data.readCString(); + //ALOGD("ISensorManager, BnSensorServer::onTransact, physicaldata is: (%s)",physicaldata); + status_t result = setSensorPhysicalData(physicaldata); + reply->writeInt32(result); + return NO_ERROR; + } } return BBinder::onTransact(code, data, reply, flags); } diff --git a/libs/gui/SensorManager.cpp b/libs/gui/SensorManager.cpp index 33608b5bd..343131fc0 100644 --- a/libs/gui/SensorManager.cpp +++ b/libs/gui/SensorManager.cpp @@ -227,5 +227,22 @@ bool SensorManager::isDataInjectionEnabled() { return false; } +bool SensorManager::SetPhysicalData(const char* data) +{ + status_t reply; + //ALOGD("SensorManager::SetPhysicalData(%s)",data); + + reply = mSensorServer->setSensorPhysicalData(data); + + if(reply == NO_ERROR) + { + return true; + } + else + { + return false; + } +} + // ---------------------------------------------------------------------------- }; // namespace android diff --git a/services/sensorservice/SensorDevice.cpp b/services/sensorservice/SensorDevice.cpp index dd1bccfbe..48ae2fb7a 100644 --- a/services/sensorservice/SensorDevice.cpp +++ b/services/sensorservice/SensorDevice.cpp @@ -407,6 +407,21 @@ status_t SensorDevice::setMode(uint32_t mode) { return mSensorModule->set_operation_mode(mode); } +status_t SensorDevice::setSensorPhysicalData(const char* physicaldata) +{ + //ALOGD("SensorDevice::setSensorPhysicalData(%s)",physicaldata); + Mutex::Autolock _l(mLock); + if((mSensorModule->set_sensor_physical_data == NULL) || (getHalDeviceVersion() < SENSORS_DEVICE_API_VERSION_1_3_5)) + { + return NO_INIT; + } + else + { + return mSensorModule->set_sensor_physical_data(physicaldata); + } +} + + // --------------------------------------------------------------------------- int SensorDevice::Info::numActiveClients() { diff --git a/services/sensorservice/SensorDevice.h b/services/sensorservice/SensorDevice.h index c48484994..f65849749 100644 --- a/services/sensorservice/SensorDevice.h +++ b/services/sensorservice/SensorDevice.h @@ -104,6 +104,7 @@ public: void autoDisable(void *ident, int handle); status_t injectSensorData(const sensors_event_t *event); void dump(String8& result); + status_t setSensorPhysicalData(const char* physicaldata); }; // --------------------------------------------------------------------------- diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp index fd72b2312..2548a3e81 100644 --- a/services/sensorservice/SensorService.cpp +++ b/services/sensorservice/SensorService.cpp @@ -735,6 +735,14 @@ Vector SensorService::getSensorList(const String16& opPackageName) return accessibleSensorList; } +status_t SensorService::setSensorPhysicalData(const char* physicaldata) +{ + SensorDevice& dev(SensorDevice::getInstance()); + + //ALOGD("SensorService::setSensorPhysicalData(%s)",physicaldata); + return dev.setSensorPhysicalData(physicaldata); +} + sp SensorService::createSensorEventConnection(const String8& packageName, int requestedMode, const String16& opPackageName) { // Only 2 modes supported for a SensorEventConnection ... NORMAL and DATA_INJECTION. diff --git a/services/sensorservice/SensorService.h b/services/sensorservice/SensorService.h index 9a573ae78..3a1ffb25e 100644 --- a/services/sensorservice/SensorService.h +++ b/services/sensorservice/SensorService.h @@ -130,6 +130,7 @@ class SensorService : virtual sp createSensorEventConnection(const String8& packageName, int requestedMode, const String16& opPackageName); virtual int isDataInjectionEnabled(); + virtual status_t setSensorPhysicalData(const char* physicaldata); virtual status_t dump(int fd, const Vector& args); class SensorEventConnection : public BnSensorEventConnection, public LooperCallback {