summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/binder/Parcel.cpp8
-rw-r--r--services/sensorservice/SensorFusion.cpp16
-rw-r--r--services/sensorservice/SensorFusion.h1
-rw-r--r--services/sensorservice/SensorService.cpp23
-rw-r--r--services/sensorservice/SensorService.h2
5 files changed, 21 insertions, 29 deletions
diff --git a/libs/binder/Parcel.cpp b/libs/binder/Parcel.cpp
index 159003d169..003bddd83e 100644
--- a/libs/binder/Parcel.cpp
+++ b/libs/binder/Parcel.cpp
@@ -1343,7 +1343,7 @@ size_t Parcel::ipcObjectsCount() const
void Parcel::ipcSetDataReference(const uint8_t* data, size_t dataSize,
const binder_size_t* objects, size_t objectsCount, release_func relFunc, void* relCookie)
{
- binder_size_t minOffset = 0;
+ size_t minOffset = 0;
freeDataNoInit();
mError = NO_ERROR;
mData = const_cast<uint8_t*>(data);
@@ -1357,10 +1357,10 @@ void Parcel::ipcSetDataReference(const uint8_t* data, size_t dataSize,
mOwner = relFunc;
mOwnerCookie = relCookie;
for (size_t i = 0; i < mObjectsSize; i++) {
- binder_size_t offset = mObjects[i];
+ size_t offset = mObjects[i];
if (offset < minOffset) {
- ALOGE("%s: bad object offset %"PRIu64" < %"PRIu64"\n",
- __func__, (uint64_t)offset, (uint64_t)minOffset);
+ ALOGE("%s: bad object offset %zu < %zu\n",
+ __func__, offset, minOffset);
mObjectsSize = 0;
break;
}
diff --git a/services/sensorservice/SensorFusion.cpp b/services/sensorservice/SensorFusion.cpp
index bb97286c28..6d93009176 100644
--- a/services/sensorservice/SensorFusion.cpp
+++ b/services/sensorservice/SensorFusion.cpp
@@ -102,15 +102,6 @@ status_t SensorFusion::activate(void* ident, bool enabled) {
}
}
- if (enabled) {
- ALOGD_IF(DEBUG_CONNECTIONS, "SensorFusion calling batch ident=%p ", ident);
- // Activating a sensor in continuous mode is equivalent to calling batch with the default
- // period and timeout equal to ZERO, followed by a call to activate.
- mSensorDevice.batch(ident, mAcc.getHandle(), 0, DEFAULT_EVENTS_PERIOD, 0);
- mSensorDevice.batch(ident, mMag.getHandle(), 0, DEFAULT_EVENTS_PERIOD, 0);
- mSensorDevice.batch(ident, mGyro.getHandle(), 0, DEFAULT_EVENTS_PERIOD, 0);
- }
-
mSensorDevice.activate(ident, mAcc.getHandle(), enabled);
mSensorDevice.activate(ident, mMag.getHandle(), enabled);
mSensorDevice.activate(ident, mGyro.getHandle(), enabled);
@@ -127,9 +118,10 @@ status_t SensorFusion::activate(void* ident, bool enabled) {
}
status_t SensorFusion::setDelay(void* ident, int64_t ns) {
- mSensorDevice.setDelay(ident, mAcc.getHandle(), ns);
- mSensorDevice.setDelay(ident, mMag.getHandle(), ms2ns(20));
- mSensorDevice.setDelay(ident, mGyro.getHandle(), mTargetDelayNs);
+ // Call batch with timeout zero instead of setDelay().
+ mSensorDevice.batch(ident, mAcc.getHandle(), 0, ns, 0);
+ mSensorDevice.batch(ident, mMag.getHandle(), 0, ms2ns(20), 0);
+ mSensorDevice.batch(ident, mGyro.getHandle(), 0, mTargetDelayNs, 0);
return NO_ERROR;
}
diff --git a/services/sensorservice/SensorFusion.h b/services/sensorservice/SensorFusion.h
index b8f360f52c..432adbcfd0 100644
--- a/services/sensorservice/SensorFusion.h
+++ b/services/sensorservice/SensorFusion.h
@@ -37,7 +37,6 @@ class SensorDevice;
class SensorFusion : public Singleton<SensorFusion> {
friend class Singleton<SensorFusion>;
- static const nsecs_t DEFAULT_EVENTS_PERIOD = 200000000; // 5 Hz
SensorDevice& mSensorDevice;
Sensor mAcc;
diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp
index 9cc75c637c..6df6315d10 100644
--- a/services/sensorservice/SensorService.cpp
+++ b/services/sensorservice/SensorService.cpp
@@ -427,20 +427,21 @@ bool SensorService::threadLoop()
}
void SensorService::recordLastValue(
- sensors_event_t const * buffer, size_t count)
-{
+ const sensors_event_t* buffer, size_t count) {
Mutex::Autolock _l(mLock);
- // record the last event for each sensor
- int32_t prev = buffer[0].sensor;
- for (size_t i=1 ; i<count ; i++) {
- // record the last event of each sensor type in this buffer
- int32_t curr = buffer[i].sensor;
- if (curr != prev) {
- mLastEventSeen.editValueFor(prev) = buffer[i-1];
- prev = curr;
+ const sensors_event_t* last = NULL;
+ for (size_t i = 0; i < count; i++) {
+ const sensors_event_t* event = &buffer[i];
+ if (event->type != SENSOR_TYPE_META_DATA) {
+ if (last && event->sensor != last->sensor) {
+ mLastEventSeen.editValueFor(last->sensor) = *last;
+ }
+ last = event;
}
}
- mLastEventSeen.editValueFor(prev) = buffer[count-1];
+ if (last) {
+ mLastEventSeen.editValueFor(last->sensor) = *last;
+ }
}
void SensorService::sortEventBuffer(sensors_event_t* buffer, size_t count)
diff --git a/services/sensorservice/SensorService.h b/services/sensorservice/SensorService.h
index c9683197f5..1dc2dd36ae 100644
--- a/services/sensorservice/SensorService.h
+++ b/services/sensorservice/SensorService.h
@@ -131,7 +131,7 @@ class SensorService :
String8 getSensorName(int handle) const;
bool isVirtualSensor(int handle) const;
- void recordLastValue(sensors_event_t const * buffer, size_t count);
+ void recordLastValue(const sensors_event_t* buffer, size_t count);
static void sortEventBuffer(sensors_event_t* buffer, size_t count);
Sensor registerSensor(SensorInterface* sensor);
Sensor registerVirtualSensor(SensorInterface* sensor);