Implement connecting to the device

pull/53/head
michal.szwaj 2018-03-21 23:51:31 +01:00
parent 69d6cf835b
commit 7c31bafa10
3 changed files with 60 additions and 10 deletions

View File

@ -1,6 +1,8 @@
#pragma once
#include <QDialog>
#include <f1x/aasdk/TCP/ITCPEndpoint.hpp>
#include <f1x/aasdk/TCP/ITCPWrapper.hpp>
namespace Ui {
class ConnectDialog;
@ -20,11 +22,22 @@ class ConnectDialog : public QDialog
Q_OBJECT
public:
explicit ConnectDialog(QWidget *parent = nullptr);
explicit ConnectDialog(boost::asio::io_service& ioService, aasdk::tcp::ITCPWrapper& tcpWrapper, QWidget *parent = nullptr);
~ConnectDialog() override;
signals:
void connectToDevice(const QString& ipAddress);
void connected(aasdk::tcp::ITCPEndpoint::SocketPointer socket);
void connectionFailed();
private slots:
void onConnectButtonClicked();
void onConnectionFailed();
private:
Ui::ConnectDialog *ui;
boost::asio::io_service& ioService_;
aasdk::tcp::ITCPWrapper& tcpWrapper_;
Ui::ConnectDialog *ui_;
};
}

View File

@ -1,3 +1,4 @@
#include <QMessageBox>
#include <f1x/openauto/autoapp/UI/ConnectDialog.hpp>
#include "ui_connectdialog.h"
@ -10,16 +11,47 @@ namespace autoapp
namespace ui
{
ConnectDialog::ConnectDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::ConnectDialog)
ConnectDialog::ConnectDialog(boost::asio::io_service& ioService, aasdk::tcp::ITCPWrapper& tcpWrapper, QWidget *parent)
: QDialog(parent)
, ioService_(ioService)
, tcpWrapper_(tcpWrapper)
, ui_(new Ui::ConnectDialog)
{
ui->setupUi(this);
qRegisterMetaType<aasdk::tcp::ITCPEndpoint::SocketPointer>("aasdk::tcp::ITCPEndpoint::SocketPointer");
ui_->setupUi(this);
connect(ui_->pushButtonCancel, &QPushButton::clicked, this, &ConnectDialog::close);
connect(ui_->pushButtonConnect, &QPushButton::clicked, this, &ConnectDialog::onConnectButtonClicked);
connect(this, &ConnectDialog::connectionFailed, this, &ConnectDialog::onConnectionFailed);
}
ConnectDialog::~ConnectDialog()
{
delete ui;
delete ui_;
}
void ConnectDialog::onConnectButtonClicked()
{
const auto& ipAddress = ui_->lineEditIPAddress->text().toStdString();
auto socket = std::make_shared<boost::asio::ip::tcp::socket>(ioService_);
// !ec means no error
if(!tcpWrapper_.connect(*socket, ipAddress, 5277))
{
emit connected(socket);
this->close();
}
else
{
emit connectionFailed();
}
}
void ConnectDialog::onConnectionFailed()
{
QMessageBox errorMessage(QMessageBox::Critical, "Error", "Connection failed.", QMessageBox::Ok);
errorMessage.setWindowFlags(Qt::WindowStaysOnTopHint);
errorMessage.exec();
}
}

View File

@ -90,8 +90,9 @@ int main(int argc, char* argv[])
autoapp::ui::SettingsWindow settingsWindow(configuration);
settingsWindow.setWindowFlags(Qt::WindowStaysOnTopHint);
autoapp::ui::ConnectDialog connectDialog;
connectDialog.setWindowFlags(Qt::Window | Qt::WindowStaysOnTopHint);
aasdk::tcp::TCPWrapper tcpWrapper;
autoapp::ui::ConnectDialog connectDialog(ioService, tcpWrapper);
connectDialog.setWindowFlags(Qt::WindowStaysOnTopHint);
QObject::connect(&mainWindow, &autoapp::ui::MainWindow::exit, []() { std::exit(0); });
QObject::connect(&mainWindow, &autoapp::ui::MainWindow::openSettings, &settingsWindow, &autoapp::ui::SettingsWindow::showFullScreen);
@ -105,7 +106,6 @@ int main(int argc, char* argv[])
mainWindow.showFullScreen();
aasdk::tcp::TCPWrapper tcpWrapper;
aasdk::usb::USBWrapper usbWrapper(usbContext);
aasdk::usb::AccessoryModeQueryFactory queryFactory(usbWrapper, ioService);
aasdk::usb::AccessoryModeQueryChainFactory queryChainFactory(usbWrapper, ioService, queryFactory);
@ -115,6 +115,11 @@ int main(int argc, char* argv[])
auto usbHub(std::make_shared<aasdk::usb::USBHub>(usbWrapper, ioService, queryChainFactory));
auto connectedAccessoriesEnumerator(std::make_shared<aasdk::usb::ConnectedAccessoriesEnumerator>(usbWrapper, ioService, queryChainFactory));
auto app = std::make_shared<autoapp::App>(ioService, usbWrapper, tcpWrapper, androidAutoEntityFactory, std::move(usbHub), std::move(connectedAccessoriesEnumerator));
QObject::connect(&connectDialog, &autoapp::ui::ConnectDialog::connected, [&app](auto socket) {
app->start(std::move(socket));
});
app->waitForUSBDevice();
auto result = qApplication.exec();