[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    kdenonbeta/kmobiletools/kmobiletools/engines/at_engine
From:       Marco Gulino <marco () kmobiletools ! org>
Date:       2005-03-31 22:08:03
Message-ID: 20050331220803.2171F637 () office ! kde ! org
[Download RAW message or body]

CVS commit by gulino: 

Device hotplug 


  M +41 -12    device.cpp   1.3
  M +8 -1      device.h   1.5


--- kdenonbeta/kmobiletools/kmobiletools/engines/at_engine/device.cpp  #1.2:1.3
@@ -28,5 +28,5 @@
 #include <iostream>
 #include <kdebug.h>
-
+#include <qtimer.h>
 #include <qstring.h>
 #include <qregexp.h>
@@ -44,10 +44,8 @@ Device::Device(const char* name)
         locked=false;
         modem=-1;
-    modem = open( Config->at_path() , O_RDWR | O_NOCTTY | O_NONBLOCK );
-    kdDebug() << "Modem handle: " << modem << endl;
-        setupModem();
-        sendCommand("\x1A\r",5);
-        sendCommand(Config->at_initString()+ "\r",5);
-    if ( Config->at_initString2().length() >0 ) sendCommand(Config->at_initString2() \
+ "\r",5); +
+    QTimer *devicePollTimer = new QTimer( this );
+    connect( devicePollTimer, SIGNAL(timeout()), this, SLOT(slotDevicePoll() ) );
+    devicePollTimer->start( 400, FALSE );
 }
 
@@ -232,2 +230,33 @@ QString Device::decodePDU( QString text 
     return decoded;
 }
+
+
+/*!
+    \fn Device::slotDevicePoll()
+ */
+void Device::slotDevicePoll()
+{
+    /** A little bit of documentation here...
+    When modem is -1, we're not connected, so we should try to connect.
+    When modem is positive, we send a ioctl to check if it's already online, if not \
we send a disconnect() signal +    */
+    if(modem==-1)
+    {
+        modem = open( Config->at_path() , O_RDWR | O_NOCTTY | O_NONBLOCK );
+        kdDebug() << "Modem handle: " << modem << endl;
+        setupModem();
+        sendCommand("\x1A\r",5);
+        sendCommand(Config->at_initString()+ "\r",5);
+        if ( Config->at_initString2().length() >0 ) \
sendCommand(Config->at_initString2() + "\r",5); +        emit connected();
+        return;
+    }
+    if(ioctl(modem, TIOCMGET, &ioctlDummy) == -1 ) 
+    {
+        emit disconnected();
+        modem=-1;
+        kdDebug() << "Modem disconnected" << endl;
+        return;
+    }
+    kdDebug() << "Modem works correctly" << endl;
+}

--- kdenonbeta/kmobiletools/kmobiletools/engines/at_engine/device.h  #1.4:1.5
@@ -29,5 +29,5 @@
 */
 class DevicesConfig;
-
+class QTimer;
 class Device : public QObject
 {
@@ -45,5 +45,7 @@ public:
     private:
     DevicesConfig* Config;
+    QTimer *devicePollTimer;
     long jobCount;
+    int ioctlDummy;
 protected:
     void setupModem();
@@ -56,4 +58,9 @@ public slots:
     int sendChar(unsigned char c);
     char* getDevBuffer();
+    void slotDevicePoll();
+signals:
+    void disconnected();
+    void connected();
+    void error();
 };
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic