39 ** |
39 ** |
40 ****************************************************************************/ |
40 ****************************************************************************/ |
41 |
41 |
42 #include "maemo6magnetometer.h" |
42 #include "maemo6magnetometer.h" |
43 |
43 |
44 const char *maemo6magnetometer::id("maemo6.magnetometer"); |
44 char const * const maemo6magnetometer::id("maemo6.magnetometer"); |
45 bool maemo6magnetometer::m_initDone = false; |
45 bool maemo6magnetometer::m_initDone = false; |
46 |
46 |
47 maemo6magnetometer::maemo6magnetometer(QSensor *sensor) |
47 maemo6magnetometer::maemo6magnetometer(QSensor *sensor) |
48 : maemo6sensorbase(sensor), m_sensor(sensor) |
48 : maemo6sensorbase(sensor) |
49 { |
49 { |
|
50 const QString sensorName = "magnetometersensor"; |
|
51 initSensor<MagnetometerSensorChannelInterface>(sensorName, m_initDone); |
|
52 |
|
53 |
|
54 if (m_sensorInterface){ |
|
55 if (!(QObject::connect(m_sensorInterface, SIGNAL(dataAvailable(const MagneticField&)), |
|
56 this, SLOT(slotDataAvailable(const MagneticField&))))) |
|
57 qWarning() << "Unable to connect "<< sensorName; |
|
58 } |
|
59 else |
|
60 qWarning() << "Unable to initialize "<< sensorName; |
|
61 |
50 setReading<QMagnetometerReading>(&m_reading); |
62 setReading<QMagnetometerReading>(&m_reading); |
|
63 // metadata |
|
64 addDataRate(1, 130); // 43 Hz |
|
65 addOutputRange(-0.000614, 0.000614, 0.0000003); // -600 ... 600 mikroteslas, 0.3 uT resolution |
|
66 setDescription(QLatin1String("Measures magnetic flux density in teslas")); |
51 |
67 |
52 if (!m_initDone) { |
68 } |
53 qDBusRegisterMetaType<MagneticField>(); |
|
54 initSensor<MagnetometerSensorChannelInterface>("magnetometersensor"); |
|
55 |
69 |
56 if (m_sensorInterface) |
70 void maemo6magnetometer::start(){ |
57 QObject::connect(static_cast<const MagnetometerSensorChannelInterface*>(m_sensorInterface), SIGNAL(dataAvailable(const MagneticField&)), this, SLOT(slotDataAvailable(const MagneticField&))); |
71 maemo6sensorbase::start(); |
58 else |
72 QVariant v = sensor()->property("returnGeoValues"); |
59 qWarning() << "Unable to initialize magnetometer sensor."; |
73 m_isGeoMagnetometer = v.isValid() && v.toBool()? true: false; |
60 |
|
61 // metadata |
|
62 addDataRate(43, 43); // 43Hz |
|
63 sensor->setDataRate(43); |
|
64 addOutputRange(-0.000614, 0.000614, 0.0000003); // -600 ... 600 mikroteslas, 0.3 uT resolution |
|
65 setDescription(QLatin1String("Measures magnetic flux density measured in teslas")); |
|
66 |
|
67 m_initDone = true; |
|
68 } |
|
69 } |
74 } |
70 |
75 |
71 void maemo6magnetometer::slotDataAvailable(const MagneticField& data) |
76 void maemo6magnetometer::slotDataAvailable(const MagneticField& data) |
72 { |
77 { |
73 QVariant v = m_sensor->property("returnGeoValues"); |
78 |
74 if (v.isValid() && v.toBool()) { |
79 if (m_isGeoMagnetometer){ |
75 m_reading.setX( 0.0000003 * data.x() ); |
80 m_reading.setX( 0.0000003 * data.x() ); |
76 m_reading.setY( 0.0000003 * data.y() ); |
81 m_reading.setY( 0.0000003 * data.y() ); |
77 m_reading.setZ( 0.0000003 * data.z() ); |
82 m_reading.setZ( 0.0000003 * data.z() ); |
78 m_reading.setCalibrationLevel( ((float) data.level()) / 3.0 ); |
83 m_reading.setCalibrationLevel( ((float) data.level()) / 3.0 ); |
79 } else { |
84 } else { |