summaryrefslogtreecommitdiffstats
path: root/src/plugins/sensors
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/sensors')
-rw-r--r--src/plugins/sensors/eandroid/eandroidsensordevice.cpp34
-rw-r--r--src/plugins/sensors/eandroid/eandroidsensordevice.h3
2 files changed, 25 insertions, 12 deletions
diff --git a/src/plugins/sensors/eandroid/eandroidsensordevice.cpp b/src/plugins/sensors/eandroid/eandroidsensordevice.cpp
index 178ef8f..7e4caed 100644
--- a/src/plugins/sensors/eandroid/eandroidsensordevice.cpp
+++ b/src/plugins/sensors/eandroid/eandroidsensordevice.cpp
@@ -41,12 +41,18 @@ void EventReaderThread::run()
EAndroidSensorDevice::EAndroidSensorDevice()
: m_eventThread(0),
m_sensorModule(0),
- m_availableSensorsList(0)
+ m_sensorDevice(0),
+ m_availableSensorsList(0),
+ m_initSuccess(true)
{
- initSensorDevice();
- m_eventThread = new EventReaderThread(this);
- connect(m_eventThread, SIGNAL(eventPending()), this,
+ m_initSuccess = initSensorDevice();
+ if (m_initSuccess) {
+ m_eventThread = new EventReaderThread(this);
+ connect(m_eventThread, SIGNAL(eventPending()), this,
SLOT(processSensorEvents()), Qt::QueuedConnection);
+ } else {
+ qWarning("Failed to initialize sensor module. Possibly a missing sensor driver?");
+ }
}
EAndroidSensorDevice* EAndroidSensorDevice::m_instance = 0;
@@ -149,24 +155,30 @@ QString EAndroidSensorDevice::description(int type) const
int EAndroidSensorDevice::availableSensors(sensor_t const** list) const
{
- return m_sensorModule->get_sensors_list(m_sensorModule, list);
+ if (m_initSuccess)
+ return m_sensorModule->get_sensors_list(m_sensorModule, list);
+ return 0;
}
-void EAndroidSensorDevice::initSensorDevice()
+bool EAndroidSensorDevice::initSensorDevice()
{
int err = 0;
err = hw_get_module(SENSORS_HARDWARE_MODULE_ID,
(hw_module_t const**)&m_sensorModule);
- if (err != 0)
+ if (err != 0 || !m_sensorModule) {
qWarning("hw_get_module() failed (%s)\n", strerror(-err));
+ return false;
+ }
- if (m_sensorModule) {
- err = sensors_open(&m_sensorModule->common, &m_sensorDevice);
- if (err != 0)
- qWarning("sensors_open() failed (%s)\n", strerror(-err));
+ err = sensors_open(&m_sensorModule->common, &m_sensorDevice);
+ if (err != 0 || !m_sensorDevice) {
+ qWarning("sensors_open() failed (%s)\n", strerror(-err));
+ return false;
}
+
m_availableSensors = m_sensorModule->get_sensors_list(m_sensorModule,
&m_availableSensorsList);
+ return true;
}
void EAndroidSensorDevice::processSensorEvents() const
diff --git a/src/plugins/sensors/eandroid/eandroidsensordevice.h b/src/plugins/sensors/eandroid/eandroidsensordevice.h
index 6d9a64b..b34580e 100644
--- a/src/plugins/sensors/eandroid/eandroidsensordevice.h
+++ b/src/plugins/sensors/eandroid/eandroidsensordevice.h
@@ -52,7 +52,7 @@ public:
QString description(int type) const;
protected:
- void initSensorDevice();
+ bool initSensorDevice();
int indexForType(int type) const;
void setActive(int type, bool enable);
void setDelay(int type, int dataRateHz) const;
@@ -73,6 +73,7 @@ private:
sensors_poll_device_t* m_sensorDevice;
sensor_t const* m_availableSensorsList;
int m_availableSensors;
+ bool m_initSuccess;
ListenersHash m_listenersHash;
};