MainWindow::MainWindow( QWidget *parent) : QWidget(parent) { ip = new QLineEdit("127.0.0.1"); port = new QLineEdit("33333"); status = new QLabel(tr("Not connected")); connectBtn = new QPushButton(tr("Connect")); msgId = new QLineEdit("0"); msgValue = new QLineEdit("0"); sendMsg = new QPushButton(tr("Send Message")); quitBtn = new QPushButton(tr("Quit")); // Connection parameters QGroupBox* grp1 = new QGroupBox(tr("Connection")); QVBoxLayout* grp1layout = new QVBoxLayout(); grp1->setLayout(grp1layout); grp1layout->addWidget(new QLabel(tr("IP"))); grp1layout->addWidget(ip); grp1layout->addWidget(new QLabel(tr("Port"))); grp1layout->addWidget(port); grp1layout->addWidget(status); grp1layout->addWidget(connectBtn); // UserMessage parameters QGroupBox* grp2 = new QGroupBox(tr("User message")); QVBoxLayout* grp2layout = new QVBoxLayout(); grp2->setLayout(grp2layout); grp2layout->addWidget(new QLabel(tr("Message ID"))); grp2layout->addWidget(msgId); grp2layout->addWidget(new QLabel(tr("Data 0"))); grp2layout->addWidget(msgValue); grp2layout->addWidget(sendMsg); // Overall layout QVBoxLayout* main_layout = new QVBoxLayout(); main_layout->addWidget(grp1); main_layout->addWidget(grp2); main_layout->addWidget(quitBtn); setLayout(main_layout); // connect widgets connect(connectBtn, SIGNAL(clicked()), this, SLOT(connectToDashel())); connect(sendMsg, SIGNAL(clicked()), this, SLOT(sendUserMessage())); connect(quitBtn, SIGNAL(clicked()), this, SLOT(close())); // connect signals from dashel connect(&dashelInterface, SIGNAL(messageAvailable(Aseba::UserMessage *)), SLOT(messageFromDashel(Aseba::UserMessage *)), Qt::QueuedConnection); connect(&dashelInterface, SIGNAL(dashelDisconnection()), SLOT(disconnectionFromDashel()), Qt::QueuedConnection); connect(&dashelInterface, SIGNAL(dashelConnection()), SLOT(connectionFromDashel()), Qt::QueuedConnection); }
// internals void DashelInterface::run() { while (1) { try { stream = Dashel::Hub::connect(dashelParams.toStdString()); emit dashelConnection(); qDebug() << "Connected to target: " << dashelParams; isConnected = true; break; } catch (Dashel::DashelException e) { qDebug() << "Cannot connect to target: " << dashelParams; sleep(1000000L); // 1s } } while (isRunning) Dashel::Hub::run(); }