[QGIS Commit] r14339 - in trunk/qgis/src: app/gps core/gps/qextserialport

svn_qgis at osgeo.org svn_qgis at osgeo.org
Tue Oct 5 08:30:43 EDT 2010


Author: jef
Date: 2010-10-05 12:30:43 +0000 (Tue, 05 Oct 2010)
New Revision: 14339

Modified:
   trunk/qgis/src/app/gps/qgsgpsinformationwidget.cpp
   trunk/qgis/src/core/gps/qextserialport/qextserialenumerator.cpp
Log:
fix com port detection on windows

Modified: trunk/qgis/src/app/gps/qgsgpsinformationwidget.cpp
===================================================================
--- trunk/qgis/src/app/gps/qgsgpsinformationwidget.cpp	2010-10-05 09:29:34 UTC (rev 14338)
+++ trunk/qgis/src/app/gps/qgsgpsinformationwidget.cpp	2010-10-05 12:30:43 UTC (rev 14339)
@@ -889,7 +889,9 @@
   QList< QPair<QString, QString> > ports = QgsGPSDetector::availablePorts();
 
   mCboDevices->clear();
-  for ( int i = 0; i < ports.size(); i++ )
+
+  // add devices to combobox, but skip gpsd which is first.
+  for ( int i = 1; i < ports.size(); i++ )
   {
     mCboDevices->addItem( ports[i].second, ports[i].first );
   }

Modified: trunk/qgis/src/core/gps/qextserialport/qextserialenumerator.cpp
===================================================================
--- trunk/qgis/src/core/gps/qextserialport/qextserialenumerator.cpp	2010-10-05 09:29:34 UTC (rev 14338)
+++ trunk/qgis/src/core/gps/qextserialport/qextserialenumerator.cpp	2010-10-05 12:30:43 UTC (rev 14339)
@@ -85,7 +85,27 @@
     //static
     void QextSerialEnumerator::setupAPIScan(QList<QextPortInfo> & infoList)
     {
+#if 0
         enumerateDevicesWin(GUID_DEVCLASS_PORTS, &infoList);
+#else
+        // just iterate the com ports.
+        // looks like GUID_DEVCLASS_PORTS doesn't find them all.
+        for( unsigned int i = 0 ; i < 256; i++ )
+        {
+          QString port = "\\\\.\\COM" + QString::number(i);
+
+          HANDLE hPort = ::CreateFile(port.toAscii(), GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
+          if( hPort == INVALID_HANDLE_VALUE )
+            continue;
+
+          QextPortInfo info;
+          info.friendName = QString("COM%1:").arg( i );
+          info.portName = port;
+          infoList.append(info);
+
+          CloseHandle( hPort );
+				}
+#endif
     }
 
     void QextSerialEnumerator::enumerateDevicesWin( const GUID & guid, QList<QextPortInfo>* infoList )



More information about the QGIS-commit mailing list