Change API from flush(handle) to flush(). Call flush on all active sensors in the given SensorEventConnection.

Change-Id: I4ef2bec80406c517903ab9782dc9eaf3fa8b7f36
This commit is contained in:
Aravind Akella 2013-10-08 14:59:26 -07:00
parent d457ec52d7
commit 701166d9f6
6 changed files with 25 additions and 13 deletions

View File

@ -39,7 +39,7 @@ public:
virtual status_t enableDisable(int handle, bool enabled, nsecs_t samplingPeriodNs, virtual status_t enableDisable(int handle, bool enabled, nsecs_t samplingPeriodNs,
nsecs_t maxBatchReportLatencyNs, int reservedFlags) = 0; nsecs_t maxBatchReportLatencyNs, int reservedFlags) = 0;
virtual status_t setEventRate(int handle, nsecs_t ns) = 0; virtual status_t setEventRate(int handle, nsecs_t ns) = 0;
virtual status_t flushSensor(int handle) = 0; virtual status_t flush() = 0;
}; };
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@ -74,7 +74,7 @@ public:
status_t enableSensor(int32_t handle, int32_t samplingPeriodUs, int maxBatchReportLatencyUs, status_t enableSensor(int32_t handle, int32_t samplingPeriodUs, int maxBatchReportLatencyUs,
int reservedFlags) const; int reservedFlags) const;
status_t disableSensor(int32_t handle) const; status_t disableSensor(int32_t handle) const;
status_t flushSensor(int32_t handle) const; status_t flush() const;
private: private:
sp<Looper> getLooper() const; sp<Looper> getLooper() const;

View File

@ -77,10 +77,9 @@ public:
return reply.readInt32(); return reply.readInt32();
} }
virtual status_t flushSensor(int handle) { virtual status_t flush() {
Parcel data, reply; Parcel data, reply;
data.writeInterfaceToken(ISensorEventConnection::getInterfaceDescriptor()); data.writeInterfaceToken(ISensorEventConnection::getInterfaceDescriptor());
data.writeInt32(handle);
remote()->transact(FLUSH_SENSOR, data, &reply); remote()->transact(FLUSH_SENSOR, data, &reply);
return reply.readInt32(); return reply.readInt32();
} }
@ -122,8 +121,7 @@ status_t BnSensorEventConnection::onTransact(
} break; } break;
case FLUSH_SENSOR: { case FLUSH_SENSOR: {
CHECK_INTERFACE(ISensorEventConnection, data, reply); CHECK_INTERFACE(ISensorEventConnection, data, reply);
int handle = data.readInt32(); status_t result = flush();
status_t result = flushSensor(handle);
reply->writeInt32(result); reply->writeInt32(result);
return NO_ERROR; return NO_ERROR;
} break; } break;

View File

@ -132,8 +132,8 @@ status_t SensorEventQueue::enableSensor(int32_t handle, int32_t samplingPeriodUs
us2ns(maxBatchReportLatencyUs), reservedFlags); us2ns(maxBatchReportLatencyUs), reservedFlags);
} }
status_t SensorEventQueue::flushSensor(int32_t handle) const { status_t SensorEventQueue::flush() const {
return mSensorEventConnection->flushSensor(handle); return mSensorEventConnection->flush();
} }
status_t SensorEventQueue::disableSensor(int32_t handle) const { status_t SensorEventQueue::disableSensor(int32_t handle) const {

View File

@ -679,8 +679,12 @@ status_t SensorService::flushSensor(const sp<SensorEventConnection>& connection,
int handle) { int handle) {
if (mInitCheck != NO_ERROR) return mInitCheck; if (mInitCheck != NO_ERROR) return mInitCheck;
SensorInterface* sensor = mSensorMap.valueFor(handle); SensorInterface* sensor = mSensorMap.valueFor(handle);
if (sensor == NULL) { if (sensor == NULL) {
return BAD_VALUE; 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()); SensorDevice& dev(SensorDevice::getInstance());
@ -934,8 +938,18 @@ status_t SensorService::SensorEventConnection::setEventRate(
return mService->setEventRate(this, handle, samplingPeriodNs); return mService->setEventRate(this, handle, samplingPeriodNs);
} }
status_t SensorService::SensorEventConnection::flushSensor(int handle) { status_t SensorService::SensorEventConnection::flush() {
return mService->flushSensor(this, handle); 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;
} }
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------

View File

@ -79,7 +79,7 @@ class SensorService :
virtual status_t enableDisable(int handle, bool enabled, nsecs_t samplingPeriodNs, virtual status_t enableDisable(int handle, bool enabled, nsecs_t samplingPeriodNs,
nsecs_t maxBatchReportLatencyNs, int reservedFlags); nsecs_t maxBatchReportLatencyNs, int reservedFlags);
virtual status_t setEventRate(int handle, nsecs_t samplingPeriodNs); 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. // 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 // Increment mPendingFlushEventsToSend in mSensorInfo. These flush complete events will be
// sent separately before the next batch of events. // sent separately before the next batch of events.