From 6f8b4d28d41508e3a563c12f5841918bb3869819 Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Mon, 19 Jul 2010 15:03:55 -0700 Subject: [PATCH] Added partial support for repporting sensor activity to IBatteryStats Change-Id: I2af319d89e49b0f2349ec9d8b0fccac80e9bc047 --- services/sensorservice/SensorService.cpp | 37 ++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp index 5410cbc525abb..0ab4a20b564bd 100644 --- a/services/sensorservice/SensorService.cpp +++ b/services/sensorservice/SensorService.cpp @@ -23,8 +23,10 @@ #include #include #include +#include #include +#include #include #include @@ -44,8 +46,37 @@ namespace android { * send something to application when they enable a sensor that is already * active (the issue here is that it can take time before a value is * produced by the h/w if the rate is low or if it's a one-shot sensor). + * - send sensor info to battery service */ +// --------------------------------------------------------------------------- + +class BatteryService : public Singleton { + friend class Singleton; + sp mBatteryStatService; + BatteryService() { + const String16 name("batteryinfo"); + //getService(name, &mBatteryStatService); + } +public: + void enableSensor(int handle) { + if (mBatteryStatService != 0) { + int uid = IPCThreadState::self()->getCallingUid(); + //mBatteryStatService->noteStartSensor(uid, handle); + } + } + void disableSensor(int handle) { + if (mBatteryStatService != 0) { + int uid = IPCThreadState::self()->getCallingUid(); + //mBatteryStatService->noteStopSensor(uid, handle); + } + } +}; + +ANDROID_SINGLETON_STATIC_INSTANCE(BatteryService) + +// --------------------------------------------------------------------------- + SensorService::SensorService() : Thread(false), mDump("android.permission.DUMP") @@ -201,6 +232,9 @@ status_t SensorService::enable(const sp& connection, mActiveSensors.add(handle, rec); err = mSensorDevice->activate(mSensorDevice, handle, 1); LOGE_IF(err, "Error activating sensor %d (%s)", handle, strerror(-err)); + if (err == 0) { + BatteryService::getInstance().enableSensor(handle); + } } else { err = rec->addConnection(connection); } @@ -232,6 +266,9 @@ status_t SensorService::disable(const sp& connection, mActiveSensors.removeItem(handle); delete rec; err = mSensorDevice->activate(mSensorDevice, handle, 0); + if (err == 0) { + BatteryService::getInstance().disableSensor(handle); + } } } return err;