diff --git a/CMakeLists.txt b/CMakeLists.txt index b178fd8..6d96302 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,7 +29,7 @@ add_definitions(-DBOOST_ALL_DYN_LINK) find_package(Boost REQUIRED COMPONENTS system log OPTIONAL_COMPONENTS unit_test_framework) find_package(libusb-1.0 REQUIRED) -find_package(Qt5 COMPONENTS Multimedia MultimediaWidgets Bluetooth) +find_package(Qt5 COMPONENTS Multimedia MultimediaWidgets Bluetooth Network) find_package(Protobuf REQUIRED) find_package(OpenSSL REQUIRED) find_package(rtaudio REQUIRED) @@ -53,6 +53,7 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR} ${Qt5MultimediaWidgets_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS} ${Qt5Bluetooth_INCLUDE_DIRS} + ${Qt5Network_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${LIBUSB_1_INCLUDE_DIRS} ${PROTOBUF_INCLUDE_DIR} @@ -81,6 +82,7 @@ target_link_libraries(autoapp ${Qt5Multimedia_LIBRARIES} ${Qt5MultimediaWidgets_LIBRARIES} ${Qt5Bluetooth_LIBRARIES} + ${Qt5Network_LIBRARIES} ${LIBUSB_1_LIBRARIES} ${PROTOBUF_LIBRARIES} ${BCM_HOST_LIBRARIES} @@ -101,6 +103,7 @@ add_executable(btservice ${btservice_source_files}) target_link_libraries(btservice ${Boost_LIBRARIES} ${Qt5Bluetooth_LIBRARIES} + ${Qt5Network_LIBRARIES} ${Qt5MultimediaWidgets_LIBRARIES} ${PROTOBUF_LIBRARIES} ${AASDK_PROTO_LIBRARIES}) diff --git a/include/f1x/openauto/autoapp/UI/MainWindow.hpp b/include/f1x/openauto/autoapp/UI/MainWindow.hpp index 4b0a887..cbadd18 100644 --- a/include/f1x/openauto/autoapp/UI/MainWindow.hpp +++ b/include/f1x/openauto/autoapp/UI/MainWindow.hpp @@ -81,6 +81,7 @@ signals: void cameraRecord(); void openConnectDialog(); void openUSBDialog(); + void openWifiDialog(); void showBrightnessSlider(); void showVolumeSlider(); void showAlphaSlider(); diff --git a/include/f1x/openauto/autoapp/UI/WifiDialog.hpp b/include/f1x/openauto/autoapp/UI/WifiDialog.hpp new file mode 100644 index 0000000..a6c0153 --- /dev/null +++ b/include/f1x/openauto/autoapp/UI/WifiDialog.hpp @@ -0,0 +1,59 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace Ui { +class WifiDialog; +} + +namespace f1x +{ +namespace openauto +{ +namespace autoapp +{ +namespace ui +{ + +class WifiDialog : public QDialog +{ + Q_OBJECT + +public: + explicit WifiDialog(QWidget *parent = nullptr); + ~WifiDialog() override; + + bool connected; + int foundCount; + QNetworkConfiguration netcfg; + QStringList WiFisList; + QList netcfgList; + + Ui::WifiDialog* ui_; + +public slots: + void findActiveWirelesses(); + void connectionStatusOpened(); + void connectionStatusClosed(); + void statusBarMessage(QString msg, QString color); + void configurationStateChanged(); + +private slots: + void on_btnConnect_clicked(); + +private: + QTimer *findTimer; + QStandardItemModel* listModel; + QNetworkSession *session; +}; + +} +} +} +} diff --git a/src/autoapp/Service/AndroidAutoEntity.cpp b/src/autoapp/Service/AndroidAutoEntity.cpp index 4eb07ec..50aabf8 100644 --- a/src/autoapp/Service/AndroidAutoEntity.cpp +++ b/src/autoapp/Service/AndroidAutoEntity.cpp @@ -67,7 +67,6 @@ void AndroidAutoEntity::start(IAndroidAutoEntityEventHandler& eventHandler) controlServiceChannel_->sendVersionRequest(std::move(versionRequestPromise)); controlServiceChannel_->receive(this->shared_from_this()); }); - system("/opt/crankshaft/aa_device_state.sh connected &"); } void AndroidAutoEntity::stop() @@ -82,7 +81,6 @@ void AndroidAutoEntity::stop() transport_->stop(); cryptor_->deinit(); }); - system("/opt/crankshaft/aa_device_state.sh disconnected &"); } void AndroidAutoEntity::onVersionResponse(uint16_t majorCode, uint16_t minorCode, aasdk::proto::enums::VersionResponseStatus::Enum status) diff --git a/src/autoapp/UI/MainWindow.cpp b/src/autoapp/UI/MainWindow.cpp index 3fe06d1..a8ad0e8 100644 --- a/src/autoapp/UI/MainWindow.cpp +++ b/src/autoapp/UI/MainWindow.cpp @@ -129,6 +129,7 @@ MainWindow::MainWindow(configuration::IConfiguration::Pointer configuration, QWi ui_->setupUi(this); connect(ui_->pushButtonSettings, &QPushButton::clicked, this, &MainWindow::openSettings); connect(ui_->pushButtonSettings2, &QPushButton::clicked, this, &MainWindow::openSettings); + connect(ui_->pushButtonWifiSetup, &QPushButton::clicked, this, &MainWindow::openWifiDialog); connect(ui_->pushButtonExit, &QPushButton::clicked, this, &MainWindow::toggleExit); connect(ui_->pushButtonExit2, &QPushButton::clicked, this, &MainWindow::toggleExit); connect(ui_->pushButtonShutdown, &QPushButton::clicked, this, &MainWindow::exit); @@ -175,7 +176,8 @@ MainWindow::MainWindow(configuration::IConfiguration::Pointer configuration, QWi ui_->pushButtonUSB->hide(); ui_->SysinfoTopLeft->hide(); - + ui_->pushButtonWifiSetup->hide(); + QTimer *timer=new QTimer(this); connect(timer, SIGNAL(timeout()),this,SLOT(showTime())); timer->start(1000); diff --git a/src/autoapp/UI/SettingsWindow.cpp b/src/autoapp/UI/SettingsWindow.cpp index 8477422..cdaa4d3 100644 --- a/src/autoapp/UI/SettingsWindow.cpp +++ b/src/autoapp/UI/SettingsWindow.cpp @@ -751,7 +751,7 @@ void SettingsWindow::onStartHotspot() ui_->lineEdit_wifimode->setText(""); ui_->lineEdit_wlan0->setText(""); ui_->lineEditWifiSSID->setText(""); - system("sudo systemctl start hotspot &"); + system("touch /tmp/manual_hotspot_control && sudo systemctl start hotspot &"); QTimer::singleShot(15000, this, SLOT(updateNetworkInfo())); } diff --git a/src/autoapp/UI/WifiDialog.cpp b/src/autoapp/UI/WifiDialog.cpp new file mode 100644 index 0000000..6d99b52 --- /dev/null +++ b/src/autoapp/UI/WifiDialog.cpp @@ -0,0 +1,149 @@ +#include +#include + +namespace f1x +{ +namespace openauto +{ +namespace autoapp +{ +namespace ui +{ + +WifiDialog::WifiDialog(QWidget *parent) + : QDialog(parent) + , ui_(new Ui::WifiDialog) +{ + ui_->setupUi(this); + + findTimer = new QTimer(); + findTimer->setInterval(1000); + connect(findTimer,&QTimer::timeout,this,&WifiDialog::findActiveWirelesses); + connect(ui_->pushButtonClose, &QPushButton::clicked, this, &WifiDialog::close); + findTimer->start(); + connected = false; + foundCount = 0; + ui_->treeWidgetWiFis->setColumnWidth(0,50); + ui_->treeWidgetWiFis->setColumnWidth(1,200); + findActiveWirelesses(); +} + +WifiDialog::~WifiDialog() +{ + delete ui_; +} + +} +} +} +} + +void f1x::openauto::autoapp::ui::WifiDialog::findActiveWirelesses() +{ + QNetworkConfigurationManager *ncm = new QNetworkConfigurationManager(); + connect(ncm, &QNetworkConfigurationManager::onlineStateChanged, this, &WifiDialog::configurationStateChanged); + + netcfgList = ncm->allConfigurations(); + WiFisList.clear(); + for (auto &x : netcfgList) + { + if (x.bearerType() == QNetworkConfiguration::BearerWLAN) + { + if(x.name() == "") + WiFisList << "Unknown(Other Network)"; + else + WiFisList << x.name(); + + qDebug() << x.type(); + } + } + for(int i=0; itreeWidgetWiFis->topLevelItemCount(); j++) + { + QTreeWidgetItem *index = ui_->treeWidgetWiFis->topLevelItem(j); + QString str = index->text(1); + if(str == WiFisList[i]) + { + exist = true; + break; + } + } + if(!exist) + { + item->setTextAlignment(0,Qt::AlignVCenter); + item->setTextAlignment(1,Qt::AlignHCenter); + item->setText(0,QString::number(++foundCount)); + item->setText(1,WiFisList[i]); + ui_->treeWidgetWiFis->addTopLevelItem(item); + } + } +} + +void f1x::openauto::autoapp::ui::WifiDialog::connectionStatusOpened() +{ + connected = true; + ui_->btnConnect->setText("Disconnect"); + statusBarMessage("Successfully Connected.","green"); +} + +void f1x::openauto::autoapp::ui::WifiDialog::connectionStatusClosed() +{ + connected = false; + ui_->btnConnect->setText("Connect"); + statusBarMessage("Successfully Disonnected.","red"); +} + +void f1x::openauto::autoapp::ui::WifiDialog::on_btnConnect_clicked() +{ + if(!connected) + { + QString pass = QInputDialog::getText(this, "Password", "Enter Password:",QLineEdit::Password); + if(pass.isEmpty()) return; + + QModelIndex index = ui_->treeWidgetWiFis->currentIndex(); + QString str = index.data(Qt::DisplayRole).toString(); + for (auto &x : netcfgList) + { + if (x.bearerType() == QNetworkConfiguration::BearerWLAN) + { + if (x.name() == str) + { + netcfg = x; + session = new QNetworkSession(netcfg, this); + connect(session,&QNetworkSession::opened,this,&WifiDialog::connectionStatusOpened); + connect(session,&QNetworkSession::closed,this,&WifiDialog::connectionStatusClosed); + session->open(); + if(session->isOpen()) + { + connected = true; + ui_->btnConnect->setText("Disconnect"); + } + } + } + } + } + else + { + session->close(); + if(!session->isOpen()) + { + connected = false; + ui_->btnConnect->setText("Connect"); + } + } +} + +void f1x::openauto::autoapp::ui::WifiDialog::statusBarMessage(QString msg, QString color) +{ + ui_->statusBar->clearMessage(); + ui_->statusBar->setStyleSheet("color:"+color+";"); + ui_->statusBar->showMessage(msg, 5000); +} + +void f1x::openauto::autoapp::ui::WifiDialog::configurationStateChanged() +{ + qDebug()<< "emited"; +} diff --git a/src/autoapp/UI/mainwindow.ui b/src/autoapp/UI/mainwindow.ui index fb67d37..ca2744b 100644 --- a/src/autoapp/UI/mainwindow.ui +++ b/src/autoapp/UI/mainwindow.ui @@ -757,6 +757,25 @@ outline: none; + + + + + 0 + 0 + + + + background-color: rgba(100, 62, 4, 0.5); +border-radius: 4px; +border: 2px solid rgba(255,255,255,0.5); +outline: none; + + + Setup + + + diff --git a/src/autoapp/UI/settingswindow.ui b/src/autoapp/UI/settingswindow.ui index 3aa3394..440bdf8 100644 --- a/src/autoapp/UI/settingswindow.ui +++ b/src/autoapp/UI/settingswindow.ui @@ -2670,7 +2670,7 @@ outline: none; - Enable Hotspot + Enable Hotspot at system startup true diff --git a/src/autoapp/UI/wifidialog.ui b/src/autoapp/UI/wifidialog.ui new file mode 100644 index 0000000..ecee81f --- /dev/null +++ b/src/autoapp/UI/wifidialog.ui @@ -0,0 +1,164 @@ + + + WifiDialog + + + + 0 + 0 + 540 + 376 + + + + + 0 + 0 + + + + MainWindow + + + background-color: rgb(85, 87, 83); + + + + + + + + 9 + 9 + 411 + 16 + + + + + 75 + true + + + + color: rgb(255, 255, 255); + + + WiFi Networks Avaliable: + + + + + + 440 + 141 + 80 + 23 + + + + background-color: rgb(211, 215, 207); +background-color: rgb(186, 189, 182); + + + Connect + + + + + + 10 + 30 + 411 + 241 + + + + background-color: rgb(186, 189, 182); + + + + Num + + + + 50 + false + PreferDefault + + + + AlignCenter + + + + + SSID + + + AlignCenter + + + + + Secturity + + + AlignCenter + + + + + + + 440 + 170 + 80 + 23 + + + + background-color: rgb(186, 189, 182); + + + Close + + + + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + 540 + 20 + + + + + + + 0 + 0 + 540 + 20 + + + + + + + + diff --git a/src/autoapp/autoapp.cpp b/src/autoapp/autoapp.cpp index d8b21ec..4d38cbf 100644 --- a/src/autoapp/autoapp.cpp +++ b/src/autoapp/autoapp.cpp @@ -35,6 +35,7 @@ #include #include #include +#include #include namespace aasdk = f1x::aasdk; @@ -110,6 +111,11 @@ int main(int argc, char* argv[]) // center dialog usbDialog.move((width - 500)/2,(height-306)/2); + autoapp::ui::WifiDialog wifiDialog; + wifiDialog.setWindowFlags(Qt::WindowStaysOnTopHint); + // center dialog + wifiDialog.move((width - 540)/2,(height-340)/2); + aasdk::tcp::TCPWrapper tcpWrapper; autoapp::ui::ConnectDialog connectDialog(ioService, tcpWrapper, recentAddressesList); connectDialog.setWindowFlags(Qt::WindowStaysOnTopHint); @@ -122,6 +128,7 @@ int main(int argc, char* argv[]) QObject::connect(&mainWindow, &autoapp::ui::MainWindow::openSettings, &settingsWindow, &autoapp::ui::SettingsWindow::loadSystemValues); QObject::connect(&mainWindow, &autoapp::ui::MainWindow::openConnectDialog, &connectDialog, &autoapp::ui::ConnectDialog::exec); QObject::connect(&mainWindow, &autoapp::ui::MainWindow::openUSBDialog, &usbDialog, &autoapp::ui::USBDialog::exec); + QObject::connect(&mainWindow, &autoapp::ui::MainWindow::openWifiDialog, &wifiDialog, &autoapp::ui::WifiDialog::exec); qApplication.setOverrideCursor(Qt::BlankCursor); QObject::connect(&mainWindow, &autoapp::ui::MainWindow::toggleCursor, [&qApplication]() {