diff --git a/assets/back-hot.png b/assets/back-hot.png new file mode 100644 index 0000000..7b24127 Binary files /dev/null and b/assets/back-hot.png differ diff --git a/assets/bg_exit.png b/assets/bg_exit.png new file mode 100644 index 0000000..a3efc17 Binary files /dev/null and b/assets/bg_exit.png differ diff --git a/assets/bg_rearcam.png b/assets/bg_rearcam.png new file mode 100644 index 0000000..0c5adaa Binary files /dev/null and b/assets/bg_rearcam.png differ diff --git a/assets/kodi-hot.png b/assets/kodi-hot.png new file mode 100644 index 0000000..38755be Binary files /dev/null and b/assets/kodi-hot.png differ diff --git a/assets/rearcam-hot.png b/assets/rearcam-hot.png new file mode 100644 index 0000000..9ddee0b Binary files /dev/null and b/assets/rearcam-hot.png differ diff --git a/assets/reboot-hot.png b/assets/reboot-hot.png new file mode 100644 index 0000000..4b234b2 Binary files /dev/null and b/assets/reboot-hot.png differ diff --git a/assets/recordactive-hot.png b/assets/recordactive-hot.png new file mode 100644 index 0000000..5e655f5 Binary files /dev/null and b/assets/recordactive-hot.png differ diff --git a/assets/resources.qrc b/assets/resources.qrc index 48d1528..51ddfa5 100644 --- a/assets/resources.qrc +++ b/assets/resources.qrc @@ -23,5 +23,12 @@ record-hot.png stop-hot.png save-hot.png + reboot-hot.png + back-hot.png + bg_exit.png + kodi-hot.png + bg_rearcam.png + rearcam-hot.png + recordactive-hot.png diff --git a/include/f1x/openauto/autoapp/UI/MainWindow.hpp b/include/f1x/openauto/autoapp/UI/MainWindow.hpp index 97d5395..803ff9a 100644 --- a/include/f1x/openauto/autoapp/UI/MainWindow.hpp +++ b/include/f1x/openauto/autoapp/UI/MainWindow.hpp @@ -46,6 +46,7 @@ public: signals: void exit(); + void reboot(); void openSettings(); void toggleCursor(); void TriggerScriptDay(); @@ -57,6 +58,9 @@ signals: void cameraRecord(); void openConnectDialog(); void showBrightnessSlider(); + void startKodi(); + void showRearCam(); + void hideRearCam(); private slots: void on_horizontalSliderBrightness_valueChanged(int value); @@ -68,6 +72,9 @@ private slots: void showTime(); void cameraControlShow(); void cameraControlHide(); + void toggleExit(); + void showRearCamBG(); + void hideRearCamBG(); private: Ui::MainWindow* ui_; @@ -76,8 +83,14 @@ private: QFile *brightnessFile; char brightness_str[5]; + bool wifiButtonForce = false; + bool cameraButtonForce = false; + bool kodiButtonForce = false; + bool brightnessButtonForce = false; + bool nightModeEnabled = false; bool DayNightModeState = false; + bool devModeEnabled = false; bool wallpaperDayFileExists = false; @@ -86,7 +99,13 @@ private: bool wallpaperDevNightFileExists = false; bool masterButtonBGState = false; + bool exitMenuVisible = false; + + bool rearCamEnabled = false; bool dashcamBGState = false; + bool rearcamState = false; + + bool dashCamRecording = false; }; } diff --git a/src/autoapp/UI/MainWindow.cpp b/src/autoapp/UI/MainWindow.cpp index 002b7df..40ea110 100644 --- a/src/autoapp/UI/MainWindow.cpp +++ b/src/autoapp/UI/MainWindow.cpp @@ -23,6 +23,7 @@ #include "ui_mainwindow.h" #include #include +#include namespace f1x { @@ -43,8 +44,8 @@ MainWindow::MainWindow(configuration::IConfiguration::Pointer configuration, QWi QPushButton:focus { background: url(:/circle.png); } \ QPushButton:pressed { background: url(:/circle-pressed.png); } \ QSlider:horizontal { background: url(:/slider.png); border: 1px solid #ffffff; border-radius: 2px; min-height: 32px;} \ - QSlider::groove:horizontal { background: #6d6d6d; height: 32px;} \ - QSlider::handle:horizontal { background: white; height: 52px; width: 52px; margin: 0 0;} \ + QSlider::groove:horizontal { background: #6d6d6d; height: 32px;} \ + QSlider::handle:horizontal { background: white; height: 52px; width: 52px; margin: 0 0;} \ QLabel { color: #ffffff; font-weight: bold;} \ "); @@ -89,13 +90,26 @@ MainWindow::MainWindow(configuration::IConfiguration::Pointer configuration, QWi ui_->setupUi(this); connect(ui_->pushButtonSettings, &QPushButton::clicked, this, &MainWindow::openSettings); - connect(ui_->pushButtonExit, &QPushButton::clicked, this, &MainWindow::exit); + connect(ui_->pushButtonSettings, &QPushButton::clicked, this, &MainWindow::cameraHide); + connect(ui_->pushButtonSettings, &QPushButton::clicked, this, &MainWindow::cameraControlHide); + connect(ui_->pushButtonExit, &QPushButton::clicked, this, &MainWindow::toggleExit); + connect(ui_->pushButtonExit, &QPushButton::clicked, this, &MainWindow::cameraStop); + connect(ui_->pushButtonExit, &QPushButton::clicked, this, &MainWindow::cameraHide); + connect(ui_->pushButtonExit, &QPushButton::clicked, this, &MainWindow::cameraControlHide); + connect(ui_->pushButtonShutdown, &QPushButton::clicked, this, &MainWindow::exit); + connect(ui_->pushButtonReboot, &QPushButton::clicked, this, &MainWindow::reboot); + connect(ui_->pushButtonCancel, &QPushButton::clicked, this, &MainWindow::toggleExit); connect(ui_->pushButtonCameraShow, &QPushButton::clicked, this, &MainWindow::cameraShow); connect(ui_->pushButtonCameraShow, &QPushButton::clicked, this, &MainWindow::cameraControlShow); connect(ui_->pushButtonCameraHide, &QPushButton::clicked, this, &MainWindow::cameraHide); connect(ui_->pushButtonCameraHide, &QPushButton::clicked, this, &MainWindow::cameraControlHide); connect(ui_->pushButtonStop, &QPushButton::clicked, this, &MainWindow::cameraStop); connect(ui_->pushButtonRecord, &QPushButton::clicked, this, &MainWindow::cameraRecord); + connect(ui_->pushButtonRearcam, &QPushButton::clicked, this, &MainWindow::showRearCamBG); + connect(ui_->pushButtonRearcam, &QPushButton::clicked, this, &MainWindow::showRearCam); + connect(ui_->pushButtonRearcamBack, &QPushButton::clicked, this, &MainWindow::hideRearCamBG); + connect(ui_->pushButtonRearcamBack, &QPushButton::clicked, this, &MainWindow::hideRearCam); + connect(ui_->pushButtonRearcamBack, &QPushButton::clicked, this, &MainWindow::cameraControlHide); connect(ui_->pushButtonSave, &QPushButton::clicked, this, &MainWindow::cameraSave); connect(ui_->pushButtonToggleCursor, &QPushButton::clicked, this, &MainWindow::toggleCursor); connect(ui_->pushButtonDay, &QPushButton::clicked, this, &MainWindow::TriggerScriptDay); @@ -103,6 +117,7 @@ MainWindow::MainWindow(configuration::IConfiguration::Pointer configuration, QWi connect(ui_->pushButtonNight, &QPushButton::clicked, this, &MainWindow::TriggerScriptNight); connect(ui_->pushButtonNight, &QPushButton::clicked, this, &MainWindow::switchGuiToNight); connect(ui_->pushButtonWirelessConnection, &QPushButton::clicked, this, &MainWindow::openConnectDialog); + connect(ui_->pushButtonKodi, &QPushButton::clicked, this, &MainWindow::startKodi); connect(ui_->pushButtonBrightness, &QPushButton::clicked, this, &MainWindow::showBrightnessSlider); QTimer *timer=new QTimer(this); @@ -113,13 +128,16 @@ MainWindow::MainWindow(configuration::IConfiguration::Pointer configuration, QWi bool cursorButtonForce = cursorButtonFile.exists(); QFileInfo wifiButtonFile("/etc/button_wifi_visible"); - bool wifiButtonForce = wifiButtonFile.exists(); + this->wifiButtonForce = wifiButtonFile.exists(); QFileInfo cameraButtonFile("/etc/button_camera_visible"); - bool cameraButtonForce = cameraButtonFile.exists(); + this->cameraButtonForce = cameraButtonFile.exists(); QFileInfo brightnessButtonFile("/etc/button_brightness_visible"); - bool brightnessButtonForce = brightnessButtonFile.exists(); + this->brightnessButtonForce = brightnessButtonFile.exists(); + + QFileInfo kodiInstalledFile("/usr/bin/kodi"); + this->kodiButtonForce = kodiInstalledFile.exists(); if (configuration->hasTouchScreen() && !cursorButtonForce) { ui_->pushButtonToggleCursor->hide(); @@ -130,9 +148,13 @@ MainWindow::MainWindow(configuration::IConfiguration::Pointer configuration, QWi ui_->masterButtonBG->setPixmap(image); ui_->pushButtonStop->hide(); ui_->pushButtonRecord->hide(); + ui_->pushButtonRecordActive->hide(); ui_->pushButtonSave->hide(); + ui_->pushButtonRearcam->hide(); + ui_->pushButtonRearcamBack->hide(); + ui_->rearcamBG->hide(); - if (!cameraButtonForce) { + if (!this->cameraButtonForce) { ui_->pushButtonCameraShow->hide(); ui_->pushButtonCameraHide->hide(); } else { @@ -140,22 +162,30 @@ MainWindow::MainWindow(configuration::IConfiguration::Pointer configuration, QWi ui_->pushButtonCameraHide->hide(); } - if (!wifiButtonForce) { + if (!this->wifiButtonForce) { ui_->pushButtonWirelessConnection->hide(); } QFileInfo brightnessFile(brightnessFilename); - if (!brightnessFile.exists() && !brightnessButtonForce) { + if (!brightnessFile.exists() && !this->brightnessButtonForce) { ui_->pushButtonBrightness->hide(); } + if (!this->kodiButtonForce) { + ui_->pushButtonKodi->hide(); + } + ui_->horizontalSliderBrightness->hide(); if (!configuration->showClock()) { ui_->Digital_clock->hide(); } + ui_->pushButtonShutdown->hide(); + ui_->pushButtonReboot->hide(); + ui_->pushButtonCancel->hide(); + // init bg's on startup if (!this->nightModeEnabled) { if (this->devModeEnabled) { @@ -202,7 +232,8 @@ void f1x::openauto::autoapp::ui::MainWindow::on_pushButtonBrightness_clicked() { this->brightnessSliderVisible = !this->brightnessSliderVisible; if (this->brightnessSliderVisible) { - f1x::openauto::autoapp::ui::MainWindow::cameraControlHide(); + f1x::openauto::autoapp::ui::MainWindow::cameraControlHide(); + f1x::openauto::autoapp::ui::MainWindow::cameraHide(); // Get the current brightness value this->brightnessFile = new QFile(this->brightnessFilename); if (this->brightnessFile->open(QIODevice::ReadOnly)) { @@ -281,27 +312,69 @@ void f1x::openauto::autoapp::ui::MainWindow::switchGuiToDay() void f1x::openauto::autoapp::ui::MainWindow::cameraControlHide() { - ui_->pushButtonCameraHide->hide(); - ui_->pushButtonStop->hide(); - ui_->pushButtonRecord->hide(); - ui_->pushButtonSave->hide(); - ui_->dashcamBG->hide(); - this->dashcamBGState = false; - ui_->pushButtonCameraShow->show(); + if (this->cameraButtonForce) { + ui_->pushButtonCameraHide->hide(); + ui_->pushButtonStop->hide(); + ui_->pushButtonRecord->hide(); + ui_->pushButtonRecordActive->hide(); + ui_->pushButtonRearcam->hide(); + ui_->pushButtonSave->hide(); + ui_->dashcamBG->hide(); + this->dashcamBGState = false; + ui_->pushButtonCameraShow->show(); + } } void f1x::openauto::autoapp::ui::MainWindow::cameraControlShow() { - ui_->pushButtonCameraShow->hide(); - QPixmap image; - image.load(":/bg_dashcam.png"); - ui_->dashcamBG->setPixmap(image); - ui_->dashcamBG->show(); - ui_->pushButtonStop->show(); - ui_->pushButtonRecord->show(); - ui_->pushButtonSave->show(); - this->dashcamBGState = true; - ui_->pushButtonCameraHide->show(); + if (this->cameraButtonForce) { + ui_->pushButtonCameraShow->hide(); + QPixmap image; + image.load(":/bg_dashcam.png"); + ui_->dashcamBG->setPixmap(image); + ui_->dashcamBG->show(); + ui_->pushButtonStop->show(); + ui_->pushButtonRecord->show(); + ui_->pushButtonRearcam->show(); + ui_->pushButtonSave->show(); + this->dashcamBGState = true; + ui_->pushButtonCameraHide->show(); + } +} + +void f1x::openauto::autoapp::ui::MainWindow::toggleExit() +{ + if (!this->exitMenuVisible) { + f1x::openauto::autoapp::ui::MainWindow::cameraControlHide(); + if (this->brightnessSliderVisible) { + ui_->horizontalSliderBrightness->hide(); + this->brightnessSliderVisible = false; + } + ui_->pushButtonShutdown->show(); + ui_->pushButtonReboot->show(); + ui_->pushButtonCancel->show(); + QPixmap image; + image.load(":/bg_exit.png"); + ui_->exitBG->setPixmap(image); + ui_->exitBG->show(); + this->exitMenuVisible = true; + } else { + ui_->pushButtonShutdown->hide(); + ui_->pushButtonReboot->hide(); + ui_->pushButtonCancel->hide(); + ui_->exitBG->hide(); + this->exitMenuVisible = false; + } +} + +void f1x::openauto::autoapp::ui::MainWindow::showRearCamBG() +{ + ui_->pushButtonRearcamBack->show(); +} + +void f1x::openauto::autoapp::ui::MainWindow::hideRearCamBG() +{ + ui_->pushButtonRearcamBack->hide(); } void f1x::openauto::autoapp::ui::MainWindow::showTime() @@ -311,27 +384,61 @@ void f1x::openauto::autoapp::ui::MainWindow::showTime() ui_->Digital_clock->setText(time_text); /**if (configuration_->showClock()) { - if (ui_->Digital_clock->isVisible() == true) { - ui_->Digital_clock->hide(); - } + if (ui_->Digital_clock->isVisible() == true) { + ui_->Digital_clock->hide(); + } } else { - if (ui_->Digital_clock->isVisible() == false) { - ui_->Digital_clock->show(); - } + if (ui_->Digital_clock->isVisible() == false) { + ui_->Digital_clock->show(); + } }**/ QFileInfo nightModeFile("/tmp/night_mode_enabled"); this->nightModeEnabled = nightModeFile.exists(); + QFileInfo rearCamFile("/tmp/rearcam_enabled"); + this->rearCamEnabled = rearCamFile.exists(); + + QFileInfo dashCamRecordingFile("/tmp/dashcam_is_recording"); + this->dashCamRecording = dashCamRecordingFile.exists(); + + if (this->dashcamBGState) { + if (this->dashCamRecording) { + if (ui_->pushButtonRecord->isVisible() == true) { + ui_->pushButtonRecordActive->show(); + ui_->pushButtonRecord->hide(); + } + } else { + if (ui_->pushButtonRecordActive->isVisible() == true) { + ui_->pushButtonRecord->show(); + ui_->pushButtonRecordActive->hide(); + } + } + } + if (this->nightModeEnabled) { - if (!this->DayNightModeState) { - this->DayNightModeState = true; - f1x::openauto::autoapp::ui::MainWindow::switchGuiToNight(); - } + if (!this->DayNightModeState) { + this->DayNightModeState = true; + f1x::openauto::autoapp::ui::MainWindow::switchGuiToNight(); + } } else { - if (this->DayNightModeState) { - this->DayNightModeState = false; - f1x::openauto::autoapp::ui::MainWindow::switchGuiToDay(); - } + if (this->DayNightModeState) { + this->DayNightModeState = false; + f1x::openauto::autoapp::ui::MainWindow::switchGuiToDay(); + } + } + if (this->rearCamEnabled) { + if (!this->rearcamState) { + f1x::openauto::autoapp::ui::MainWindow::cameraControlHide(); + f1x::openauto::autoapp::ui::MainWindow::showRearCamBG(); + f1x::openauto::autoapp::ui::MainWindow::showRearCam(); + this->rearcamState = true; + } + } else { + if (this->rearcamState) { + f1x::openauto::autoapp::ui::MainWindow::hideRearCamBG(); + f1x::openauto::autoapp::ui::MainWindow::hideRearCam(); + this->rearcamState = false; + } } } diff --git a/src/autoapp/UI/mainwindow.ui b/src/autoapp/UI/mainwindow.ui index 534a304..65ba008 100644 --- a/src/autoapp/UI/mainwindow.ui +++ b/src/autoapp/UI/mainwindow.ui @@ -80,6 +80,29 @@ true + + + + 30 + 104 + 64 + 64 + + + + + :/kodi-hot.png:/kodi-hot.png + + + + 64 + 64 + + + + true + + @@ -340,6 +363,52 @@ true + + + + 216 + 384 + 64 + 64 + + + + + :/recordactive-hot.png:/recordactive-hot.png + + + + 64 + 64 + + + + true + + + + + + 286 + 384 + 64 + 64 + + + + + :/rearcam-hot.png:/rearcam-hot.png + + + + 64 + 64 + + + + true + + @@ -363,6 +432,118 @@ true + + + + 284 + 198 + 232 + 84 + + + + + + + 294 + 208 + 64 + 64 + + + + + :/power-hot.png:/power-hot.png + + + + 64 + 64 + + + + true + + + + + + 368 + 208 + 64 + 64 + + + + + :/reboot-hot.png:/reboot-hot.png + + + + 64 + 64 + + + + true + + + + + + 442 + 208 + 64 + 64 + + + + + :/back-hot.png:/back-hot.png + + + + 64 + 64 + + + + true + + + + + + 0 + 0 + 800 + 480 + + + + + + + 0 + 0 + 800 + 480 + + + + + :/bg_rearcam.png:/bg_rearcam.png + + + + 800 + 480 + + + + true + + diff --git a/src/autoapp/autoapp.cpp b/src/autoapp/autoapp.cpp index 0c4b5e7..3c59ed3 100644 --- a/src/autoapp/autoapp.cpp +++ b/src/autoapp/autoapp.cpp @@ -110,6 +110,10 @@ int main(int argc, char* argv[]) qApplication.setOverrideCursor(cursor); }); + QObject::connect(&mainWindow, &autoapp::ui::MainWindow::reboot, [&qApplication]() { + system("sudo shutdown -r now"); + }); + QObject::connect(&mainWindow, &autoapp::ui::MainWindow::cameraHide, [&qApplication]() { #ifdef RASPBERRYPI3 system("/opt/crankshaft/cameracontrol.py Background &"); @@ -128,6 +132,25 @@ int main(int argc, char* argv[]) #endif }); + QObject::connect(&mainWindow, &autoapp::ui::MainWindow::hideRearCam, [&qApplication]() { +#ifdef RASPBERRYPI3 + system("/opt/crankshaft/cameracontrol.py DashcamMode &"); + system("sudo rm /tmp/rearcam_enabled &"); + OPENAUTO_LOG(info) << "[CS] Ran RPiCameraControl script."; +#else + OPENAUTO_LOG(info) << "[CS] You are not running this on a Raspberry Pi, skipping Cam script."; +#endif + }); + + QObject::connect(&mainWindow, &autoapp::ui::MainWindow::showRearCam, [&qApplication]() { +#ifdef RASPBERRYPI3 + system("/opt/crankshaft/cameracontrol.py Rearcam &"); + OPENAUTO_LOG(info) << "[CS] Ran RPiCameraControl script."; +#else + OPENAUTO_LOG(info) << "[CS] You are not running this on a Raspberry Pi, skipping Cam script."; +#endif + }); + QObject::connect(&mainWindow, &autoapp::ui::MainWindow::cameraRecord, [&qApplication]() { #ifdef RASPBERRYPI3 system("/opt/crankshaft/cameracontrol.py Record &"); @@ -173,6 +196,15 @@ int main(int argc, char* argv[]) #endif }); + QObject::connect(&mainWindow, &autoapp::ui::MainWindow::startKodi, [&qApplication]() { +#ifdef RASPBERRYPI3 + system("/usr/bin/kodi &"); + OPENAUTO_LOG(info) << "[CS] Run kodi binary."; +#else + OPENAUTO_LOG(info) << "[CS] You are not running this on a Raspberry Pi, skipping kodi."; +#endif + }); + mainWindow.showFullScreen(); aasdk::usb::USBWrapper usbWrapper(usbContext);