summaryrefslogtreecommitdiffstats
path: root/src/plugins/sensors/sensorfw/sensorfwsensorbase.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/sensors/sensorfw/sensorfwsensorbase.h')
-rw-r--r--src/plugins/sensors/sensorfw/sensorfwsensorbase.h74
1 files changed, 7 insertions, 67 deletions
diff --git a/src/plugins/sensors/sensorfw/sensorfwsensorbase.h b/src/plugins/sensors/sensorfw/sensorfwsensorbase.h
index 769a8cbb..39e4147e 100644
--- a/src/plugins/sensors/sensorfw/sensorfwsensorbase.h
+++ b/src/plugins/sensors/sensorfw/sensorfwsensorbase.h
@@ -77,10 +77,13 @@ protected:
template<typename T>
void initSensor(bool &initDone)
{
-
const QString name = sensorName();
if (!initDone) {
+ if (!m_remoteSensorManager) {
+ qDebug() << "There is no sensor manager yet, do not initialize" << name;
+ return;
+ }
if (!m_remoteSensorManager->loadPlugin(name)) {
sensorError(KErrNotFound);
return;
@@ -91,71 +94,7 @@ protected:
if (!m_sensorInterface) {
m_sensorInterface = const_cast<T*>(T::listenInterface(name));
}
- if (!m_sensorInterface) {
- sensorError(KErrNotFound);
- return;
- }
- if (!m_sensorInterface) {
- sensorError(KErrNotFound);
- return;
- }
-
- initDone = true;
-
- //metadata
- QList<DataRange> intervals = m_sensorInterface->getAvailableIntervals();
-
- for (int i = 0, l = intervals.size(); i < l; i++) {
- qreal intervalMax = ((DataRange)(intervals.at(i))).max;
- qreal intervalMin =((DataRange)(intervals.at(i))).min;
-
- if (intervalMin == 0 && intervalMax == 0) {
- // 0 interval has different meanings in e.g. magge/acce
- // magge -> best-effort
- // acce -> lowest possible
- // in Qt API setting 0 means default
- continue;
- }
-
- qreal rateMin = intervalMax < 1 ? 1 : 1 / intervalMax * 1000;
- rateMin = rateMin < 1 ? 1 : rateMin;
-
- intervalMin = intervalMin < 1 ? 10: intervalMin; // do not divide with 0
- qreal rateMax = 1 / intervalMin * 1000;
- addDataRate(rateMin, rateMax);
- }
-
- //bufferSizes
- if (m_bufferingSensors.contains(sensor()->identifier())) {
-
- IntegerRangeList sizes = m_sensorInterface->getAvailableBufferSizes();
- int l = sizes.size();
- for (int i = 0; i < l; i++) {
- int second = sizes.at(i).second;
- m_maxBufferSize = second > m_bufferSize ? second : m_maxBufferSize;
- }
- m_maxBufferSize = m_maxBufferSize < 0 ? 1 : m_maxBufferSize;
- //SensorFW guarantees to provide the most efficient size first
- //TODO: remove from comments
- //m_efficientBufferSize = m_sensorInterface->hwBuffering()? (l>0?sizes.at(0).first:1) : 1;
- }
- else
- m_maxBufferSize = 1;
-
- sensor()->setMaxBufferSize(m_maxBufferSize);
- sensor()->setEfficientBufferSize(m_efficientBufferSize);
-
- QByteArray type = sensor()->type();
- if (type == QAmbientLightSensor::type) return; // SensorFW returns lux values, plugin enumerated values
- if (type == QIRProximitySensor::type) return; // SensorFW returns raw reflectance values, plugin % of max reflectance
- if (name == "accelerometersensor") return; // SensorFW returns milliGs, plugin m/s^2
- if (name == "magnetometersensor") return; // SensorFW returns nanoTeslas, plugin Teslas
- if (name == "gyroscopesensor") return; // SensorFW returns DSPs, plugin milliDSPs
-
- setDescription(m_sensorInterface->description());
-
- if (name == "tapsensor") return;
- setRanges();
+ initDone = initSensorInterface(name);
};
@@ -163,9 +102,10 @@ protected:
int m_bufferSize;
int bufferSize() const;
virtual qreal correctionFactor() const;
+ bool reinitIsNeeded;
private:
-
+ bool initSensorInterface(QString const &);
static SensorManagerInterface* m_remoteSensorManager;
int m_prevOutputRange;
bool doConnectAfterCheck();