OSDN Git Service

Added partial support for repporting sensor activity to IBatteryStats
authorMathias Agopian <mathias@google.com>
Mon, 19 Jul 2010 22:03:55 +0000 (15:03 -0700)
committerMathias Agopian <mathias@google.com>
Thu, 28 Jun 2012 00:07:53 +0000 (17:07 -0700)
Change-Id: I2af319d89e49b0f2349ec9d8b0fccac80e9bc047

services/sensorservice/SensorService.cpp

index 5410cbc..0ab4a20 100644 (file)
 #include <utils/Atomic.h>
 #include <utils/Errors.h>
 #include <utils/RefBase.h>
+#include <utils/Singleton.h>
 
 #include <binder/BinderService.h>
+#include <binder/IServiceManager.h>
 
 #include <gui/ISensorServer.h>
 #include <gui/ISensorEventConnection.h>
@@ -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<BatteryService> {
+    friend class Singleton<BatteryService>;
+    sp<IBinder> 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<SensorEventConnection>& 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<SensorEventConnection>& connection,
             mActiveSensors.removeItem(handle);
             delete rec;
             err = mSensorDevice->activate(mSensorDevice, handle, 0);
+            if (err == 0) {
+                BatteryService::getInstance().disableSensor(handle);
+            }
         }
     }
     return err;