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 <fennema@google.com>
This commit is contained in:
Jani Suonpera 2015-10-09 11:45:57 +03:00 committed by Ben Fennema
parent 804339a59e
commit d4db70a7b8
8 changed files with 64 additions and 2 deletions

View File

@ -41,6 +41,7 @@ public:
virtual sp<ISensorEventConnection> createSensorEventConnection(const String8& packageName, virtual sp<ISensorEventConnection> createSensorEventConnection(const String8& packageName,
int mode, const String16& opPackageName) = 0; int mode, const String16& opPackageName) = 0;
virtual int32_t isDataInjectionEnabled() = 0; virtual int32_t isDataInjectionEnabled() = 0;
virtual status_t setSensorPhysicalData(const char* physicaldata) = 0;
}; };
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@ -58,7 +58,7 @@ public:
Sensor const* getDefaultSensor(int type); Sensor const* getDefaultSensor(int type);
sp<SensorEventQueue> createEventQueue(String8 packageName = String8(""), int mode = 0); sp<SensorEventQueue> createEventQueue(String8 packageName = String8(""), int mode = 0);
bool isDataInjectionEnabled(); bool isDataInjectionEnabled();
bool SetPhysicalData(const char* data);
private: private:
// DeathRecipient interface // DeathRecipient interface
void sensorManagerDied(); void sensorManagerDied();

View File

@ -35,7 +35,8 @@ namespace android {
enum { enum {
GET_SENSOR_LIST = IBinder::FIRST_CALL_TRANSACTION, GET_SENSOR_LIST = IBinder::FIRST_CALL_TRANSACTION,
CREATE_SENSOR_EVENT_CONNECTION, CREATE_SENSOR_EVENT_CONNECTION,
ENABLE_DATA_INJECTION ENABLE_DATA_INJECTION,
SET_SENSOR_PHYSICAL_DATA,
}; };
class BpSensorServer : public BpInterface<ISensorServer> class BpSensorServer : public BpInterface<ISensorServer>
@ -83,6 +84,16 @@ public:
remote()->transact(ENABLE_DATA_INJECTION, data, &reply); remote()->transact(ENABLE_DATA_INJECTION, data, &reply);
return reply.readInt32(); 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 // Out-of-line virtual method definition to trigger vtable emission in this
@ -124,6 +135,14 @@ status_t BnSensorServer::onTransact(
reply->writeInt32(static_cast<int32_t>(ret)); reply->writeInt32(static_cast<int32_t>(ret));
return NO_ERROR; 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); return BBinder::onTransact(code, data, reply, flags);
} }

View File

@ -227,5 +227,22 @@ bool SensorManager::isDataInjectionEnabled() {
return false; 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 }; // namespace android

View File

@ -407,6 +407,21 @@ status_t SensorDevice::setMode(uint32_t mode) {
return mSensorModule->set_operation_mode(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() { int SensorDevice::Info::numActiveClients() {

View File

@ -104,6 +104,7 @@ public:
void autoDisable(void *ident, int handle); void autoDisable(void *ident, int handle);
status_t injectSensorData(const sensors_event_t *event); status_t injectSensorData(const sensors_event_t *event);
void dump(String8& result); void dump(String8& result);
status_t setSensorPhysicalData(const char* physicaldata);
}; };
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------

View File

@ -735,6 +735,14 @@ Vector<Sensor> SensorService::getSensorList(const String16& opPackageName)
return accessibleSensorList; return accessibleSensorList;
} }
status_t SensorService::setSensorPhysicalData(const char* physicaldata)
{
SensorDevice& dev(SensorDevice::getInstance());
//ALOGD("SensorService::setSensorPhysicalData(%s)",physicaldata);
return dev.setSensorPhysicalData(physicaldata);
}
sp<ISensorEventConnection> SensorService::createSensorEventConnection(const String8& packageName, sp<ISensorEventConnection> SensorService::createSensorEventConnection(const String8& packageName,
int requestedMode, const String16& opPackageName) { int requestedMode, const String16& opPackageName) {
// Only 2 modes supported for a SensorEventConnection ... NORMAL and DATA_INJECTION. // Only 2 modes supported for a SensorEventConnection ... NORMAL and DATA_INJECTION.

View File

@ -130,6 +130,7 @@ class SensorService :
virtual sp<ISensorEventConnection> createSensorEventConnection(const String8& packageName, virtual sp<ISensorEventConnection> createSensorEventConnection(const String8& packageName,
int requestedMode, const String16& opPackageName); int requestedMode, const String16& opPackageName);
virtual int isDataInjectionEnabled(); virtual int isDataInjectionEnabled();
virtual status_t setSensorPhysicalData(const char* physicaldata);
virtual status_t dump(int fd, const Vector<String16>& args); virtual status_t dump(int fd, const Vector<String16>& args);
class SensorEventConnection : public BnSensorEventConnection, public LooperCallback { class SensorEventConnection : public BnSensorEventConnection, public LooperCallback {