Class which monitors n900 connection state.
[yandex-traffic] / connection.cpp
index 18a2ee0..03207d5 100644 (file)
@@ -1,4 +1,8 @@
+#include <QtDBus>
+
 #include "connection.hpp"
+#include "icd2_light.h"
+
 
 static ConnectionChecker *_instance = NULL;
 
@@ -15,13 +19,40 @@ ConnectionChecker *ConnectionChecker::instance ()
 
 
 ConnectionChecker::ConnectionChecker ()
+    : _bus (QDBusConnection::systemBus ())
+{
+    _connected = true;
+
+    _itf = new QDBusInterface (ICD_DBUS_API_INTERFACE, ICD_DBUS_API_PATH, ICD_DBUS_API_INTERFACE, _bus);
+    _bus.connect (ICD_DBUS_API_INTERFACE, ICD_DBUS_API_PATH, ICD_DBUS_API_INTERFACE, ICD_DBUS_API_STATE_SIG,
+                  this, SLOT (stateSignal (const QDBusMessage&)));
+
+    requestState ();
+}
+
+
+void ConnectionChecker::requestState ()
 {
-    // start timer which will check connection
-    startTimer (15*1000);
+    QDBusMessage msg = QDBusMessage::createSignal (ICD_DBUS_API_PATH, ICD_DBUS_API_INTERFACE, ICD_DBUS_API_STATE_REQ);
+
+    _bus.send (msg);
 }
 
 
-void ConnectionChecker::timerEvent (QTimerEvent *)
+void ConnectionChecker::stateSignal (const QDBusMessage& msg)
 {
-    // check for connection
+    unsigned int status = msg.arguments ().value (7).value<unsigned int>();
+
+    if (status == ICD_STATE_CONNECTED) {
+        if (!_connected) {
+            _connected = true;
+            emit connected (true);
+        }
+    }
+    else {
+        if (_connected) {
+            _connected = false;
+            emit connected (false);
+        }
+    }
 }