summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2017-06-06 07:30:06 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2017-06-06 07:30:06 +0000
commit96b42de0c6be6b8570769cf4252e3b2d8d902a3c (patch)
tree948535784791d14df769f6e22bc69e7503369970
parent64ad722456a0d4bee7bfc6fc59ca31f28f77619a (diff)
parent2d893392e23ae3a630f03ffc4a4365e56f9d7492 (diff)
downloadcontexthub-96b42de0c6be6b8570769cf4252e3b2d8d902a3c.tar.gz
release-request-2b9eb364-e73f-4091-8ad7-435c885e6bd0-for-git_oc-dr1-release-4070602 snap-temp-L36900000070867203
Change-Id: Ied6f6ebb8b4a2f888992a88f587ee8aad1f60370
-rw-r--r--firmware/os/core/bl.c1
-rw-r--r--firmware/variant/lunchbox/inc/variant/variant.h12
-rw-r--r--sensorhal/hubconnection.cpp44
-rw-r--r--sensorhal/hubconnection.h11
4 files changed, 43 insertions, 25 deletions
diff --git a/firmware/os/core/bl.c b/firmware/os/core/bl.c
index 62b98b78..bdad06ea 100644
--- a/firmware/os/core/bl.c
+++ b/firmware/os/core/bl.c
@@ -86,7 +86,6 @@ static const struct blFlashTable // For erase code, we need to know which page
{ (uint8_t *)(__code_start + 0x14000), 0x20000, BL_FLASH_KERNEL },
{ (uint8_t *)(__shared_start), 0x20000, BL_FLASH_SHARED },
{ (uint8_t *)(__shared_start + 0x20000), 0x20000, BL_FLASH_SHARED },
- { (uint8_t *)(__shared_start + 0x40000), 0x20000, BL_FLASH_SHARED },
};
#else
BL_FLASH_TABLE;
diff --git a/firmware/variant/lunchbox/inc/variant/variant.h b/firmware/variant/lunchbox/inc/variant/variant.h
index 6018d01d..841334b7 100644
--- a/firmware/variant/lunchbox/inc/variant/variant.h
+++ b/firmware/variant/lunchbox/inc/variant/variant.h
@@ -45,18 +45,6 @@ extern "C" {
#define DEBUG_LOG_EVT 0x3B474F4C
-#define BL_FLASH_TABLE \
-{ \
- { (uint8_t *)(&BL), 0x04000, BL_FLASH_BL },\
- { (uint8_t *)(__eedata_start), 0x04000, BL_FLASH_EEDATA },\
- { (uint8_t *)(__eedata_start + 0x04000), 0x04000, BL_FLASH_EEDATA },\
- { (uint8_t *)(__code_start), 0x04000, BL_FLASH_KERNEL },\
- { (uint8_t *)(__code_start + 0x04000), 0x10000, BL_FLASH_KERNEL },\
- { (uint8_t *)(__code_start + 0x10000), 0x20000, BL_FLASH_KERNEL },\
- { (uint8_t *)(__shared_start), 0x20000, BL_FLASH_SHARED },\
- { (uint8_t *)(__shared_start + 0x20000), 0x20000, BL_FLASH_SHARED },\
-}
-
#define BMP280_I2C_BUS_ID 0
#define BMI160_TO_ANDROID_COORDINATE(x, y, z) \
diff --git a/sensorhal/hubconnection.cpp b/sensorhal/hubconnection.cpp
index b57a3342..003f59f5 100644
--- a/sensorhal/hubconnection.cpp
+++ b/sensorhal/hubconnection.cpp
@@ -174,10 +174,12 @@ HubConnection::HubConnection()
mSensorState[COMMS_SENSOR_GYRO].sensorType = SENS_TYPE_GYRO;
mSensorState[COMMS_SENSOR_GYRO].alt = COMMS_SENSOR_GYRO_UNCALIBRATED;
mSensorState[COMMS_SENSOR_GYRO_UNCALIBRATED].sensorType = SENS_TYPE_GYRO;
+ mSensorState[COMMS_SENSOR_GYRO_UNCALIBRATED].primary = COMMS_SENSOR_GYRO;
mSensorState[COMMS_SENSOR_GYRO_UNCALIBRATED].alt = COMMS_SENSOR_GYRO;
mSensorState[COMMS_SENSOR_MAG].sensorType = SENS_TYPE_MAG;
mSensorState[COMMS_SENSOR_MAG].alt = COMMS_SENSOR_MAG_UNCALIBRATED;
mSensorState[COMMS_SENSOR_MAG_UNCALIBRATED].sensorType = SENS_TYPE_MAG;
+ mSensorState[COMMS_SENSOR_MAG_UNCALIBRATED].primary = COMMS_SENSOR_MAG;
mSensorState[COMMS_SENSOR_MAG_UNCALIBRATED].alt = COMMS_SENSOR_MAG;
mSensorState[COMMS_SENSOR_LIGHT].sensorType = SENS_TYPE_ALS;
mSensorState[COMMS_SENSOR_PROXIMITY].sensorType = SENS_TYPE_PROX;
@@ -915,10 +917,12 @@ void HubConnection::restoreSensorState()
cmd.cmd = CONFIG_CMD_FLUSH;
- for (int j = 0; j < mSensorState[i].flushCnt; j++) {
- int ret = TEMP_FAILURE_RETRY(::write(mFd, &cmd, sizeof(cmd)));
- if (ret != sizeof(cmd)) {
- ALOGW("failed to send flush command to sensor %d\n", cmd.sensorType);
+ for (auto iter = mFlushesPending[i].cbegin(); iter != mFlushesPending[i].cend(); ++iter) {
+ for (int j = 0; j < iter->count; j++) {
+ int ret = TEMP_FAILURE_RETRY(::write(mFd, &cmd, sizeof(cmd)));
+ if (ret != sizeof(cmd)) {
+ ALOGW("failed to send flush command to sensor %d\n", cmd.sensorType);
+ }
}
}
}
@@ -993,6 +997,7 @@ ssize_t HubConnection::processBuf(uint8_t *buf, size_t len)
sensors_event_t ev;
uint64_t timestamp;
ssize_t ret = 0;
+ uint32_t primary;
if (len >= sizeof(data->evtType)) {
ret = sizeof(data->evtType);
@@ -1276,22 +1281,27 @@ ssize_t HubConnection::processBuf(uint8_t *buf, size_t len)
if (!numSamples)
ret += sizeof(data->firstSample);
+ // If no primary sensor type is specified,
+ // then 'sensor' is the primary sensor type.
+ primary = mSensorState[sensor].primary;
+ primary = (primary ? primary : sensor);
+
for (i=0; i<data->firstSample.numFlushes; i++) {
if (isActivitySensor(sensor) && mActivityEventHandler != NULL) {
mActivityEventHandler->OnFlush();
} else {
+ struct Flush& flush = mFlushesPending[primary].front();
memset(&ev, 0x00, sizeof(sensors_event_t));
ev.version = META_DATA_VERSION;
ev.timestamp = 0;
ev.type = SENSOR_TYPE_META_DATA;
ev.sensor = 0;
ev.meta_data.what = META_DATA_FLUSH_COMPLETE;
- if (mSensorState[sensor].alt && mSensorState[mSensorState[sensor].alt].flushCnt > 0) {
- mSensorState[mSensorState[sensor].alt].flushCnt --;
- ev.meta_data.sensor = mSensorState[sensor].alt;
- } else {
- mSensorState[sensor].flushCnt --;
- ev.meta_data.sensor = sensor;
+ ev.meta_data.sensor = flush.handle;
+ --flush.count;
+
+ if (flush.count == 0) {
+ mFlushesPending[primary].pop_front();
}
write(&ev, 1);
@@ -1614,12 +1624,24 @@ void HubConnection::queueBatch(
void HubConnection::queueFlush(int handle)
{
struct ConfigCmd cmd;
+ uint32_t primary;
int ret;
Mutex::Autolock autoLock(mLock);
if (isValidHandle(handle)) {
- mSensorState[handle].flushCnt++;
+ // If no primary sensor type is specified,
+ // then 'handle' is the primary sensor type.
+ primary = mSensorState[handle].primary;
+ primary = (primary ? primary : handle);
+
+ std::list<Flush>& flushList = mFlushesPending[primary];
+
+ if (!flushList.empty() && flushList.back().handle == handle) {
+ ++flushList.back().count;
+ } else {
+ flushList.push_back((struct Flush){handle, 1});
+ }
initConfigCmd(&cmd, handle);
cmd.cmd = CONFIG_CMD_FLUSH;
diff --git a/sensorhal/hubconnection.h b/sensorhal/hubconnection.h
index ce358775..29ee4561 100644
--- a/sensorhal/hubconnection.h
+++ b/sensorhal/hubconnection.h
@@ -27,6 +27,8 @@
#include <utils/Mutex.h>
#include <utils/Thread.h>
+#include <list>
+
#include "activityeventhandler.h"
#include "directchannel.h"
#include "eventnums.h"
@@ -148,12 +150,18 @@ private:
struct HostHubRawPacket msg;
} __attribute__((packed));
+ struct Flush
+ {
+ int handle;
+ uint8_t count;
+ };
+
struct SensorState {
uint64_t latency;
rate_q10_t rate;
uint8_t sensorType;
+ uint8_t primary;
uint8_t alt;
- uint8_t flushCnt;
bool enable;
};
@@ -232,6 +240,7 @@ private:
float mScaleAccel, mScaleMag;
SensorState mSensorState[NUM_COMMS_SENSORS_PLUS_1];
+ std::list<struct Flush> mFlushesPending[NUM_COMMS_SENSORS_PLUS_1];
uint64_t mStepCounterOffset;
uint64_t mLastStepCount;