QList< QPair<QString, QString> > QgsGPSDetector::availablePorts() { QList< QPair<QString, QString> > devs; // try local QtLocation first #if defined(HAVE_QT_MOBILITY_LOCATION ) || defined(QT_POSITIONING_LIB) devs << QPair<QString, QString>( "internalGPS", tr( "internal GPS" ) ); #endif // try local gpsd first devs << QPair<QString, QString>( "localhost:2947:", tr( "local gpsd" ) ); #ifdef Q_OS_LINUX // look for linux serial devices Q_FOREACH ( const QString& linuxDev, QStringList() << "/dev/ttyS%1" << "/dev/ttyUSB%1" << "/dev/rfcomm%1" << "/dev/ttyACM%1" ) { for ( int i = 0; i < 10; ++i ) { if ( QFileInfo( linuxDev.arg( i ) ).exists() ) { devs << QPair<QString, QString>( linuxDev.arg( i ), linuxDev.arg( i ) ); } } } #endif #ifdef Q_OS_FREEBSD // and freebsd devices (untested) Q_FOREACH ( const QString& freebsdDev, QStringList() << "/dev/cuaa%1" << "/dev/ucom%1" ) { for ( int i = 0; i < 10; ++i ) { if ( QFileInfo( freebsdDev.arg( i ) ).exists() ) { devs << QPair<QString, QString>( freebsdDev.arg( i ), freebsdDev.arg( i ) ); } } } #endif #ifdef Q_OS_SOLARIS // and solaris devices (also untested) QString solarisDev( "/dev/cua/%1" ); for ( char i = 'a'; i < 'k'; ++i ) { if ( QFileInfo( solarisDev.arg( i ) ).exists() ) { devs << QPair<QString, QString>( solarisDev.arg( i ), solarisDev.arg( i ) ); } } #endif #if defined(Q_OS_WIN) || defined(Q_OS_MAC) QList<QextPortInfo> ports = QextSerialEnumerator::getPorts(); Q_FOREACH ( QextPortInfo port, ports ) { devs << QPair<QString, QString>( port.portName, port.friendName ); }
void QgsGPSPluginGui::populatePortComboBoxes() { cmbDLPort->clear(); #ifdef linux // look for linux serial devices QString linuxDev( "/dev/ttyS%1" ); for ( int i = 0; i < 10; ++i ) { if ( QFileInfo( linuxDev.arg( i ) ).exists() ) { cmbDLPort->addItem( linuxDev.arg( i ) ); cmbULPort->addItem( linuxDev.arg( i ) ); } else break; } // and the ttyUSB* devices (serial USB adaptor) linuxDev = "/dev/ttyUSB%1"; for ( int i = 0; i < 10; ++i ) { if ( QFileInfo( linuxDev.arg( i ) ).exists() ) { cmbDLPort->addItem( linuxDev.arg( i ) ); cmbULPort->addItem( linuxDev.arg( i ) ); } else break; } cmbDLPort->addItem( "usb:" ); cmbULPort->addItem( "usb:" ); #endif #ifdef __FreeBSD__ // freebsd // and freebsd devices (untested) QString freebsdDev( "/dev/cuaa%1" ); for ( int i = 0; i < 10; ++i ) { if ( QFileInfo( freebsdDev.arg( i ) ).exists() ) { cmbDLPort->addItem( freebsdDev.arg( i ) ); cmbULPort->addItem( freebsdDev.arg( i ) ); } else break; } // and the ucom devices (serial USB adaptors) freebsdDev = "/dev/ucom%1"; for ( int i = 0; i < 10; ++i ) { if ( QFileInfo( freebsdDev.arg( i ) ).exists() ) { cmbDLPort->addItem( freebsdDev.arg( i ) ); cmbULPort->addItem( freebsdDev.arg( i ) ); } else break; } #endif #ifdef sparc // and solaris devices (also untested) QString solarisDev( "/dev/cua/%1" ); for ( int i = 'a'; i < 'k'; ++i ) { if ( QFileInfo( solarisDev.arg( char( i ) ) ).exists() ) { cmbDLPort->addItem( solarisDev.arg( char( i ) ) ); cmbULPort->addItem( solarisDev.arg( char( i ) ) ); } else break; } #endif #ifdef WIN32 cmbULPort->addItem( "com1" ); cmbULPort->addItem( "com2" ); cmbULPort->addItem( "com3" ); cmbULPort->addItem( "com4" ); cmbULPort->addItem( "usb:" ); cmbDLPort->addItem( "com1" ); cmbDLPort->addItem( "com2" ); cmbDLPort->addItem( "com3" ); cmbDLPort->addItem( "com4" ); cmbDLPort->addItem( "usb:" ); #endif // OSX, OpenBSD, NetBSD etc? Anyone? // remember the last ports used QSettings settings; QString lastDLPort = settings.value( "/Plugin-GPS/lastdlport", "" ).toString(); QString lastULPort = settings.value( "/Plugin-GPS/lastulport", "" ).toString(); for ( int i = 0; i < cmbDLPort->count(); ++i ) { if ( cmbDLPort->itemText( i ) == lastDLPort ) { cmbDLPort->setCurrentIndex( i ); break; } } for ( int i = 0; i < cmbULPort->count(); ++i ) { if ( cmbULPort->itemText( i ) == lastULPort ) { cmbULPort->setCurrentIndex( i ); break; } } }