diff --git a/connections/connectionwindow.cpp b/connections/connectionwindow.cpp index 1c6ae84..07f6804 100644 --- a/connections/connectionwindow.cpp +++ b/connections/connectionwindow.cpp @@ -1,4 +1,5 @@ #include +#include #include #include "connectionwindow.h" @@ -67,8 +68,24 @@ ConnectionWindow::ConnectionWindow(QWidget *parent) : ui->lblDeviceType->setHidden(true); ui->cbDeviceType->setHidden(true); + + rxBroadcast = new QUdpSocket(this); + rxBroadcast->bind(QHostAddress::AnyIPv4, 17222); + + connect(rxBroadcast, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams())); } + +void ConnectionWindow::readPendingDatagrams() +{ + while (rxBroadcast->hasPendingDatagrams()) { + QNetworkDatagram datagram = rxBroadcast->receiveDatagram(); + if (!remoteDeviceIP.contains(datagram.senderAddress().toString())) + { + remoteDeviceIP.append(datagram.senderAddress().toString()); + } + } +} ConnectionWindow::~ConnectionWindow() { QList& conns = CANConManager::getInstance()->getConnections(); @@ -373,9 +390,14 @@ void ConnectionWindow::selectSocketCan() void ConnectionWindow::selectRemote() { ui->lPort->setText("IP Address:"); - ui->stPort->setCurrentWidget(ui->etPage); + ui->stPort->setCurrentWidget(ui->cbPage); ui->lblDeviceType->setHidden(true); ui->cbDeviceType->setHidden(true); + ui->cbPort->clear(); + foreach(QString pName, remoteDeviceIP) + { + ui->cbPort->addItem(pName); + } } void ConnectionWindow::setSpeed(int speed0) @@ -421,7 +443,9 @@ void ConnectionWindow::setPortName(CANCon::type pType, QString pPortName, QStrin } case CANCon::REMOTE: { - ui->lePort->setText(pPortName); + int idx = ui->cbPort->findText(pPortName); + if (idx > -1) ui->cbPort->setCurrentIndex(idx); + else ui->cbPort->addItem(pPortName); break; } default: {} @@ -440,9 +464,8 @@ QString ConnectionWindow::getPortName() switch( getConnectionType() ) { case CANCon::GVRET_SERIAL: case CANCon::SERIALBUS: - return ui->cbPort->currentText(); case CANCon::REMOTE: - return ui->lePort->text(); + return ui->cbPort->currentText(); default: qDebug() << "getPortName: can't get port"; } diff --git a/connections/connectionwindow.h b/connections/connectionwindow.h index 7b44a1d..515d34e 100644 --- a/connections/connectionwindow.h +++ b/connections/connectionwindow.h @@ -10,6 +10,7 @@ #include #include #include +#include #include "canconnectionmodel.h" #include "connections/canconnection.h" @@ -61,6 +62,7 @@ private slots: void handleSendHex(); void handleSendText(); void connectionStatus(CANConStatus); + void readPendingDatagrams(); private: Ui::ConnectionWindow *ui; @@ -68,6 +70,8 @@ private: QList canDevices; QSettings *settings; CANConnectionModel *connModel; + QUdpSocket *rxBroadcast; + QVector remoteDeviceIP; void selectSerial(); void selectKvaser(); diff --git a/ui/connectionwindow.ui b/ui/connectionwindow.ui index b679a1b..0e52eae 100644 --- a/ui/connectionwindow.ui +++ b/ui/connectionwindow.ui @@ -152,7 +152,7 @@ Qt::LeftToRight - 0 + 1 @@ -179,6 +179,9 @@ 16777215 + + true +