From bb75315afc6f45b11e98ffddbbe40a7cfae3d8b5 Mon Sep 17 00:00:00 2001 From: Simo Piiroinen Date: Mon, 1 Oct 2018 11:29:17 +0300 Subject: [PATCH] [hybrisadaptor] Provide fallback sensor maxDelay value. JB#43020 Sensor maximum delay is available from sensors device API version 1.3 onwards. If development headers are too ancient, trying to access maxDelay member in sensor_t structure causes compilation failures. Use fallback value for maxDelay unless both development headers and sensors device exposed via hal indicate that sensors device API version 1.3 features are available. Signed-off-by: Simo Piiroinen --- core/hybrisadaptor.cpp | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/core/hybrisadaptor.cpp b/core/hybrisadaptor.cpp index bd05355f..c8b54bcf 100644 --- a/core/hybrisadaptor.cpp +++ b/core/hybrisadaptor.cpp @@ -279,7 +279,24 @@ HybrisManager::HybrisManager(QObject *parent) if (use) { // min/max delay is specified in [us] -> convert to [ms] int minDelay = (m_halSensorArray[i].minDelay + 999) / 1000; - int maxDelay = (m_halSensorArray[i].maxDelay + 999) / 1000; + int maxDelay = -1; // Assume: not defined by hal + +#ifdef SENSORS_DEVICE_API_VERSION_1_3 + if (m_halDevice->common.version >= SENSORS_DEVICE_API_VERSION_1_3) + maxDelay = (m_halSensorArray[i].maxDelay + 999) / 1000; +#endif + /* If HAL does not define maximum delay, we need to invent + * something that a) allows sensorfwd logic to see a range + * instead of a point, b) is unlikely to be wrong enough to + * cause problems... + * + * For now use: minDelay * 2, but at least 1000 ms. + */ + if (maxDelay < 0 && minDelay > 0) { + maxDelay = (minDelay < 500) ? 1000 : (minDelay * 2); + sensordLogD("hal does not specify maxDelay, fallback: %d ms", + maxDelay); + } // Positive minDelay means delay /can/ be set - but depending // on sensor hal implementation it can also mean that some @@ -303,6 +320,11 @@ HybrisManager::HybrisManager(QObject *parent) halSetActive(m_halSensorArray[i].handle, true); halSetDelay(m_halSensorArray[i].handle, delay); + + sensordLogD("delay = %d [%d, %d]", + m_halSensorState[i].m_delay, + m_halSensorState[i].m_minDelay, + m_halSensorState[i].m_maxDelay); } m_halIndexOfType.insert(m_halSensorArray[i].type, i);