OSDN Git Service

Change API from flush(handle) to flush(). Call flush on all active sensors in the...
authorAravind Akella <aakella@google.com>
Tue, 8 Oct 2013 21:59:26 +0000 (14:59 -0700)
committerAravind Akella <aakella@google.com>
Thu, 10 Oct 2013 00:26:01 +0000 (17:26 -0700)
Change-Id: I4ef2bec80406c517903ab9782dc9eaf3fa8b7f36

include/gui/ISensorEventConnection.h
include/gui/SensorEventQueue.h
libs/gui/ISensorEventConnection.cpp
libs/gui/SensorEventQueue.cpp
services/sensorservice/SensorService.cpp
services/sensorservice/SensorService.h

index 00eecc4..f64c6b8 100644 (file)
@@ -39,7 +39,7 @@ public:
     virtual status_t enableDisable(int handle, bool enabled, nsecs_t samplingPeriodNs,
                                    nsecs_t maxBatchReportLatencyNs, int reservedFlags) = 0;
     virtual status_t setEventRate(int handle, nsecs_t ns) = 0;
-    virtual status_t flushSensor(int handle) = 0;
+    virtual status_t flush() = 0;
 };
 
 // ----------------------------------------------------------------------------
index a3a9daa..0bfc7a0 100644 (file)
@@ -74,7 +74,7 @@ public:
     status_t enableSensor(int32_t handle, int32_t samplingPeriodUs, int maxBatchReportLatencyUs,
                           int reservedFlags) const;
     status_t disableSensor(int32_t handle) const;
-    status_t flushSensor(int32_t handle) const;
+    status_t flush() const;
 
 private:
     sp<Looper> getLooper() const;
index a80c661..28fcb53 100644 (file)
@@ -77,10 +77,9 @@ public:
         return reply.readInt32();
     }
 
-    virtual status_t flushSensor(int handle) {
+    virtual status_t flush() {
         Parcel data, reply;
         data.writeInterfaceToken(ISensorEventConnection::getInterfaceDescriptor());
-        data.writeInt32(handle);
         remote()->transact(FLUSH_SENSOR, data, &reply);
         return reply.readInt32();
     }
@@ -122,8 +121,7 @@ status_t BnSensorEventConnection::onTransact(
         } break;
         case FLUSH_SENSOR: {
             CHECK_INTERFACE(ISensorEventConnection, data, reply);
-            int handle = data.readInt32();
-            status_t result = flushSensor(handle);
+            status_t result = flush();
             reply->writeInt32(result);
             return NO_ERROR;
         } break;
index ab50c1d..c365671 100644 (file)
@@ -132,8 +132,8 @@ status_t SensorEventQueue::enableSensor(int32_t handle, int32_t samplingPeriodUs
                                                  us2ns(maxBatchReportLatencyUs), reservedFlags);
 }
 
-status_t SensorEventQueue::flushSensor(int32_t handle) const {
-    return mSensorEventConnection->flushSensor(handle);
+status_t SensorEventQueue::flush() const {
+    return mSensorEventConnection->flush();
 }
 
 status_t SensorEventQueue::disableSensor(int32_t handle) const {
index b26e572..af605de 100644 (file)
@@ -679,8 +679,12 @@ status_t SensorService::flushSensor(const sp<SensorEventConnection>& connection,
                                     int handle) {
   if (mInitCheck != NO_ERROR) return mInitCheck;
   SensorInterface* sensor = mSensorMap.valueFor(handle);
-   if (sensor == NULL) {
-       return BAD_VALUE;
+  if (sensor == NULL) {
+      return BAD_VALUE;
+  }
+  if (sensor->getSensor().getType() == SENSOR_TYPE_SIGNIFICANT_MOTION) {
+      ALOGE("flush called on Significant Motion sensor");
+      return INVALID_OPERATION;
   }
   SensorDevice& dev(SensorDevice::getInstance());
 
@@ -934,8 +938,18 @@ status_t SensorService::SensorEventConnection::setEventRate(
     return mService->setEventRate(this, handle, samplingPeriodNs);
 }
 
-status_t  SensorService::SensorEventConnection::flushSensor(int handle) {
-    return mService->flushSensor(this, handle);
+status_t  SensorService::SensorEventConnection::flush() {
+    Mutex::Autolock _l(mConnectionLock);
+    status_t err(NO_ERROR);
+    for (size_t i = 0; i < mSensorInfo.size(); ++i) {
+        const int handle = mSensorInfo.keyAt(i);
+        status_t err_flush = mService->flushSensor(this, handle);
+        if (err_flush != NO_ERROR) {
+            ALOGE("Flush error handle=%d %s", handle, strerror(-err_flush));
+        }
+        err = (err_flush != NO_ERROR) ? err_flush : err;
+    }
+    return err;
 }
 
 // ---------------------------------------------------------------------------
index 2311bff..2d40071 100644 (file)
@@ -79,7 +79,7 @@ class SensorService :
         virtual status_t enableDisable(int handle, bool enabled, nsecs_t samplingPeriodNs,
                                        nsecs_t maxBatchReportLatencyNs, int reservedFlags);
         virtual status_t setEventRate(int handle, nsecs_t samplingPeriodNs);
-        virtual status_t flushSensor(int handle);
+        virtual status_t flush();
         // Count the number of flush complete events which are about to be dropped in the buffer.
         // Increment mPendingFlushEventsToSend in mSensorInfo. These flush complete events will be
         // sent separately before the next batch of events.