diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2017-06-06 07:30:06 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2017-06-06 07:30:06 +0000 |
commit | 96b42de0c6be6b8570769cf4252e3b2d8d902a3c (patch) | |
tree | 948535784791d14df769f6e22bc69e7503369970 | |
parent | 64ad722456a0d4bee7bfc6fc59ca31f28f77619a (diff) | |
parent | 2d893392e23ae3a630f03ffc4a4365e56f9d7492 (diff) | |
download | contexthub-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.c | 1 | ||||
-rw-r--r-- | firmware/variant/lunchbox/inc/variant/variant.h | 12 | ||||
-rw-r--r-- | sensorhal/hubconnection.cpp | 44 | ||||
-rw-r--r-- | sensorhal/hubconnection.h | 11 |
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; |