From 9ade31e72f2a21358399687856c83d4b5420c3dc Mon Sep 17 00:00:00 2001 From: "yorick.geoffre" Date: Mon, 31 Oct 2022 18:57:23 +0100 Subject: [PATCH] more pipeline workn begun cmake work --- src/.vscode/settings.json | 70 ++++++++++++ src/hardware/hw/serial.cpp | 91 ---------------- src/hardware/hw/serial.hpp | 22 ---- src/model/controllers/ui/uiController.cpp | 49 +++++++++ src/model/controllers/ui/uiController.hpp | 49 +++++++++ .../controllers/windows/windowManager.cpp | 0 .../controllers/windows/windowsManager.hpp | 14 +++ .../CMakeDirectoryInformation.cmake | 0 .../CMakeFiles/cameras.dir/DependInfo.cmake | 0 .../cameras/CMakeFiles/cameras.dir/build.make | 0 .../CMakeFiles/cameras.dir/cmake_clean.cmake | 0 .../cameras.dir/cmake_clean_target.cmake | 0 .../cameras.dir/compiler_depend.internal | 0 .../cameras.dir/compiler_depend.make | 0 .../CMakeFiles/cameras.dir/compiler_depend.ts | 0 .../CMakeFiles/cameras.dir/depend.make | 0 .../cameras/CMakeFiles/cameras.dir/flags.make | 0 .../cameras/CMakeFiles/cameras.dir/link.txt | 0 .../CMakeFiles/cameras.dir/progress.make | 0 .../cameras/CMakeFiles/progress.marks | 0 .../hardware/cameras/CMakeLists.txt | 0 src/{ => model}/hardware/cameras/Makefile | 0 src/{ => model}/hardware/cameras/_cam.hpp | 18 ++-- src/{ => model}/hardware/cameras/camEnum.cpp | 0 .../hardware/cameras/cameraManager.cpp | 7 +- .../CMakeDirectoryInformation.cmake | 0 .../hw/CMakeFiles/hw.dir/DependInfo.cmake | 0 .../hardware/hw/CMakeFiles/hw.dir/build.make | 0 .../hw/CMakeFiles/hw.dir/cmake_clean.cmake | 0 .../hw.dir/cmake_clean_target.cmake | 0 .../hw.dir/compiler_depend.internal | 0 .../hw/CMakeFiles/hw.dir/compiler_depend.make | 0 .../hw/CMakeFiles/hw.dir/compiler_depend.ts | 0 .../hardware/hw/CMakeFiles/hw.dir/depend.make | 0 .../hardware/hw/CMakeFiles/hw.dir/flags.make | 0 .../hardware/hw/CMakeFiles/hw.dir/link.txt | 0 .../hw/CMakeFiles/hw.dir/progress.make | 0 .../hardware/hw/CMakeFiles/progress.marks | 0 src/{ => model}/hardware/hw/CMakeLists.txt | 0 src/{ => model}/hardware/hw/Makefile | 0 src/model/hardware/hw/serial.cpp | 102 ++++++++++++++++++ src/model/hardware/hw/serial.hpp | 27 +++++ .../CMakeDirectoryInformation.cmake | 0 .../CMakeFiles/ihidapi.dir/DependInfo.cmake | 0 .../ihidapi/CMakeFiles/ihidapi.dir/build.make | 0 .../CMakeFiles/ihidapi.dir/cmake_clean.cmake | 0 .../ihidapi.dir/cmake_clean_target.cmake | 0 .../ihidapi.dir/compiler_depend.internal | 0 .../ihidapi.dir/compiler_depend.make | 0 .../CMakeFiles/ihidapi.dir/compiler_depend.ts | 0 .../CMakeFiles/ihidapi.dir/depend.make | 0 .../ihidapi/CMakeFiles/ihidapi.dir/flags.make | 0 .../ihidapi/CMakeFiles/ihidapi.dir/link.txt | 0 .../CMakeFiles/ihidapi.dir/progress.make | 0 .../ihidapi/CMakeFiles/progress.marks | 0 .../hardware/ihidapi/CMakeLists.txt | 0 src/{ => model}/hardware/ihidapi/Makefile | 0 src/{ => model}/hardware/ihidapi/_hidapi.hpp | 0 .../hardware/ihidapi/hidapi_functions.cpp | 0 .../CMakeDirectoryInformation.cmake | 0 .../hardware/psvr/CMakeFiles/progress.marks | 0 .../psvr/CMakeFiles/psvr.dir/DependInfo.cmake | 0 .../psvr/CMakeFiles/psvr.dir/build.make | 0 .../CMakeFiles/psvr.dir/cmake_clean.cmake | 0 .../psvr.dir/cmake_clean_target.cmake | 0 .../psvr.dir/compiler_depend.internal | 0 .../CMakeFiles/psvr.dir/compiler_depend.make | 0 .../CMakeFiles/psvr.dir/compiler_depend.ts | 0 .../psvr/CMakeFiles/psvr.dir/depend.make | 0 .../psvr/CMakeFiles/psvr.dir/flags.make | 0 .../psvr/CMakeFiles/psvr.dir/link.txt | 0 .../psvr/CMakeFiles/psvr.dir/progress.make | 0 src/{ => model}/hardware/psvr/CMakeLists.txt | 0 src/{ => model}/hardware/psvr/Makefile | 0 src/{ => model}/hardware/psvr/_psvr.hpp | 20 ++-- src/{ => model}/hardware/psvr/psvr.cpp | 8 +- src/model/patterns/observer/observable.cpp | 21 ++++ src/model/patterns/observer/observable.hpp | 14 +++ src/model/patterns/observer/observer.hpp | 6 ++ .../CMakeDirectoryInformation.cmake | 0 .../perfcheckers.dir/DependInfo.cmake | 0 .../CMakeFiles/perfcheckers.dir/build.make | 0 .../perfcheckers.dir/cmake_clean.cmake | 0 .../perfcheckers.dir/cmake_clean_target.cmake | 0 .../perfcheckers.dir/compiler_depend.internal | 0 .../perfcheckers.dir/compiler_depend.make | 0 .../perfcheckers.dir/compiler_depend.ts | 0 .../CMakeFiles/perfcheckers.dir/depend.make | 0 .../CMakeFiles/perfcheckers.dir/flags.make | 0 .../CMakeFiles/perfcheckers.dir/link.txt | 0 .../CMakeFiles/perfcheckers.dir/progress.make | 0 .../perfcheckers/CMakeFiles/progress.marks | 0 src/{ => model}/perfcheckers/CMakeLists.txt | 0 src/{ => model}/perfcheckers/Makefile | 0 .../perfcheckers/fcheckManager.cpp | 0 src/{ => model}/perfcheckers/framerate.cpp | 0 src/{ => model}/perfcheckers/framerate.hpp | 0 src/model/windows/window.cpp | 24 +++++ src/model/windows/window.hpp | 17 +++ src/model/windows/windowManager.cpp | 32 ++++++ src/model/windows/windowManager.hpp | 18 ++++ src/pipeline/CMakeLists.txt | 34 ++++++ src/pipeline/abstract/pipeline.hpp | 15 --- src/pipeline/abstract/pipelineNode.cpp | 44 ++++++++ src/pipeline/abstract/pipelineNode.hpp | 26 +++++ src/pipeline/members/cameraPickerNode.cpp | 14 +++ src/pipeline/members/cameraPickerNode.hpp | 11 ++ src/pipeline/members/displayOutputNode.cpp | 26 +++++ src/pipeline/members/displayOutputNode.hpp | 14 +++ src/pipeline/members/uiDrawerNode.cpp | 47 ++++++++ src/pipeline/members/uiDrawerNode.hpp | 10 ++ src/pipeline/members/uiMergerNode.cpp | 29 +++++ src/pipeline/members/uiMergerNode.hpp | 12 +++ src/pipeline/pipeline.cpp | 13 +++ src/pipeline/pipeline.hpp | 12 +++ src/threadweaver/debugging.hpp | 2 +- src/threadweaver/threadweaver.cpp | 5 + src/threadweaver/threadweaver.hpp | 1 + src/ui/CMakeLists.txt | 20 ++-- src/ui/_ui.hpp | 98 ----------------- src/ui/controllers/uiController.cpp | 52 --------- src/ui/controllers/uiManager.cpp | 88 --------------- src/ui/drawer/uiDrawer.cpp | 89 --------------- src/ui/merger/uiMerger.cpp | 65 ----------- src/ui/support/UiSupport.cpp | 32 +++--- src/ui/support/UiSupport.hpp | 14 +++ src/ui/uiElements/ui.cpp | 30 ------ src/ui/uiElements/uiElements.cpp | 1 - src/ui/uiElements/uiElements.hpp | 12 --- 129 files changed, 800 insertions(+), 625 deletions(-) delete mode 100644 src/hardware/hw/serial.cpp delete mode 100644 src/hardware/hw/serial.hpp create mode 100644 src/model/controllers/ui/uiController.cpp create mode 100644 src/model/controllers/ui/uiController.hpp create mode 100644 src/model/controllers/windows/windowManager.cpp create mode 100644 src/model/controllers/windows/windowsManager.hpp rename src/{ => model}/hardware/cameras/CMakeFiles/CMakeDirectoryInformation.cmake (100%) rename src/{ => model}/hardware/cameras/CMakeFiles/cameras.dir/DependInfo.cmake (100%) rename src/{ => model}/hardware/cameras/CMakeFiles/cameras.dir/build.make (100%) rename src/{ => model}/hardware/cameras/CMakeFiles/cameras.dir/cmake_clean.cmake (100%) rename src/{ => model}/hardware/cameras/CMakeFiles/cameras.dir/cmake_clean_target.cmake (100%) rename src/{ => model}/hardware/cameras/CMakeFiles/cameras.dir/compiler_depend.internal (100%) rename src/{ => model}/hardware/cameras/CMakeFiles/cameras.dir/compiler_depend.make (100%) rename src/{ => model}/hardware/cameras/CMakeFiles/cameras.dir/compiler_depend.ts (100%) rename src/{ => model}/hardware/cameras/CMakeFiles/cameras.dir/depend.make (100%) rename src/{ => model}/hardware/cameras/CMakeFiles/cameras.dir/flags.make (100%) rename src/{ => model}/hardware/cameras/CMakeFiles/cameras.dir/link.txt (100%) rename src/{ => model}/hardware/cameras/CMakeFiles/cameras.dir/progress.make (100%) rename src/{ => model}/hardware/cameras/CMakeFiles/progress.marks (100%) rename src/{ => model}/hardware/cameras/CMakeLists.txt (100%) rename src/{ => model}/hardware/cameras/Makefile (100%) rename src/{ => model}/hardware/cameras/_cam.hpp (60%) rename src/{ => model}/hardware/cameras/camEnum.cpp (100%) rename src/{ => model}/hardware/cameras/cameraManager.cpp (93%) rename src/{ => model}/hardware/hw/CMakeFiles/CMakeDirectoryInformation.cmake (100%) rename src/{ => model}/hardware/hw/CMakeFiles/hw.dir/DependInfo.cmake (100%) rename src/{ => model}/hardware/hw/CMakeFiles/hw.dir/build.make (100%) rename src/{ => model}/hardware/hw/CMakeFiles/hw.dir/cmake_clean.cmake (100%) rename src/{ => model}/hardware/hw/CMakeFiles/hw.dir/cmake_clean_target.cmake (100%) rename src/{ => model}/hardware/hw/CMakeFiles/hw.dir/compiler_depend.internal (100%) rename src/{ => model}/hardware/hw/CMakeFiles/hw.dir/compiler_depend.make (100%) rename src/{ => model}/hardware/hw/CMakeFiles/hw.dir/compiler_depend.ts (100%) rename src/{ => model}/hardware/hw/CMakeFiles/hw.dir/depend.make (100%) rename src/{ => model}/hardware/hw/CMakeFiles/hw.dir/flags.make (100%) rename src/{ => model}/hardware/hw/CMakeFiles/hw.dir/link.txt (100%) rename src/{ => model}/hardware/hw/CMakeFiles/hw.dir/progress.make (100%) rename src/{ => model}/hardware/hw/CMakeFiles/progress.marks (100%) rename src/{ => model}/hardware/hw/CMakeLists.txt (100%) rename src/{ => model}/hardware/hw/Makefile (100%) create mode 100644 src/model/hardware/hw/serial.cpp create mode 100644 src/model/hardware/hw/serial.hpp rename src/{ => model}/hardware/ihidapi/CMakeFiles/CMakeDirectoryInformation.cmake (100%) rename src/{ => model}/hardware/ihidapi/CMakeFiles/ihidapi.dir/DependInfo.cmake (100%) rename src/{ => model}/hardware/ihidapi/CMakeFiles/ihidapi.dir/build.make (100%) rename src/{ => model}/hardware/ihidapi/CMakeFiles/ihidapi.dir/cmake_clean.cmake (100%) rename src/{ => model}/hardware/ihidapi/CMakeFiles/ihidapi.dir/cmake_clean_target.cmake (100%) rename src/{ => model}/hardware/ihidapi/CMakeFiles/ihidapi.dir/compiler_depend.internal (100%) rename src/{ => model}/hardware/ihidapi/CMakeFiles/ihidapi.dir/compiler_depend.make (100%) rename src/{ => model}/hardware/ihidapi/CMakeFiles/ihidapi.dir/compiler_depend.ts (100%) rename src/{ => model}/hardware/ihidapi/CMakeFiles/ihidapi.dir/depend.make (100%) rename src/{ => model}/hardware/ihidapi/CMakeFiles/ihidapi.dir/flags.make (100%) rename src/{ => model}/hardware/ihidapi/CMakeFiles/ihidapi.dir/link.txt (100%) rename src/{ => model}/hardware/ihidapi/CMakeFiles/ihidapi.dir/progress.make (100%) rename src/{ => model}/hardware/ihidapi/CMakeFiles/progress.marks (100%) rename src/{ => model}/hardware/ihidapi/CMakeLists.txt (100%) rename src/{ => model}/hardware/ihidapi/Makefile (100%) rename src/{ => model}/hardware/ihidapi/_hidapi.hpp (100%) rename src/{ => model}/hardware/ihidapi/hidapi_functions.cpp (100%) rename src/{ => model}/hardware/psvr/CMakeFiles/CMakeDirectoryInformation.cmake (100%) rename src/{ => model}/hardware/psvr/CMakeFiles/progress.marks (100%) rename src/{ => model}/hardware/psvr/CMakeFiles/psvr.dir/DependInfo.cmake (100%) rename src/{ => model}/hardware/psvr/CMakeFiles/psvr.dir/build.make (100%) rename src/{ => model}/hardware/psvr/CMakeFiles/psvr.dir/cmake_clean.cmake (100%) rename src/{ => model}/hardware/psvr/CMakeFiles/psvr.dir/cmake_clean_target.cmake (100%) rename src/{ => model}/hardware/psvr/CMakeFiles/psvr.dir/compiler_depend.internal (100%) rename src/{ => model}/hardware/psvr/CMakeFiles/psvr.dir/compiler_depend.make (100%) rename src/{ => model}/hardware/psvr/CMakeFiles/psvr.dir/compiler_depend.ts (100%) rename src/{ => model}/hardware/psvr/CMakeFiles/psvr.dir/depend.make (100%) rename src/{ => model}/hardware/psvr/CMakeFiles/psvr.dir/flags.make (100%) rename src/{ => model}/hardware/psvr/CMakeFiles/psvr.dir/link.txt (100%) rename src/{ => model}/hardware/psvr/CMakeFiles/psvr.dir/progress.make (100%) rename src/{ => model}/hardware/psvr/CMakeLists.txt (100%) rename src/{ => model}/hardware/psvr/Makefile (100%) rename src/{ => model}/hardware/psvr/_psvr.hpp (61%) rename src/{ => model}/hardware/psvr/psvr.cpp (92%) create mode 100644 src/model/patterns/observer/observable.cpp create mode 100644 src/model/patterns/observer/observable.hpp create mode 100644 src/model/patterns/observer/observer.hpp rename src/{ => model}/perfcheckers/CMakeFiles/CMakeDirectoryInformation.cmake (100%) rename src/{ => model}/perfcheckers/CMakeFiles/perfcheckers.dir/DependInfo.cmake (100%) rename src/{ => model}/perfcheckers/CMakeFiles/perfcheckers.dir/build.make (100%) rename src/{ => model}/perfcheckers/CMakeFiles/perfcheckers.dir/cmake_clean.cmake (100%) rename src/{ => model}/perfcheckers/CMakeFiles/perfcheckers.dir/cmake_clean_target.cmake (100%) rename src/{ => model}/perfcheckers/CMakeFiles/perfcheckers.dir/compiler_depend.internal (100%) rename src/{ => model}/perfcheckers/CMakeFiles/perfcheckers.dir/compiler_depend.make (100%) rename src/{ => model}/perfcheckers/CMakeFiles/perfcheckers.dir/compiler_depend.ts (100%) rename src/{ => model}/perfcheckers/CMakeFiles/perfcheckers.dir/depend.make (100%) rename src/{ => model}/perfcheckers/CMakeFiles/perfcheckers.dir/flags.make (100%) rename src/{ => model}/perfcheckers/CMakeFiles/perfcheckers.dir/link.txt (100%) rename src/{ => model}/perfcheckers/CMakeFiles/perfcheckers.dir/progress.make (100%) rename src/{ => model}/perfcheckers/CMakeFiles/progress.marks (100%) rename src/{ => model}/perfcheckers/CMakeLists.txt (100%) rename src/{ => model}/perfcheckers/Makefile (100%) rename src/{ => model}/perfcheckers/fcheckManager.cpp (100%) rename src/{ => model}/perfcheckers/framerate.cpp (100%) rename src/{ => model}/perfcheckers/framerate.hpp (100%) create mode 100644 src/model/windows/window.cpp create mode 100644 src/model/windows/window.hpp create mode 100644 src/model/windows/windowManager.cpp create mode 100644 src/model/windows/windowManager.hpp create mode 100644 src/pipeline/CMakeLists.txt delete mode 100644 src/pipeline/abstract/pipeline.hpp create mode 100644 src/pipeline/abstract/pipelineNode.cpp create mode 100644 src/pipeline/abstract/pipelineNode.hpp create mode 100644 src/pipeline/members/cameraPickerNode.cpp create mode 100644 src/pipeline/members/cameraPickerNode.hpp create mode 100644 src/pipeline/members/displayOutputNode.cpp create mode 100644 src/pipeline/members/displayOutputNode.hpp create mode 100644 src/pipeline/members/uiDrawerNode.cpp create mode 100644 src/pipeline/members/uiDrawerNode.hpp create mode 100644 src/pipeline/members/uiMergerNode.cpp create mode 100644 src/pipeline/members/uiMergerNode.hpp create mode 100644 src/pipeline/pipeline.cpp create mode 100644 src/pipeline/pipeline.hpp delete mode 100644 src/ui/_ui.hpp delete mode 100644 src/ui/controllers/uiController.cpp delete mode 100644 src/ui/controllers/uiManager.cpp delete mode 100644 src/ui/drawer/uiDrawer.cpp delete mode 100644 src/ui/merger/uiMerger.cpp create mode 100644 src/ui/support/UiSupport.hpp delete mode 100644 src/ui/uiElements/ui.cpp delete mode 100644 src/ui/uiElements/uiElements.cpp delete mode 100644 src/ui/uiElements/uiElements.hpp diff --git a/src/.vscode/settings.json b/src/.vscode/settings.json index 482ca88..b4e2274 100644 --- a/src/.vscode/settings.json +++ b/src/.vscode/settings.json @@ -2,5 +2,75 @@ "files.exclude": { "**/.vscode/": true, "**/media/": true + }, + "files.associations": { + "array": "cpp", + "atomic": "cpp", + "bit": "cpp", + "*.tcc": "cpp", + "bitset": "cpp", + "cctype": "cpp", + "chrono": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "codecvt": "cpp", + "compare": "cpp", + "complex": "cpp", + "concepts": "cpp", + "condition_variable": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "list": "cpp", + "map": "cpp", + "set": "cpp", + "string": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "functional": "cpp", + "iterator": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "random": "cpp", + "ratio": "cpp", + "regex": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "fstream": "cpp", + "future": "cpp", + "initializer_list": "cpp", + "iomanip": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "mutex": "cpp", + "new": "cpp", + "numbers": "cpp", + "ostream": "cpp", + "semaphore": "cpp", + "shared_mutex": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "stop_token": "cpp", + "streambuf": "cpp", + "thread": "cpp", + "cfenv": "cpp", + "cinttypes": "cpp", + "typeindex": "cpp", + "typeinfo": "cpp" } } \ No newline at end of file diff --git a/src/hardware/hw/serial.cpp b/src/hardware/hw/serial.cpp deleted file mode 100644 index 51c7a06..0000000 --- a/src/hardware/hw/serial.cpp +++ /dev/null @@ -1,91 +0,0 @@ -#include "./serial.hpp" - -bool SerialPortManager::shouldRun; -int SerialPortManager::serialPort; - -void SerialPortManager::init(){ - struct termios tty; - - cout << "opening serial port /dev/ttyUSB0" << endl; - serialPort = open("/dev/ttyUSB0", O_RDWR); //open serial port - cout << "done" << endl; - - if (serialPort < 0){ - printf("Error %i from open: %s\n", errno, strerror(errno)); - return; - } - - if(tcgetattr(serialPort, &tty) != 0){ //read serial port configuration - printf("Error %i from tcgetattr: %s\n", errno, strerror(errno)); - return; - } - - //local flags - tty.c_lflag &= ~ICANON; //enable canonical mode - tty.c_lflag &= ~ECHO; // Disable echo - tty.c_lflag &= ~ECHOE; // Disable erasure - tty.c_lflag &= ~ECHONL; // Disable new-line echo - tty.c_lflag &= ~ISIG; // Disable interpretation of INTR, QUIT and SUSP - //input modes - tty.c_iflag &= ~(IXON | IXOFF | IXANY); // Turn off s/w flow ctrl - tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL); // Disable any special handling of received bytes - //output modes - tty.c_oflag &= ~OPOST; // Prevent special interpretation of output bytes (e.g. newline chars) - tty.c_oflag &= ~ONLCR; // Prevent conversion of newline to carriage return/line feed - //c_cc - tty.c_cc[VTIME] = 1; // Wait for up to 1s (10 deciseconds), returning as soon as any data is received. - tty.c_cc[VMIN] = 0; - //baudrate - cfsetispeed(&tty, B9600); //set baudrate (input) - cfsetospeed(&tty, B9600); // (output) - - // Save tty settings, also checking for error - if (tcsetattr(serialPort, TCSANOW, &tty) != 0) { - printf("Error %i from tcsetattr: %s\n", errno, strerror(errno)); - return; - } - shouldRun = false; - cout << "starting hardware watcher thread" << endl; - std::thread* t = new std::thread(SerialPortManager::runPort); - cout << "done" << endl; - Threadweaver::stick_this_thread_to_core(t,CAMCORE); - Threadweaver::hardwareWatcherThread = t; - shouldRun = true; -} - -void SerialPortManager::runPort(){ - while(!shouldRun){} - char read_buf [256]; - int n = 0; - while(shouldRun){ - n = read(serialPort, &read_buf, sizeof(read_buf)); - if(n > 0){ - char c = read_buf[0]; - switch(c){ - case 'U': - cout << c << "++" << endl; - ui::UiController::selectedUp(); - break; - case 'D': - cout << c << "--" << endl; - ui::UiController::selectedDown(); - break; - case '1': - ui::UiController::click(); - break; - case '2': - ui::UiController::click(); - break; - case '3': - ui::UiController::click(); - break; - case '4': - ui::UiController::click(); - break; - default: - break; - } - } - std::fill_n(read_buf, n, 0); - } -} \ No newline at end of file diff --git a/src/hardware/hw/serial.hpp b/src/hardware/hw/serial.hpp deleted file mode 100644 index c5c5306..0000000 --- a/src/hardware/hw/serial.hpp +++ /dev/null @@ -1,22 +0,0 @@ -// C library headers -#include -#include - -// Linux headers -#include // Contains file controls like O_RDWR -#include // Error integer and strerror() function -#include // Contains POSIX terminal control definitions -#include // write(), read(), close() - -#include -#include - -#include "../../ui/_ui.hpp" - -class SerialPortManager{ - public: - static void init(); - static void runPort(); - static bool shouldRun; - static int serialPort; -}; \ No newline at end of file diff --git a/src/model/controllers/ui/uiController.cpp b/src/model/controllers/ui/uiController.cpp new file mode 100644 index 0000000..74df96f --- /dev/null +++ b/src/model/controllers/ui/uiController.cpp @@ -0,0 +1,49 @@ +#include "uiController.hpp" + +UiController::UiController() +{ + std::cout << "init ui controller" << endl; + showMenu = true; + menuSize = cv::Size2i(400, 400); + menuPos = cv::Point2i(DEFAULT_UI_SIZE_X - menuSize.width, (DEFAULT_UI_SIZE_Y / 2) - (menuSize.height / 2)); // centered right + selectedIndex = 0; + menuItemNames = {"set vr mode", "set cinema mode", "settings"}; + vector> functions = {psvr::Psvr::vrmode, psvr::Psvr::cinemaMode, UiController::openSettings}; + unsigned int i = 0; + for (std::string name : menuItemNames) + { + menuItems[name] = functions.at(i); + i++; + } + update(); + cout << "done init ui controller" << endl; +} + +void UiController::update() +{ + time_t now = time(0); + menutime = ctime(&now); + menuTitle = std::string("P-OS ") + VERSION + " " + menutime; +} + +void UiController::selectedUp() +{ + if (selectedIndex < menuItems.size() - 1) + selectedIndex++; +} + +void UiController::selectedDown() +{ + if (selectedIndex > 0) + selectedIndex--; +} + +void UiController::openSettings() +{ +} + +void UiController::click() +{ + exitCalled = true; + // std::invoke(menuItems[menuItemNames.at(selectedIndex)]); +} \ No newline at end of file diff --git a/src/model/controllers/ui/uiController.hpp b/src/model/controllers/ui/uiController.hpp new file mode 100644 index 0000000..defda91 --- /dev/null +++ b/src/model/controllers/ui/uiController.hpp @@ -0,0 +1,49 @@ +/*#include +#include +#include +#include +#include +#include + +#include +*/ +#include "../../hardware/cameras/_cam.hpp" +#include "../../hardware/psvr/_psvr.hpp" +#include +#include +#include + +#include "../../patterns/observer/observable.hpp" + +#define DEFAULT_UI_WINDOW_AMOUNT 1 // 2 windows, one for each eye +#define DEFAULT_UI_OFFSET_X 1080 // 1080 +#define DEFAULT_UI_OFFSET_Y 0 +#define DEFAULT_UI_SIZE_X 1920 // psvr is 960x1080 per eye +#define DEFAULT_UI_SIZE_Y 1080 + +using namespace std; +using namespace cv; +using namespace cv::ogl; +using namespace psvr; + +/// @brief this class is used to process view logic and interaction [model] +class UiController +{ +public: + UiController(); + void selectedUp(); + void selectedDown(); + void click(); + void update(); + void openSettings(); + vector menuItemNames; + bool showMenu; + bool exitCalled; + bool runIntro; + string menuTitle; + cv::Size2i menuSize; + cv::Point2i menuPos; + unsigned int selectedIndex; + map> menuItems; + char *menutime; +}; diff --git a/src/model/controllers/windows/windowManager.cpp b/src/model/controllers/windows/windowManager.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/model/controllers/windows/windowsManager.hpp b/src/model/controllers/windows/windowsManager.hpp new file mode 100644 index 0000000..098bba5 --- /dev/null +++ b/src/model/controllers/windows/windowsManager.hpp @@ -0,0 +1,14 @@ +#include +#include + +/// @brief this class manages the UI(s) [windows] used by the application, right now only one should ever be used, especially in opengl mode +class UiManager +{ +public: + static std::vector accessLocks; + static std::vector managedUIs; + static bool uiShouldRun; + static void init(); + static void cleanup(); + static void beginDrawRoutineForUi(Ui *u); +}; \ No newline at end of file diff --git a/src/hardware/cameras/CMakeFiles/CMakeDirectoryInformation.cmake b/src/model/hardware/cameras/CMakeFiles/CMakeDirectoryInformation.cmake similarity index 100% rename from src/hardware/cameras/CMakeFiles/CMakeDirectoryInformation.cmake rename to src/model/hardware/cameras/CMakeFiles/CMakeDirectoryInformation.cmake diff --git a/src/hardware/cameras/CMakeFiles/cameras.dir/DependInfo.cmake b/src/model/hardware/cameras/CMakeFiles/cameras.dir/DependInfo.cmake similarity index 100% rename from src/hardware/cameras/CMakeFiles/cameras.dir/DependInfo.cmake rename to src/model/hardware/cameras/CMakeFiles/cameras.dir/DependInfo.cmake diff --git a/src/hardware/cameras/CMakeFiles/cameras.dir/build.make b/src/model/hardware/cameras/CMakeFiles/cameras.dir/build.make similarity index 100% rename from src/hardware/cameras/CMakeFiles/cameras.dir/build.make rename to src/model/hardware/cameras/CMakeFiles/cameras.dir/build.make diff --git a/src/hardware/cameras/CMakeFiles/cameras.dir/cmake_clean.cmake b/src/model/hardware/cameras/CMakeFiles/cameras.dir/cmake_clean.cmake similarity index 100% rename from src/hardware/cameras/CMakeFiles/cameras.dir/cmake_clean.cmake rename to src/model/hardware/cameras/CMakeFiles/cameras.dir/cmake_clean.cmake diff --git a/src/hardware/cameras/CMakeFiles/cameras.dir/cmake_clean_target.cmake b/src/model/hardware/cameras/CMakeFiles/cameras.dir/cmake_clean_target.cmake similarity index 100% rename from src/hardware/cameras/CMakeFiles/cameras.dir/cmake_clean_target.cmake rename to src/model/hardware/cameras/CMakeFiles/cameras.dir/cmake_clean_target.cmake diff --git a/src/hardware/cameras/CMakeFiles/cameras.dir/compiler_depend.internal b/src/model/hardware/cameras/CMakeFiles/cameras.dir/compiler_depend.internal similarity index 100% rename from src/hardware/cameras/CMakeFiles/cameras.dir/compiler_depend.internal rename to src/model/hardware/cameras/CMakeFiles/cameras.dir/compiler_depend.internal diff --git a/src/hardware/cameras/CMakeFiles/cameras.dir/compiler_depend.make b/src/model/hardware/cameras/CMakeFiles/cameras.dir/compiler_depend.make similarity index 100% rename from src/hardware/cameras/CMakeFiles/cameras.dir/compiler_depend.make rename to src/model/hardware/cameras/CMakeFiles/cameras.dir/compiler_depend.make diff --git a/src/hardware/cameras/CMakeFiles/cameras.dir/compiler_depend.ts b/src/model/hardware/cameras/CMakeFiles/cameras.dir/compiler_depend.ts similarity index 100% rename from src/hardware/cameras/CMakeFiles/cameras.dir/compiler_depend.ts rename to src/model/hardware/cameras/CMakeFiles/cameras.dir/compiler_depend.ts diff --git a/src/hardware/cameras/CMakeFiles/cameras.dir/depend.make b/src/model/hardware/cameras/CMakeFiles/cameras.dir/depend.make similarity index 100% rename from src/hardware/cameras/CMakeFiles/cameras.dir/depend.make rename to src/model/hardware/cameras/CMakeFiles/cameras.dir/depend.make diff --git a/src/hardware/cameras/CMakeFiles/cameras.dir/flags.make b/src/model/hardware/cameras/CMakeFiles/cameras.dir/flags.make similarity index 100% rename from src/hardware/cameras/CMakeFiles/cameras.dir/flags.make rename to src/model/hardware/cameras/CMakeFiles/cameras.dir/flags.make diff --git a/src/hardware/cameras/CMakeFiles/cameras.dir/link.txt b/src/model/hardware/cameras/CMakeFiles/cameras.dir/link.txt similarity index 100% rename from src/hardware/cameras/CMakeFiles/cameras.dir/link.txt rename to src/model/hardware/cameras/CMakeFiles/cameras.dir/link.txt diff --git a/src/hardware/cameras/CMakeFiles/cameras.dir/progress.make b/src/model/hardware/cameras/CMakeFiles/cameras.dir/progress.make similarity index 100% rename from src/hardware/cameras/CMakeFiles/cameras.dir/progress.make rename to src/model/hardware/cameras/CMakeFiles/cameras.dir/progress.make diff --git a/src/hardware/cameras/CMakeFiles/progress.marks b/src/model/hardware/cameras/CMakeFiles/progress.marks similarity index 100% rename from src/hardware/cameras/CMakeFiles/progress.marks rename to src/model/hardware/cameras/CMakeFiles/progress.marks diff --git a/src/hardware/cameras/CMakeLists.txt b/src/model/hardware/cameras/CMakeLists.txt similarity index 100% rename from src/hardware/cameras/CMakeLists.txt rename to src/model/hardware/cameras/CMakeLists.txt diff --git a/src/hardware/cameras/Makefile b/src/model/hardware/cameras/Makefile similarity index 100% rename from src/hardware/cameras/Makefile rename to src/model/hardware/cameras/Makefile diff --git a/src/hardware/cameras/_cam.hpp b/src/model/hardware/cameras/_cam.hpp similarity index 60% rename from src/hardware/cameras/_cam.hpp rename to src/model/hardware/cameras/_cam.hpp index 26345be..fb2b4db 100644 --- a/src/hardware/cameras/_cam.hpp +++ b/src/model/hardware/cameras/_cam.hpp @@ -14,7 +14,7 @@ #include #include #include -#include "../../threadweaver/threadweaver.hpp" +#include "../../../threadweaver/threadweaver.hpp" using namespace std; using namespace cv; @@ -30,12 +30,12 @@ class camera{ class cameraManager{ public: - static std::vector videoSources; - static std::vector captures; - static std::vector accessLocks; - static bool runCaptureThread; - static int init(); - static void runCapture(); - static void stopCapture(); - static void runCaptureForCamera(camera* c, uint index); + std::vector videoSources; + std::vector captures; + std::vector accessLocks; + bool runCaptureThread; + cameraManager(); + void runCapture(); + void stopCapture(); + void runCaptureForCamera(camera* c, uint index); }; \ No newline at end of file diff --git a/src/hardware/cameras/camEnum.cpp b/src/model/hardware/cameras/camEnum.cpp similarity index 100% rename from src/hardware/cameras/camEnum.cpp rename to src/model/hardware/cameras/camEnum.cpp diff --git a/src/hardware/cameras/cameraManager.cpp b/src/model/hardware/cameras/cameraManager.cpp similarity index 93% rename from src/hardware/cameras/cameraManager.cpp rename to src/model/hardware/cameras/cameraManager.cpp index b5cd585..596ec96 100644 --- a/src/hardware/cameras/cameraManager.cpp +++ b/src/model/hardware/cameras/cameraManager.cpp @@ -1,9 +1,5 @@ #include "_cam.hpp" #include -vector cameraManager::videoSources; -std::vector cameraManager::captures; -bool cameraManager::runCaptureThread; -std::vector cameraManager::accessLocks; void cameraManager::runCaptureForCamera(camera* c, uint index){ while(runCaptureThread){ @@ -31,7 +27,7 @@ void cameraManager::runCaptureForCamera(camera* c, uint index){ } } -int cameraManager::init(){ +cameraManager::cameraManager(){ std::cout << "init camera manager" << endl; vector cameras = listCameras(); uint cameraIndex = 0; @@ -66,7 +62,6 @@ int cameraManager::init(){ } cout << "found " << std::to_string(videoSources.size()) << " valid cameras" << endl; - return videoSources.size(); } void cameraManager::runCapture(){ diff --git a/src/hardware/hw/CMakeFiles/CMakeDirectoryInformation.cmake b/src/model/hardware/hw/CMakeFiles/CMakeDirectoryInformation.cmake similarity index 100% rename from src/hardware/hw/CMakeFiles/CMakeDirectoryInformation.cmake rename to src/model/hardware/hw/CMakeFiles/CMakeDirectoryInformation.cmake diff --git a/src/hardware/hw/CMakeFiles/hw.dir/DependInfo.cmake b/src/model/hardware/hw/CMakeFiles/hw.dir/DependInfo.cmake similarity index 100% rename from src/hardware/hw/CMakeFiles/hw.dir/DependInfo.cmake rename to src/model/hardware/hw/CMakeFiles/hw.dir/DependInfo.cmake diff --git a/src/hardware/hw/CMakeFiles/hw.dir/build.make b/src/model/hardware/hw/CMakeFiles/hw.dir/build.make similarity index 100% rename from src/hardware/hw/CMakeFiles/hw.dir/build.make rename to src/model/hardware/hw/CMakeFiles/hw.dir/build.make diff --git a/src/hardware/hw/CMakeFiles/hw.dir/cmake_clean.cmake b/src/model/hardware/hw/CMakeFiles/hw.dir/cmake_clean.cmake similarity index 100% rename from src/hardware/hw/CMakeFiles/hw.dir/cmake_clean.cmake rename to src/model/hardware/hw/CMakeFiles/hw.dir/cmake_clean.cmake diff --git a/src/hardware/hw/CMakeFiles/hw.dir/cmake_clean_target.cmake b/src/model/hardware/hw/CMakeFiles/hw.dir/cmake_clean_target.cmake similarity index 100% rename from src/hardware/hw/CMakeFiles/hw.dir/cmake_clean_target.cmake rename to src/model/hardware/hw/CMakeFiles/hw.dir/cmake_clean_target.cmake diff --git a/src/hardware/hw/CMakeFiles/hw.dir/compiler_depend.internal b/src/model/hardware/hw/CMakeFiles/hw.dir/compiler_depend.internal similarity index 100% rename from src/hardware/hw/CMakeFiles/hw.dir/compiler_depend.internal rename to src/model/hardware/hw/CMakeFiles/hw.dir/compiler_depend.internal diff --git a/src/hardware/hw/CMakeFiles/hw.dir/compiler_depend.make b/src/model/hardware/hw/CMakeFiles/hw.dir/compiler_depend.make similarity index 100% rename from src/hardware/hw/CMakeFiles/hw.dir/compiler_depend.make rename to src/model/hardware/hw/CMakeFiles/hw.dir/compiler_depend.make diff --git a/src/hardware/hw/CMakeFiles/hw.dir/compiler_depend.ts b/src/model/hardware/hw/CMakeFiles/hw.dir/compiler_depend.ts similarity index 100% rename from src/hardware/hw/CMakeFiles/hw.dir/compiler_depend.ts rename to src/model/hardware/hw/CMakeFiles/hw.dir/compiler_depend.ts diff --git a/src/hardware/hw/CMakeFiles/hw.dir/depend.make b/src/model/hardware/hw/CMakeFiles/hw.dir/depend.make similarity index 100% rename from src/hardware/hw/CMakeFiles/hw.dir/depend.make rename to src/model/hardware/hw/CMakeFiles/hw.dir/depend.make diff --git a/src/hardware/hw/CMakeFiles/hw.dir/flags.make b/src/model/hardware/hw/CMakeFiles/hw.dir/flags.make similarity index 100% rename from src/hardware/hw/CMakeFiles/hw.dir/flags.make rename to src/model/hardware/hw/CMakeFiles/hw.dir/flags.make diff --git a/src/hardware/hw/CMakeFiles/hw.dir/link.txt b/src/model/hardware/hw/CMakeFiles/hw.dir/link.txt similarity index 100% rename from src/hardware/hw/CMakeFiles/hw.dir/link.txt rename to src/model/hardware/hw/CMakeFiles/hw.dir/link.txt diff --git a/src/hardware/hw/CMakeFiles/hw.dir/progress.make b/src/model/hardware/hw/CMakeFiles/hw.dir/progress.make similarity index 100% rename from src/hardware/hw/CMakeFiles/hw.dir/progress.make rename to src/model/hardware/hw/CMakeFiles/hw.dir/progress.make diff --git a/src/hardware/hw/CMakeFiles/progress.marks b/src/model/hardware/hw/CMakeFiles/progress.marks similarity index 100% rename from src/hardware/hw/CMakeFiles/progress.marks rename to src/model/hardware/hw/CMakeFiles/progress.marks diff --git a/src/hardware/hw/CMakeLists.txt b/src/model/hardware/hw/CMakeLists.txt similarity index 100% rename from src/hardware/hw/CMakeLists.txt rename to src/model/hardware/hw/CMakeLists.txt diff --git a/src/hardware/hw/Makefile b/src/model/hardware/hw/Makefile similarity index 100% rename from src/hardware/hw/Makefile rename to src/model/hardware/hw/Makefile diff --git a/src/model/hardware/hw/serial.cpp b/src/model/hardware/hw/serial.cpp new file mode 100644 index 0000000..cb639cd --- /dev/null +++ b/src/model/hardware/hw/serial.cpp @@ -0,0 +1,102 @@ +#include "./serial.hpp" +#include + +SerialPortManager::SerialPortManager() +{ + struct termios tty; + + std::cout << "opening serial port /dev/ttyUSB0" << std::endl; + serialPort = open("/dev/ttyUSB0", O_RDWR); // open serial port + std::cout << "done" << std::endl; + + if (serialPort < 0) + { + printf("Error %i from open: %s\n", errno, strerror(errno)); + return; + } + + if (tcgetattr(serialPort, &tty) != 0) + { // read serial port configuration + printf("Error %i from tcgetattr: %s\n", errno, strerror(errno)); + return; + } + + // local flags + tty.c_lflag &= ~ICANON; // enable canonical mode + tty.c_lflag &= ~ECHO; // Disable echo + tty.c_lflag &= ~ECHOE; // Disable erasure + tty.c_lflag &= ~ECHONL; // Disable new-line echo + tty.c_lflag &= ~ISIG; // Disable interpretation of INTR, QUIT and SUSP + // input modes + tty.c_iflag &= ~(IXON | IXOFF | IXANY); // Turn off s/w flow ctrl + tty.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL); // Disable any special handling of received bytes + // output modes + tty.c_oflag &= ~OPOST; // Prevent special interpretation of output bytes (e.g. newline chars) + tty.c_oflag &= ~ONLCR; // Prevent conversion of newline to carriage return/line feed + // c_cc + tty.c_cc[VTIME] = 1; // Wait for up to 1s (10 deciseconds), returning as soon as any data is received. + tty.c_cc[VMIN] = 0; + // baudrate + cfsetispeed(&tty, B9600); // set baudrate (input) + cfsetospeed(&tty, B9600); // (output) + + // Save tty settings, also checking for error + if (tcsetattr(serialPort, TCSANOW, &tty) != 0) + { + printf("Error %i from tcsetattr: %s\n", errno, strerror(errno)); + return; + } + shouldRun = false; + std::cout << "starting hardware watcher thread" << std::endl; + std::thread *t = new std::thread(runPort); + std::cout << "done" << std::endl; + Threadweaver::stick_this_thread_to_core(t, CAMCORE); + //Threadweaver::hardwareWatcherThread = t; + shouldRun = true; +} + +void SerialPortManager::runPort() +{ + while (!shouldRun) + { + } + char read_buf[256]; + int n = 0; + while (shouldRun) + { + n = read(serialPort, &read_buf, sizeof(read_buf)); + if (n > 0) + { + char c = read_buf[0]; + sendMessage(std::string()+c); + /* + switch (c) + { + case 'U': + cout << c << "++" << endl; + ui::UiController::selectedUp(); + break; + case 'D': + cout << c << "--" << endl; + ui::UiController::selectedDown(); + break; + case '1': + ui::UiController::click(); + break; + case '2': + ui::UiController::click(); + break; + case '3': + ui::UiController::click(); + break; + case '4': + ui::UiController::click(); + break; + default: + break; + } + */ + } + std::fill_n(read_buf, n, 0); + } +} \ No newline at end of file diff --git a/src/model/hardware/hw/serial.hpp b/src/model/hardware/hw/serial.hpp new file mode 100644 index 0000000..e6f3d7f --- /dev/null +++ b/src/model/hardware/hw/serial.hpp @@ -0,0 +1,27 @@ +// C library headers +#include +#include + +// Linux headers +#include // Contains file controls like O_RDWR +#include // Error integer and strerror() function +#include // Contains POSIX terminal control definitions +#include // write(), read(), close() + +#include +#include + +#include "../../patterns/observer/observable.hpp" +#include "../../patterns/observer/observer.hpp" +#include "../../threadweaver/threadweaver.hpp" + +class SerialPortManager : Observable +{ +public: + SerialPortManager(); + void runPort(); + +private: + bool shouldRun; + int serialPort; +}; \ No newline at end of file diff --git a/src/hardware/ihidapi/CMakeFiles/CMakeDirectoryInformation.cmake b/src/model/hardware/ihidapi/CMakeFiles/CMakeDirectoryInformation.cmake similarity index 100% rename from src/hardware/ihidapi/CMakeFiles/CMakeDirectoryInformation.cmake rename to src/model/hardware/ihidapi/CMakeFiles/CMakeDirectoryInformation.cmake diff --git a/src/hardware/ihidapi/CMakeFiles/ihidapi.dir/DependInfo.cmake b/src/model/hardware/ihidapi/CMakeFiles/ihidapi.dir/DependInfo.cmake similarity index 100% rename from src/hardware/ihidapi/CMakeFiles/ihidapi.dir/DependInfo.cmake rename to src/model/hardware/ihidapi/CMakeFiles/ihidapi.dir/DependInfo.cmake diff --git a/src/hardware/ihidapi/CMakeFiles/ihidapi.dir/build.make b/src/model/hardware/ihidapi/CMakeFiles/ihidapi.dir/build.make similarity index 100% rename from src/hardware/ihidapi/CMakeFiles/ihidapi.dir/build.make rename to src/model/hardware/ihidapi/CMakeFiles/ihidapi.dir/build.make diff --git a/src/hardware/ihidapi/CMakeFiles/ihidapi.dir/cmake_clean.cmake b/src/model/hardware/ihidapi/CMakeFiles/ihidapi.dir/cmake_clean.cmake similarity index 100% rename from src/hardware/ihidapi/CMakeFiles/ihidapi.dir/cmake_clean.cmake rename to src/model/hardware/ihidapi/CMakeFiles/ihidapi.dir/cmake_clean.cmake diff --git a/src/hardware/ihidapi/CMakeFiles/ihidapi.dir/cmake_clean_target.cmake b/src/model/hardware/ihidapi/CMakeFiles/ihidapi.dir/cmake_clean_target.cmake similarity index 100% rename from src/hardware/ihidapi/CMakeFiles/ihidapi.dir/cmake_clean_target.cmake rename to src/model/hardware/ihidapi/CMakeFiles/ihidapi.dir/cmake_clean_target.cmake diff --git a/src/hardware/ihidapi/CMakeFiles/ihidapi.dir/compiler_depend.internal b/src/model/hardware/ihidapi/CMakeFiles/ihidapi.dir/compiler_depend.internal similarity index 100% rename from src/hardware/ihidapi/CMakeFiles/ihidapi.dir/compiler_depend.internal rename to src/model/hardware/ihidapi/CMakeFiles/ihidapi.dir/compiler_depend.internal diff --git a/src/hardware/ihidapi/CMakeFiles/ihidapi.dir/compiler_depend.make b/src/model/hardware/ihidapi/CMakeFiles/ihidapi.dir/compiler_depend.make similarity index 100% rename from src/hardware/ihidapi/CMakeFiles/ihidapi.dir/compiler_depend.make rename to src/model/hardware/ihidapi/CMakeFiles/ihidapi.dir/compiler_depend.make diff --git a/src/hardware/ihidapi/CMakeFiles/ihidapi.dir/compiler_depend.ts b/src/model/hardware/ihidapi/CMakeFiles/ihidapi.dir/compiler_depend.ts similarity index 100% rename from src/hardware/ihidapi/CMakeFiles/ihidapi.dir/compiler_depend.ts rename to src/model/hardware/ihidapi/CMakeFiles/ihidapi.dir/compiler_depend.ts diff --git a/src/hardware/ihidapi/CMakeFiles/ihidapi.dir/depend.make b/src/model/hardware/ihidapi/CMakeFiles/ihidapi.dir/depend.make similarity index 100% rename from src/hardware/ihidapi/CMakeFiles/ihidapi.dir/depend.make rename to src/model/hardware/ihidapi/CMakeFiles/ihidapi.dir/depend.make diff --git a/src/hardware/ihidapi/CMakeFiles/ihidapi.dir/flags.make b/src/model/hardware/ihidapi/CMakeFiles/ihidapi.dir/flags.make similarity index 100% rename from src/hardware/ihidapi/CMakeFiles/ihidapi.dir/flags.make rename to src/model/hardware/ihidapi/CMakeFiles/ihidapi.dir/flags.make diff --git a/src/hardware/ihidapi/CMakeFiles/ihidapi.dir/link.txt b/src/model/hardware/ihidapi/CMakeFiles/ihidapi.dir/link.txt similarity index 100% rename from src/hardware/ihidapi/CMakeFiles/ihidapi.dir/link.txt rename to src/model/hardware/ihidapi/CMakeFiles/ihidapi.dir/link.txt diff --git a/src/hardware/ihidapi/CMakeFiles/ihidapi.dir/progress.make b/src/model/hardware/ihidapi/CMakeFiles/ihidapi.dir/progress.make similarity index 100% rename from src/hardware/ihidapi/CMakeFiles/ihidapi.dir/progress.make rename to src/model/hardware/ihidapi/CMakeFiles/ihidapi.dir/progress.make diff --git a/src/hardware/ihidapi/CMakeFiles/progress.marks b/src/model/hardware/ihidapi/CMakeFiles/progress.marks similarity index 100% rename from src/hardware/ihidapi/CMakeFiles/progress.marks rename to src/model/hardware/ihidapi/CMakeFiles/progress.marks diff --git a/src/hardware/ihidapi/CMakeLists.txt b/src/model/hardware/ihidapi/CMakeLists.txt similarity index 100% rename from src/hardware/ihidapi/CMakeLists.txt rename to src/model/hardware/ihidapi/CMakeLists.txt diff --git a/src/hardware/ihidapi/Makefile b/src/model/hardware/ihidapi/Makefile similarity index 100% rename from src/hardware/ihidapi/Makefile rename to src/model/hardware/ihidapi/Makefile diff --git a/src/hardware/ihidapi/_hidapi.hpp b/src/model/hardware/ihidapi/_hidapi.hpp similarity index 100% rename from src/hardware/ihidapi/_hidapi.hpp rename to src/model/hardware/ihidapi/_hidapi.hpp diff --git a/src/hardware/ihidapi/hidapi_functions.cpp b/src/model/hardware/ihidapi/hidapi_functions.cpp similarity index 100% rename from src/hardware/ihidapi/hidapi_functions.cpp rename to src/model/hardware/ihidapi/hidapi_functions.cpp diff --git a/src/hardware/psvr/CMakeFiles/CMakeDirectoryInformation.cmake b/src/model/hardware/psvr/CMakeFiles/CMakeDirectoryInformation.cmake similarity index 100% rename from src/hardware/psvr/CMakeFiles/CMakeDirectoryInformation.cmake rename to src/model/hardware/psvr/CMakeFiles/CMakeDirectoryInformation.cmake diff --git a/src/hardware/psvr/CMakeFiles/progress.marks b/src/model/hardware/psvr/CMakeFiles/progress.marks similarity index 100% rename from src/hardware/psvr/CMakeFiles/progress.marks rename to src/model/hardware/psvr/CMakeFiles/progress.marks diff --git a/src/hardware/psvr/CMakeFiles/psvr.dir/DependInfo.cmake b/src/model/hardware/psvr/CMakeFiles/psvr.dir/DependInfo.cmake similarity index 100% rename from src/hardware/psvr/CMakeFiles/psvr.dir/DependInfo.cmake rename to src/model/hardware/psvr/CMakeFiles/psvr.dir/DependInfo.cmake diff --git a/src/hardware/psvr/CMakeFiles/psvr.dir/build.make b/src/model/hardware/psvr/CMakeFiles/psvr.dir/build.make similarity index 100% rename from src/hardware/psvr/CMakeFiles/psvr.dir/build.make rename to src/model/hardware/psvr/CMakeFiles/psvr.dir/build.make diff --git a/src/hardware/psvr/CMakeFiles/psvr.dir/cmake_clean.cmake b/src/model/hardware/psvr/CMakeFiles/psvr.dir/cmake_clean.cmake similarity index 100% rename from src/hardware/psvr/CMakeFiles/psvr.dir/cmake_clean.cmake rename to src/model/hardware/psvr/CMakeFiles/psvr.dir/cmake_clean.cmake diff --git a/src/hardware/psvr/CMakeFiles/psvr.dir/cmake_clean_target.cmake b/src/model/hardware/psvr/CMakeFiles/psvr.dir/cmake_clean_target.cmake similarity index 100% rename from src/hardware/psvr/CMakeFiles/psvr.dir/cmake_clean_target.cmake rename to src/model/hardware/psvr/CMakeFiles/psvr.dir/cmake_clean_target.cmake diff --git a/src/hardware/psvr/CMakeFiles/psvr.dir/compiler_depend.internal b/src/model/hardware/psvr/CMakeFiles/psvr.dir/compiler_depend.internal similarity index 100% rename from src/hardware/psvr/CMakeFiles/psvr.dir/compiler_depend.internal rename to src/model/hardware/psvr/CMakeFiles/psvr.dir/compiler_depend.internal diff --git a/src/hardware/psvr/CMakeFiles/psvr.dir/compiler_depend.make b/src/model/hardware/psvr/CMakeFiles/psvr.dir/compiler_depend.make similarity index 100% rename from src/hardware/psvr/CMakeFiles/psvr.dir/compiler_depend.make rename to src/model/hardware/psvr/CMakeFiles/psvr.dir/compiler_depend.make diff --git a/src/hardware/psvr/CMakeFiles/psvr.dir/compiler_depend.ts b/src/model/hardware/psvr/CMakeFiles/psvr.dir/compiler_depend.ts similarity index 100% rename from src/hardware/psvr/CMakeFiles/psvr.dir/compiler_depend.ts rename to src/model/hardware/psvr/CMakeFiles/psvr.dir/compiler_depend.ts diff --git a/src/hardware/psvr/CMakeFiles/psvr.dir/depend.make b/src/model/hardware/psvr/CMakeFiles/psvr.dir/depend.make similarity index 100% rename from src/hardware/psvr/CMakeFiles/psvr.dir/depend.make rename to src/model/hardware/psvr/CMakeFiles/psvr.dir/depend.make diff --git a/src/hardware/psvr/CMakeFiles/psvr.dir/flags.make b/src/model/hardware/psvr/CMakeFiles/psvr.dir/flags.make similarity index 100% rename from src/hardware/psvr/CMakeFiles/psvr.dir/flags.make rename to src/model/hardware/psvr/CMakeFiles/psvr.dir/flags.make diff --git a/src/hardware/psvr/CMakeFiles/psvr.dir/link.txt b/src/model/hardware/psvr/CMakeFiles/psvr.dir/link.txt similarity index 100% rename from src/hardware/psvr/CMakeFiles/psvr.dir/link.txt rename to src/model/hardware/psvr/CMakeFiles/psvr.dir/link.txt diff --git a/src/hardware/psvr/CMakeFiles/psvr.dir/progress.make b/src/model/hardware/psvr/CMakeFiles/psvr.dir/progress.make similarity index 100% rename from src/hardware/psvr/CMakeFiles/psvr.dir/progress.make rename to src/model/hardware/psvr/CMakeFiles/psvr.dir/progress.make diff --git a/src/hardware/psvr/CMakeLists.txt b/src/model/hardware/psvr/CMakeLists.txt similarity index 100% rename from src/hardware/psvr/CMakeLists.txt rename to src/model/hardware/psvr/CMakeLists.txt diff --git a/src/hardware/psvr/Makefile b/src/model/hardware/psvr/Makefile similarity index 100% rename from src/hardware/psvr/Makefile rename to src/model/hardware/psvr/Makefile diff --git a/src/hardware/psvr/_psvr.hpp b/src/model/hardware/psvr/_psvr.hpp similarity index 61% rename from src/hardware/psvr/_psvr.hpp rename to src/model/hardware/psvr/_psvr.hpp index 90b1761..ad0c975 100644 --- a/src/hardware/psvr/_psvr.hpp +++ b/src/model/hardware/psvr/_psvr.hpp @@ -13,17 +13,17 @@ const unsigned char psvr_power_on[8] {0x17,0x00,0xaa,0x04,0x00,0x00,0x00,0x00}; namespace psvr{ class Psvr{ public: - static hid_device* handle; - static bool vrMode; - static bool powered; + hid_device* handle; + bool vrMode; + bool powered; - static void open(); //default constructor + Psvr(); //default constructor + ~Psvr(); - static void startup(); - static void shutdown(); - static void vrmode(); - static void cinemaMode(); - - static void close();//default destructor + void startup(); + void shutdown(); + void vrmode(); + void cinemaMode(); + void close();//default destructor }; } \ No newline at end of file diff --git a/src/hardware/psvr/psvr.cpp b/src/model/hardware/psvr/psvr.cpp similarity index 92% rename from src/hardware/psvr/psvr.cpp rename to src/model/hardware/psvr/psvr.cpp index 2cc56d9..31e1a25 100644 --- a/src/hardware/psvr/psvr.cpp +++ b/src/model/hardware/psvr/psvr.cpp @@ -1,11 +1,8 @@ #include "_psvr.hpp" namespace psvr{ -hid_device* Psvr::handle; -bool Psvr::vrMode; -bool Psvr::powered; -void Psvr::open(){ +Psvr::Psvr(){ int res = hid_init(); handle = hid_func::open_device_idx(sony_vid, psvr_pid, ctrl_device_iface, 0); @@ -58,10 +55,9 @@ void Psvr::cinemaMode(){ vrMode = false; } -void Psvr::close(){ +Psvr::~Psvr(){ if(powered) shutdown(); hid_close(handle); int res = hid_exit(); } - } \ No newline at end of file diff --git a/src/model/patterns/observer/observable.cpp b/src/model/patterns/observer/observable.cpp new file mode 100644 index 0000000..6efbc0d --- /dev/null +++ b/src/model/patterns/observer/observable.cpp @@ -0,0 +1,21 @@ +#include "observable.hpp" + +void Observable::Attach(Observer *observer) +{ + list_observer_.push_back(observer); +} + +void Observable::Detach(Observer *observer) +{ + list_observer_.remove(observer); +} + +void Observable::sendMessage(std::string str) +{ + std::list::iterator iterator = list_observer_.begin(); + while (iterator != list_observer_.end()) + { + (*iterator)->Update(str); + ++iterator; + } +} \ No newline at end of file diff --git a/src/model/patterns/observer/observable.hpp b/src/model/patterns/observer/observable.hpp new file mode 100644 index 0000000..5c44928 --- /dev/null +++ b/src/model/patterns/observer/observable.hpp @@ -0,0 +1,14 @@ +#include +#include +#include +#include "observer.hpp" + +class Observable { + public: + ~Observable(){}; + void Attach(Observer *observer) = 0; + void Detach(Observer *observer) = 0; + void sendMessage(std::string str); + private: + std::list list_observer_; +}; \ No newline at end of file diff --git a/src/model/patterns/observer/observer.hpp b/src/model/patterns/observer/observer.hpp new file mode 100644 index 0000000..9e3a886 --- /dev/null +++ b/src/model/patterns/observer/observer.hpp @@ -0,0 +1,6 @@ +#include + +class Observer { + public: + virtual void Update(const std::string &message_from_subject) = 0; +}; \ No newline at end of file diff --git a/src/perfcheckers/CMakeFiles/CMakeDirectoryInformation.cmake b/src/model/perfcheckers/CMakeFiles/CMakeDirectoryInformation.cmake similarity index 100% rename from src/perfcheckers/CMakeFiles/CMakeDirectoryInformation.cmake rename to src/model/perfcheckers/CMakeFiles/CMakeDirectoryInformation.cmake diff --git a/src/perfcheckers/CMakeFiles/perfcheckers.dir/DependInfo.cmake b/src/model/perfcheckers/CMakeFiles/perfcheckers.dir/DependInfo.cmake similarity index 100% rename from src/perfcheckers/CMakeFiles/perfcheckers.dir/DependInfo.cmake rename to src/model/perfcheckers/CMakeFiles/perfcheckers.dir/DependInfo.cmake diff --git a/src/perfcheckers/CMakeFiles/perfcheckers.dir/build.make b/src/model/perfcheckers/CMakeFiles/perfcheckers.dir/build.make similarity index 100% rename from src/perfcheckers/CMakeFiles/perfcheckers.dir/build.make rename to src/model/perfcheckers/CMakeFiles/perfcheckers.dir/build.make diff --git a/src/perfcheckers/CMakeFiles/perfcheckers.dir/cmake_clean.cmake b/src/model/perfcheckers/CMakeFiles/perfcheckers.dir/cmake_clean.cmake similarity index 100% rename from src/perfcheckers/CMakeFiles/perfcheckers.dir/cmake_clean.cmake rename to src/model/perfcheckers/CMakeFiles/perfcheckers.dir/cmake_clean.cmake diff --git a/src/perfcheckers/CMakeFiles/perfcheckers.dir/cmake_clean_target.cmake b/src/model/perfcheckers/CMakeFiles/perfcheckers.dir/cmake_clean_target.cmake similarity index 100% rename from src/perfcheckers/CMakeFiles/perfcheckers.dir/cmake_clean_target.cmake rename to src/model/perfcheckers/CMakeFiles/perfcheckers.dir/cmake_clean_target.cmake diff --git a/src/perfcheckers/CMakeFiles/perfcheckers.dir/compiler_depend.internal b/src/model/perfcheckers/CMakeFiles/perfcheckers.dir/compiler_depend.internal similarity index 100% rename from src/perfcheckers/CMakeFiles/perfcheckers.dir/compiler_depend.internal rename to src/model/perfcheckers/CMakeFiles/perfcheckers.dir/compiler_depend.internal diff --git a/src/perfcheckers/CMakeFiles/perfcheckers.dir/compiler_depend.make b/src/model/perfcheckers/CMakeFiles/perfcheckers.dir/compiler_depend.make similarity index 100% rename from src/perfcheckers/CMakeFiles/perfcheckers.dir/compiler_depend.make rename to src/model/perfcheckers/CMakeFiles/perfcheckers.dir/compiler_depend.make diff --git a/src/perfcheckers/CMakeFiles/perfcheckers.dir/compiler_depend.ts b/src/model/perfcheckers/CMakeFiles/perfcheckers.dir/compiler_depend.ts similarity index 100% rename from src/perfcheckers/CMakeFiles/perfcheckers.dir/compiler_depend.ts rename to src/model/perfcheckers/CMakeFiles/perfcheckers.dir/compiler_depend.ts diff --git a/src/perfcheckers/CMakeFiles/perfcheckers.dir/depend.make b/src/model/perfcheckers/CMakeFiles/perfcheckers.dir/depend.make similarity index 100% rename from src/perfcheckers/CMakeFiles/perfcheckers.dir/depend.make rename to src/model/perfcheckers/CMakeFiles/perfcheckers.dir/depend.make diff --git a/src/perfcheckers/CMakeFiles/perfcheckers.dir/flags.make b/src/model/perfcheckers/CMakeFiles/perfcheckers.dir/flags.make similarity index 100% rename from src/perfcheckers/CMakeFiles/perfcheckers.dir/flags.make rename to src/model/perfcheckers/CMakeFiles/perfcheckers.dir/flags.make diff --git a/src/perfcheckers/CMakeFiles/perfcheckers.dir/link.txt b/src/model/perfcheckers/CMakeFiles/perfcheckers.dir/link.txt similarity index 100% rename from src/perfcheckers/CMakeFiles/perfcheckers.dir/link.txt rename to src/model/perfcheckers/CMakeFiles/perfcheckers.dir/link.txt diff --git a/src/perfcheckers/CMakeFiles/perfcheckers.dir/progress.make b/src/model/perfcheckers/CMakeFiles/perfcheckers.dir/progress.make similarity index 100% rename from src/perfcheckers/CMakeFiles/perfcheckers.dir/progress.make rename to src/model/perfcheckers/CMakeFiles/perfcheckers.dir/progress.make diff --git a/src/perfcheckers/CMakeFiles/progress.marks b/src/model/perfcheckers/CMakeFiles/progress.marks similarity index 100% rename from src/perfcheckers/CMakeFiles/progress.marks rename to src/model/perfcheckers/CMakeFiles/progress.marks diff --git a/src/perfcheckers/CMakeLists.txt b/src/model/perfcheckers/CMakeLists.txt similarity index 100% rename from src/perfcheckers/CMakeLists.txt rename to src/model/perfcheckers/CMakeLists.txt diff --git a/src/perfcheckers/Makefile b/src/model/perfcheckers/Makefile similarity index 100% rename from src/perfcheckers/Makefile rename to src/model/perfcheckers/Makefile diff --git a/src/perfcheckers/fcheckManager.cpp b/src/model/perfcheckers/fcheckManager.cpp similarity index 100% rename from src/perfcheckers/fcheckManager.cpp rename to src/model/perfcheckers/fcheckManager.cpp diff --git a/src/perfcheckers/framerate.cpp b/src/model/perfcheckers/framerate.cpp similarity index 100% rename from src/perfcheckers/framerate.cpp rename to src/model/perfcheckers/framerate.cpp diff --git a/src/perfcheckers/framerate.hpp b/src/model/perfcheckers/framerate.hpp similarity index 100% rename from src/perfcheckers/framerate.hpp rename to src/model/perfcheckers/framerate.hpp diff --git a/src/model/windows/window.cpp b/src/model/windows/window.cpp new file mode 100644 index 0000000..ef2d704 --- /dev/null +++ b/src/model/windows/window.cpp @@ -0,0 +1,24 @@ +#include "window.hpp" + +void Window::draw(){ + try{ + drawAccess.lock(); + if(drawSurface.empty()){ + drawAccess.unlock(); + return; + } + cv::UMat drawBuffer = drawSurface; + drawAccess.unlock(); + + #ifdef OGLWIN + drawTexture.copyFrom(drawBuffer); + cv::imshow(this->myWindow, this->drawTexture); + #else + cv::imshow(this->myWindow, drawBuffer); + #endif + cv::waitKey(10); + } + catch(...){ + drawAccess.unlock(); + } +} \ No newline at end of file diff --git a/src/model/windows/window.hpp b/src/model/windows/window.hpp new file mode 100644 index 0000000..fb6f508 --- /dev/null +++ b/src/model/windows/window.hpp @@ -0,0 +1,17 @@ +#include +#include +#include +#include +#include + +/// @brief this class represents a single window, there should only ever be one if the app is in opengl mode. +class Window +{ +public: + cv::UMat drawSurface; // Current frame + cv::ogl::Texture2D drawTexture = cv::ogl::Texture2D(); + int id; + std::mutex drawAccess; + std::string myWindow; + void draw(); +}; \ No newline at end of file diff --git a/src/model/windows/windowManager.cpp b/src/model/windows/windowManager.cpp new file mode 100644 index 0000000..1c07e5b --- /dev/null +++ b/src/model/windows/windowManager.cpp @@ -0,0 +1,32 @@ +#include "windowManager.hpp" +#include +namespace ui +{ + + // initializes the ui manager, following default values + WindowManager::WindowManager() + { + uiShouldRun = false; + for (int i = 0; i < DEFAULT_UI_WINDOW_AMOUNT; i++) + { + Window *newWindow = new Window(); + newWindow->myWindow = "project- UI" + std::to_string(i); +#ifndef OGLWIN + cv::namedWindow(newWindow->myWindow); //if we're in opengl mode, the window needs to be created in the same thread as the execution, not here +#endif + cv::moveWindow(newWindow->myWindow, DEFAULT_UI_OFFSET_X + i * 960, DEFAULT_UI_OFFSET_Y); + cv::resizeWindow(newWindow->myWindow, DEFAULT_UI_SIZE_X, DEFAULT_UI_SIZE_Y); + + //cout << "window: " << newWindow->myWindow << " created at " << DEFAULT_UI_OFFSET_X + i * 960 << " , " << DEFAULT_UI_OFFSET_Y << endl; + + newWindow->id = i; + + managedUIs.push_back(newWindow); // add new ui in the ui map, mapped to the window's name + } + uiShouldRun = true; + } + + void WindowManager::cleanup() + { + } +} \ No newline at end of file diff --git a/src/model/windows/windowManager.hpp b/src/model/windows/windowManager.hpp new file mode 100644 index 0000000..d106c2e --- /dev/null +++ b/src/model/windows/windowManager.hpp @@ -0,0 +1,18 @@ +#include "window.hpp" +#include + +#define DEFAULT_UI_WINDOW_AMOUNT 1 //2 windows, one for each eye +#define DEFAULT_UI_OFFSET_X 1080 //1080 +#define DEFAULT_UI_OFFSET_Y 0 +#define DEFAULT_UI_SIZE_X 1920 //psvr is 960x1080 per eye +#define DEFAULT_UI_SIZE_Y 1080 + +/// @brief this class manages the UI(s) [windows] used by the application, right now only one should ever be used, especially in opengl mode +class WindowManager +{ +public: + std::vector managedUIs; + bool uiShouldRun; + WindowManager(); + void cleanup(); +}; \ No newline at end of file diff --git a/src/pipeline/CMakeLists.txt b/src/pipeline/CMakeLists.txt new file mode 100644 index 0000000..7cb28f3 --- /dev/null +++ b/src/pipeline/CMakeLists.txt @@ -0,0 +1,34 @@ +set(ui_source_files + ./abstract/pipelineNode.cpp + ./abstract/pipelineNode.hpp + ./members/cameraPickerNode.cpp + ./members/cameraPickerNode.hpp + ./members/displayOutputNode.cpp + ./members/displayOutputNode.hpp + ./abstract/pipelineNode.cpp + ./abstract/pipelineNode.hpp + ./abstract/pipelineNode.cpp + ./abstract/pipelineNode.hpp +MESSAGE(STATUS "building ui") +SET("OpenCV_DIR" "/usr/local/lib/") + +find_package( OpenCV REQUIRED ) +find_package(OpenGL REQUIRED) +find_package(GLUT REQUIRED) + +include_directories( ${OPENGL_INCLUDE_DIRS} ${GLUT_INCLUDE_DIRS} ) + + +MESSAGE(STATUS "OpenCV_INCLUDE_DIRS : ${OpenCV_INCLUDE_DIRS}") +MESSAGE(STATUS "Opencv_LINK_DIRS : ${Opencv_LINK_DIRS}") + +add_library(ui ${ui_source_files}) + +target_link_libraries(ui ${OPENGL_LIBRARIES}) +#target_link_libraries(ui ${GLUT_INCLUDE_DIRS}) +#target_link_libraries(ui ${OpenCV_LIBS}) +#target_link_libraries(ui psvr) +#target_link_libraries(ui cameras) +#target_link_libraries(ui zbarLib) + +MESSAGE(STATUS "Done building ui") \ No newline at end of file diff --git a/src/pipeline/abstract/pipeline.hpp b/src/pipeline/abstract/pipeline.hpp deleted file mode 100644 index 8bcd543..0000000 --- a/src/pipeline/abstract/pipeline.hpp +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include - -class PipelineMember{ - public: - virtual void run(); - virtual bool isRunning(); - virtual void stop(); - virtual cv::UMat getOutput(); - protected: - std::mutex outputLock; - cv::UMat output; - bool shouldRun; - PipelineMember* previous; -}; \ No newline at end of file diff --git a/src/pipeline/abstract/pipelineNode.cpp b/src/pipeline/abstract/pipelineNode.cpp new file mode 100644 index 0000000..fb16b59 --- /dev/null +++ b/src/pipeline/abstract/pipelineNode.cpp @@ -0,0 +1,44 @@ +#include "pipelineNode.hpp" + +bool PipelineNode::isRunning() +{ + return this->shouldRun; +} + +bool PipelineNode::isDependant(){ + return previous != nullptr; +} + +void PipelineNode::stop() +{ + this->shouldRun = false; +} + +cv::UMat PipelineNode::getOutput() +{ + const std::lock_guard lock(outputLock); + return output; +} + +void PipelineNode::run() +{ + try + { + this->shouldRun = true; + std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now(); + std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); + while (this->shouldRun) + { + begin = std::chrono::steady_clock::now(); + localES.tickBegin(); + this->processFrame(); + localES.tickUpdate(); + end = std::chrono::steady_clock::now(); + std::this_thread::sleep_for(std::chrono::milliseconds((1000 / this->fpsLimit) - std::chrono::duration_cast(end - begin).count())); + } + } + catch (...) + { + exit(1); + } +} \ No newline at end of file diff --git a/src/pipeline/abstract/pipelineNode.hpp b/src/pipeline/abstract/pipelineNode.hpp new file mode 100644 index 0000000..4d5ed37 --- /dev/null +++ b/src/pipeline/abstract/pipelineNode.hpp @@ -0,0 +1,26 @@ +#include +#include +#include +#include +#include +#include "../../model/perfcheckers/framerate.hpp" + +class PipelineNode{ + public: + std::atomic_int fpsLimit = 60; + framerateChecker localES; + cv::UMat getOutput(); + void run(); + bool isRunning(); + bool isDependant(); + void stop(); + virtual ~PipelineNode(); + float cost = 1; + protected: + virtual void processFrame(); + std::mutex outputLock; + cv::UMat output; + std::atomic_bool shouldRun; + std::atomic_bool disabled; + PipelineNode* previous; +}; \ No newline at end of file diff --git a/src/pipeline/members/cameraPickerNode.cpp b/src/pipeline/members/cameraPickerNode.cpp new file mode 100644 index 0000000..96cdf92 --- /dev/null +++ b/src/pipeline/members/cameraPickerNode.cpp @@ -0,0 +1,14 @@ +#include "cameraPickerNode.hpp" + +cameraPickerNode::cameraPickerNode(cameraManager* sourceManager) : _sourceManager(sourceManager) +{ + cost = 0.25; +} + +void cameraPickerNode::processFrame(){ + outputLock.lock(); + _sourceManager->accessLocks[0]->lock(); + output = _sourceManager->captures[0]; + _sourceManager->accessLocks[0]->unlock(); + outputLock.unlock(); +} \ No newline at end of file diff --git a/src/pipeline/members/cameraPickerNode.hpp b/src/pipeline/members/cameraPickerNode.hpp new file mode 100644 index 0000000..3740020 --- /dev/null +++ b/src/pipeline/members/cameraPickerNode.hpp @@ -0,0 +1,11 @@ +#include "../abstract/pipelineNode.hpp" +#include "../../../model/hardware/cameras/_cam.hpp" + +/// @brief this node will pick the right camera UMat from the ones available in its _sourceManager +class cameraPickerNode : public PipelineNode{ + public: + cameraPickerNode(cameraManager* sourceManager); + protected: + virtual void processFrame() override; + cameraManager* _sourceManager; +}; \ No newline at end of file diff --git a/src/pipeline/members/displayOutputNode.cpp b/src/pipeline/members/displayOutputNode.cpp new file mode 100644 index 0000000..5103496 --- /dev/null +++ b/src/pipeline/members/displayOutputNode.cpp @@ -0,0 +1,26 @@ +#include "displayOutputNode.hpp" + +DisplayOutputNode::DisplayOutputNode(PipelineNode* predecessor, Window *managed) : _managed(managed) +{ + previous = predecessor; + output = NULL; + cost = 2; +} + +void DisplayOutputNode::processFrame() +{ + if (!inited) + { +#ifdef OGLWIN + namedWindow(_managed->myWindow, WINDOW_OPENGL); + setWindowProperty(_managed->myWindow, cv::WND_PROP_FULLSCREEN, cv::WINDOW_FULLSCREEN); + cv::setOpenGlContext(_managed->myWindow); + moveWindow(_managed->myWindow, DEFAULT_UI_OFFSET_X + 960, DEFAULT_UI_OFFSET_Y); +#endif + inited = true; + } + _managed->drawAccess.lock(); + _managed->drawSurface = previous->getOutput(); + _managed->drawAccess.unlock(); + _managed->draw(); +} \ No newline at end of file diff --git a/src/pipeline/members/displayOutputNode.hpp b/src/pipeline/members/displayOutputNode.hpp new file mode 100644 index 0000000..e19465b --- /dev/null +++ b/src/pipeline/members/displayOutputNode.hpp @@ -0,0 +1,14 @@ +#include "../abstract/pipelineNode.hpp" +#include "../model/windows/window.hpp" + +/// @brief this node will pick the right camera UMat from the ones available in its _sourceManager +class DisplayOutputNode : public PipelineNode +{ +public: + DisplayOutputNode(PipelineNode* predecessor, Window* managed); + +protected: + virtual void processFrame() override; + bool inited = false; + Window *_managed; +}; \ No newline at end of file diff --git a/src/pipeline/members/uiDrawerNode.cpp b/src/pipeline/members/uiDrawerNode.cpp new file mode 100644 index 0000000..ea5ff31 --- /dev/null +++ b/src/pipeline/members/uiDrawerNode.cpp @@ -0,0 +1,47 @@ +#include "uiDrawerNode.hpp" +#include +#include +#include + +UiDrawerNode::UiDrawerNode() +{ + previous = nullptr; +} + +void UiDrawerNode::processFrame() +{ + try + { + int &wd = _backController->menuSize.width; + int &he = _backController->menuSize.height; + unsigned int stackerIndex = 0; + cv::UMat MenuMat(cv::Size(wd, he), CV_8UC3, cv::Scalar(0, 0, 0)); + cv::rectangle(MenuMat, cv::Rect2i(0, 0, wd, he), cv::Scalar(255, 0, 0), 5, 8, 0); + _backController->update(); + cv::putText(MenuMat, _backController->menuTitle, cv::Point2i(5, stackerIndex += 20), cv::HersheyFonts::FONT_HERSHEY_PLAIN, 1, Scalar(255, 255, 255), 1, 8, false); + for (std::map>::iterator iter = _backController->menuItems.begin(); iter != _backController->menuItems.end(); ++iter) + { + std::string str = iter->first; + cv::putText(MenuMat, str, cv::Point2i(5, stackerIndex += 20), cv::HersheyFonts::FONT_HERSHEY_PLAIN, 1, Scalar(255, 255, 255), 1, 8, false); + } + int mFps, uiFps, Drawfps, camFPS = 0; + mFps = fcheckManager::fcMergeUI.fps; + uiFps = fcheckManager::fcDrawMenu.fps; + Drawfps = fcheckManager::fcShow.fps; + camFPS = fcheckManager::fcCam.fps; + cv::putText(MenuMat, cv::format("Eps Ui drawer: %d", uiFps), cv::Point2i(5, stackerIndex += 20), cv::HersheyFonts::FONT_HERSHEY_PLAIN, 1, Scalar(255, 255, 255), 1, 8, false); + cv::putText(MenuMat, cv::format("Eps Ui merger: %d", mFps), cv::Point2i(5, stackerIndex += 20), cv::HersheyFonts::FONT_HERSHEY_PLAIN, 1, Scalar(255, 255, 255), 1, 8, false); + cv::putText(MenuMat, cv::format("Eps imshow: %d", Drawfps), cv::Point2i(5, stackerIndex += 20), cv::HersheyFonts::FONT_HERSHEY_PLAIN, 1, Scalar(255, 255, 255), 1, 8, false); + cv::putText(MenuMat, cv::format("Eps Camera 0: %d", camFPS), cv::Point2i(5, stackerIndex += 20), cv::HersheyFonts::FONT_HERSHEY_PLAIN, 1, Scalar(255, 255, 255), 1, 8, false); + + cv::rectangle(MenuMat, cv::Rect2i(0, ((20 * _backController->selectedIndex) + 20) + 5, wd, 20), Scalar(200, 0, 0), 3, 8, 0); + outputLock.lock(); + output = MenuMat; + outputLock.unlock(); + } + catch (...) + { + std::cerr << "\033[1;31m caught DrawUi::drawMenu thread exception \033[0m" << std::endl; + exit(1); + } +} \ No newline at end of file diff --git a/src/pipeline/members/uiDrawerNode.hpp b/src/pipeline/members/uiDrawerNode.hpp new file mode 100644 index 0000000..9c238ca --- /dev/null +++ b/src/pipeline/members/uiDrawerNode.hpp @@ -0,0 +1,10 @@ +#include "../abstract/pipelineNode.hpp" +#include "../../model/controllers/ui/uiController.hpp" + +class UiDrawerNode : public PipelineNode{ + public: + UiDrawerNode(); + protected: + virtual void processFrame() override; + UiController* _backController; +}; \ No newline at end of file diff --git a/src/pipeline/members/uiMergerNode.cpp b/src/pipeline/members/uiMergerNode.cpp new file mode 100644 index 0000000..cabf7e2 --- /dev/null +++ b/src/pipeline/members/uiMergerNode.cpp @@ -0,0 +1,29 @@ +#include "uiMergerNode.hpp" +#include "../../ui/support/UiSupport.hpp" + +UiMergerNode::UiMergerNode(PipelineNode* _previous,PipelineNode* menuDrawer, UiController* backController) : _menuDrawer(menuDrawer), _backController(backController) +{ + previous = _previous; +} + +void UiMergerNode::processFrame() +{ + cv::UMat UiMat = UiSupport::prepareUiMat(); // prepare black background 960*1080 + cv::UMat cameraFrame = previous->getOutput(); + + if (cameraFrame.rows <= 0 || cameraFrame.cols <= 0) + return; // check for empty frame + cameraFrame = UiSupport::resizeIn(cameraFrame); // resize the frame to the standard format + // Copy the frame in the center of the background + cameraFrame.copyTo(UiMat(cv::Rect((UiMat.cols / 2) - (cameraFrame.cols / 2), (UiMat.rows / 2) - (cameraFrame.rows / 2), cameraFrame.cols, cameraFrame.rows))); + if (_backController->showMenu) + { + // UiMat = OverlayBlackMask(UiMat, OsMat, ui::UiController::menuPos.x,ui::UiController::menuPos.y); //add the OS ui overlay + UiMat = UiSupport::OverlayBlackMask(UiMat, _menuDrawer->getOutput()); + } + cv::UMat finished = UiSupport::makeMatStereo(UiMat); + + outputLock.lock(); + output = finished; // write the final image to the psvr UI buffer + outputLock.unlock(); +} \ No newline at end of file diff --git a/src/pipeline/members/uiMergerNode.hpp b/src/pipeline/members/uiMergerNode.hpp new file mode 100644 index 0000000..e36a172 --- /dev/null +++ b/src/pipeline/members/uiMergerNode.hpp @@ -0,0 +1,12 @@ +#include "../abstract/pipelineNode.hpp" +#include "../../model/controllers/ui/uiController.hpp" +/// @brief this class is used to merge the camera's frame and the UI mat +class UiMergerNode : public PipelineNode +{ +public: + UiMergerNode(PipelineNode* previous,PipelineNode* menuDrawer, UiController* backController); +protected: + virtual void processFrame() override; + PipelineNode* _menuDrawer; + UiController* _backController; +}; \ No newline at end of file diff --git a/src/pipeline/pipeline.cpp b/src/pipeline/pipeline.cpp new file mode 100644 index 0000000..91dab6f --- /dev/null +++ b/src/pipeline/pipeline.cpp @@ -0,0 +1,13 @@ +#include "pipeline.hpp" +#include "../../model/windows/windowManager.hpp" + +Pipeline::Pipeline(){ + WindowManager* wm = new WindowManager(); + cameraManager* cm = new cameraManager(); + UiController* uc = new UiController(); + + nodes.push_back(new cameraPickerNode(cm)); + nodes.push_back(new UiDrawerNode()); + nodes.push_back(new UiMergerNode(nodes.at(0),nodes.at(1),uc)); + nodes.push_back(new DisplayOutputNode(nodes.at(2), wm->managedUIs.at(0))); +} \ No newline at end of file diff --git a/src/pipeline/pipeline.hpp b/src/pipeline/pipeline.hpp new file mode 100644 index 0000000..308a70c --- /dev/null +++ b/src/pipeline/pipeline.hpp @@ -0,0 +1,12 @@ +#include "./abstract/pipelineNode.hpp" +#include "./members/cameraPickerNode.hpp" +#include "./members/displayOutputNode.hpp" +#include "./members/uiDrawerNode.hpp" +#include "./members/uiMergerNode.hpp" + +class Pipeline{ + private: + std::vector nodes; + public: + Pipeline(); +}; \ No newline at end of file diff --git a/src/threadweaver/debugging.hpp b/src/threadweaver/debugging.hpp index 65c007d..c36e857 100644 --- a/src/threadweaver/debugging.hpp +++ b/src/threadweaver/debugging.hpp @@ -1,6 +1,6 @@ #include #include -#include "../perfcheckers/framerate.hpp" +#include "../model/perfcheckers/framerate.hpp" //#define DBGMODE #define DBGCOMM diff --git a/src/threadweaver/threadweaver.cpp b/src/threadweaver/threadweaver.cpp index b7543a2..89c9b9f 100644 --- a/src/threadweaver/threadweaver.cpp +++ b/src/threadweaver/threadweaver.cpp @@ -14,4 +14,9 @@ void Threadweaver::stick_this_thread_to_core(std::thread* t,int core_id){ CPU_SET(core_id, &cpuset); int rc = pthread_setaffinity_np(t->native_handle(),sizeof(cpu_set_t), &cpuset); std::cout << "set thread to core " << core_id << " successfully" << std::endl; +} + +int Threadweaver::getCoreCount(){ + unsigned num_cpus = std::thread::hardware_concurrency(); + return num_cpus; } \ No newline at end of file diff --git a/src/threadweaver/threadweaver.hpp b/src/threadweaver/threadweaver.hpp index 9ff16f8..0554098 100644 --- a/src/threadweaver/threadweaver.hpp +++ b/src/threadweaver/threadweaver.hpp @@ -15,4 +15,5 @@ class Threadweaver{ static std::thread* osUiDrawerThread; static void stick_this_thread_to_core(std::thread* t,int core_id); + static int getCoreCount(); }; \ No newline at end of file diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt index e0da1c1..8d3e883 100644 --- a/src/ui/CMakeLists.txt +++ b/src/ui/CMakeLists.txt @@ -1,14 +1,6 @@ set(ui_source_files ./support/UiSupport.cpp - ./uiElements/uiElements.cpp - ./uiElements/uiElements.hpp - ./uiElements/ui.cpp - ./drawer/uiDrawer.cpp - ./merger/uiMerger.cpp - ./controllers/uiController.cpp - ./controllers/uiManager.cpp - _ui.hpp -) + ./support/UiSupport.hpp MESSAGE(STATUS "building ui") SET("OpenCV_DIR" "/usr/local/lib/") @@ -25,10 +17,10 @@ MESSAGE(STATUS "Opencv_LINK_DIRS : ${Opencv_LINK_DIRS}") add_library(ui ${ui_source_files}) target_link_libraries(ui ${OPENGL_LIBRARIES}) -target_link_libraries(ui ${GLUT_INCLUDE_DIRS}) -target_link_libraries(ui ${OpenCV_LIBS}) -target_link_libraries(ui psvr) -target_link_libraries(ui cameras) -target_link_libraries(ui zbarLib) +#target_link_libraries(ui ${GLUT_INCLUDE_DIRS}) +#target_link_libraries(ui ${OpenCV_LIBS}) +#target_link_libraries(ui psvr) +#target_link_libraries(ui cameras) +#target_link_libraries(ui zbarLib) MESSAGE(STATUS "Done building ui") \ No newline at end of file diff --git a/src/ui/_ui.hpp b/src/ui/_ui.hpp deleted file mode 100644 index a51716c..0000000 --- a/src/ui/_ui.hpp +++ /dev/null @@ -1,98 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include - -#include "../hardware/cameras/_cam.hpp" -#include "../hardware/psvr/_psvr.hpp" -#include -#include -#include - -#define DEFAULT_UI_WINDOW_AMOUNT 1 //2 windows, one for each eye -#define DEFAULT_UI_OFFSET_X 1080 //1080 -#define DEFAULT_UI_OFFSET_Y 0 -#define DEFAULT_UI_SIZE_X 1920 //psvr is 960x1080 per eye -#define DEFAULT_UI_SIZE_Y 1080 - -int runtest(); - -using namespace std; -using namespace cv; -using namespace cv::ogl; -using namespace psvr; - -namespace ui { - /// @brief this class represents a single window, there should only ever be one if the app is in opengl mode. - class Ui{ - public: - UMat drawSurface; //Current frame - cv::ogl::Texture2D drawTexture = Texture2D(); - int id; - std::string myWindow; - void draw(); - }; - class UiSupport{ - public: - static UMat makeMatStereo(UMat toStereo); - static UMat prepareUiMat(); - static UMat resizeIn(UMat input); - static UMat OverlayBlackMask(UMat input, UMat toOverlay, int x = 0, int y = 0); - }; - /// @brief this class is used to draw the UI from the UiController's current state - class UiDrawer{ - public: - static void drawStartupSequence(); - static void drawMenu(); - static void runDrawMenu(); - static UMat output; - static std::mutex outputLock; - static framerateChecker* fpsCounter; - private: - static void drawUi(); - }; - /// @brief this class is used to merge the camera's frame and the UI mat - class UiMerger{ - public: - static void runMerge(); - static UMat output; - static std::mutex outputLock; - private: - static void mergeUI(); - }; - /// @brief this class manages the UI(s) [windows] used by the application, right now only one should ever be used, especially in opengl mode - class UiManager{ - public: - static vector accessLocks; - static vector managedUIs; - static bool uiShouldRun; - static void init(); - static void cleanup(); - static void beginDrawRoutineForUi(Ui* u); - }; - /// @brief this class is used to process view logic and interaction [model] - class UiController{ - public: - static void init(); - static void selectedUp(); - static void selectedDown(); - static void click(); - static void update(); - static void openSettings(); - static vector menuItemNames; - static bool showMenu; - static bool exitCalled; - static bool runIntro; - static string menuTitle; - static cv::Size2i menuSize; - static cv::Point2i menuPos; - static unsigned int selectedIndex; - static map> menuItems; - static char* menutime; - }; - -} diff --git a/src/ui/controllers/uiController.cpp b/src/ui/controllers/uiController.cpp deleted file mode 100644 index c483948..0000000 --- a/src/ui/controllers/uiController.cpp +++ /dev/null @@ -1,52 +0,0 @@ -#include "../_ui.hpp" - -bool ui::UiController::showMenu; -bool ui::UiController::exitCalled; -bool ui::UiController::runIntro; -cv::Size2i ui::UiController::menuSize; -cv::Point2i ui::UiController::menuPos; -unsigned int ui::UiController::selectedIndex; -map> ui::UiController::menuItems; -string ui::UiController::menuTitle; -char* ui::UiController::menutime; -vector ui::UiController::menuItemNames = {"set vr mode","set cinema mode","settings"}; - -void ui::UiController::init(){ - std::cout << "init ui controller" << endl; - showMenu = true; - menuSize = cv::Size2i(400,400); - menuPos = cv::Point2i(DEFAULT_UI_SIZE_X-menuSize.width,(DEFAULT_UI_SIZE_Y/2)-(menuSize.height/2)); //centered right - selectedIndex = 0; - menuItemNames = {"set vr mode","set cinema mode","settings"}; - vector> functions = {psvr::Psvr::vrmode, psvr::Psvr::cinemaMode, UiController::openSettings}; - unsigned int i = 0; - for(std::string name : menuItemNames){ - menuItems[name] = functions.at(i); - i++; - } - update(); - cout << "done init ui controller" << endl; -} - -void ui::UiController::update(){ - time_t now = time(0); - menutime = ctime(&now); - menuTitle = std::string("P-OS ") + VERSION + " " + menutime; -} - -void ui::UiController::selectedUp(){ - if(selectedIndex < menuItems.size()-1) selectedIndex++; -} - -void ui::UiController::selectedDown(){ - if(selectedIndex > 0) selectedIndex--; -} - -void ui::UiController::openSettings(){ - -} - -void ui::UiController::click(){ - ui::UiController::exitCalled = true; - //std::invoke(menuItems[menuItemNames.at(selectedIndex)]); -} diff --git a/src/ui/controllers/uiManager.cpp b/src/ui/controllers/uiManager.cpp deleted file mode 100644 index f4322dd..0000000 --- a/src/ui/controllers/uiManager.cpp +++ /dev/null @@ -1,88 +0,0 @@ -#include "../_ui.hpp" - -namespace ui{ - vector UiManager::managedUIs; - vector UiManager::accessLocks; - bool UiManager::uiShouldRun; - - void UiManager::beginDrawRoutineForUi(Ui* u){ - #ifdef OGLWIN - namedWindow(u->myWindow,WINDOW_OPENGL); - setWindowProperty(u->myWindow, cv::WND_PROP_FULLSCREEN, cv::WINDOW_FULLSCREEN); - cv::setOpenGlContext(u->myWindow); - moveWindow(u->myWindow,DEFAULT_UI_OFFSET_X+960,DEFAULT_UI_OFFSET_Y); - resizeWindow(u->myWindow,DEFAULT_UI_SIZE_X,DEFAULT_UI_SIZE_Y); - ui::UiDrawer::drawStartupSequence(); - #else - ui::UiDrawer::drawStartupSequence(); - #endif - std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now(); - std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); - while(!ui::UiManager::uiShouldRun){} - while(ui::UiManager::uiShouldRun){ - begin = std::chrono::steady_clock::now(); - u->draw(); - end = std::chrono::steady_clock::now(); - std::this_thread::sleep_for (std::chrono::milliseconds((1000/FPS_LIMIT_DISPLAY)-std::chrono::duration_cast(end-begin).count())); - - } - } - - void on_opengl(void* param) -{ - glLoadIdentity(); - glTranslated(0.0, 0.0, -1.0); - glRotatef( 55, 1, 0, 0 ); - glRotatef( 45, 0, 1, 0 ); - glRotatef( 0, 0, 0, 1 ); - static const int coords[6][4][3] = { - { { +1, -1, -1 }, { -1, -1, -1 }, { -1, +1, -1 }, { +1, +1, -1 } }, - { { +1, +1, -1 }, { -1, +1, -1 }, { -1, +1, +1 }, { +1, +1, +1 } }, - { { +1, -1, +1 }, { +1, -1, -1 }, { +1, +1, -1 }, { +1, +1, +1 } }, - { { -1, -1, -1 }, { -1, -1, +1 }, { -1, +1, +1 }, { -1, +1, -1 } }, - { { +1, -1, +1 }, { -1, -1, +1 }, { -1, -1, -1 }, { +1, -1, -1 } }, - { { -1, -1, +1 }, { +1, -1, +1 }, { +1, +1, +1 }, { -1, +1, +1 } } - }; - for (int i = 0; i < 6; ++i) { - glColor3ub( i*20, 100+i*10, i*42 ); - glBegin(GL_QUADS); - for (int j = 0; j < 4; ++j) { - glVertex3d(0.2 * coords[i][j][0], 0.2 * coords[i][j][1], 0.2 * coords[i][j][2]); - } - glEnd(); - } -} - - //initializes the ui manager, following default values - void UiManager::init(){ - uiShouldRun = false; - waitKey(1); - for(int i=0; imyWindow = "project- UI"+std::to_string(i); - #ifndef OGLWIN - DEBUG_LOG("created cpu-based window") - namedWindow(newUI->myWindow); - #endif - moveWindow(newUI->myWindow,DEFAULT_UI_OFFSET_X+i*960,DEFAULT_UI_OFFSET_Y); - resizeWindow(newUI->myWindow,DEFAULT_UI_SIZE_X,DEFAULT_UI_SIZE_Y); - - cout << "window: " << newUI->myWindow << " created at " << DEFAULT_UI_OFFSET_X+i*960 << " , " << DEFAULT_UI_OFFSET_Y << endl; - - newUI->id = i; - - managedUIs.push_back(newUI); //add new ui in the ui map, mapped to the window's name - accessLocks.push_back(new mutex()); - accessLocks.at(i)->unlock(); - std::thread* t = new std::thread(ui::UiManager::beginDrawRoutineForUi,newUI); - Threadweaver::stick_this_thread_to_core(t,DISPLAYCORE); - Threadweaver::osUiDrawerThread = t; - } - uiShouldRun = true; - } - - void UiManager::cleanup(){ - - } -} \ No newline at end of file diff --git a/src/ui/drawer/uiDrawer.cpp b/src/ui/drawer/uiDrawer.cpp deleted file mode 100644 index 4735e3f..0000000 --- a/src/ui/drawer/uiDrawer.cpp +++ /dev/null @@ -1,89 +0,0 @@ -#include "../_ui.hpp" -UMat ui::UiDrawer::output; -std::mutex ui::UiDrawer::outputLock; -framerateChecker* ui::UiDrawer::fpsCounter = new framerateChecker(); - -namespace ui{ - - void UiDrawer::drawStartupSequence(){ - cout << "opening external ressources" << endl; - VideoCapture cap("./media/hud_startup.gif"); - cout << "opened video"<< endl; - if(!cap.isOpened()){ - cout << "failed to open hud start media" << endl; - return; - } - UMat frame; - UMat finished; - #ifdef OGLWIN - cv::ogl::Texture2D frameOGL = Texture2D(); - #endif - while(cap.read(frame)) - { - finished = UiSupport::makeMatStereo(frame); - #ifdef OGLWIN - frameOGL.copyFrom(finished); - cv::imshow(ui::UiManager::managedUIs.at(0)->myWindow, frameOGL); - #else - cv::imshow(ui::UiManager::managedUIs.at(0)->myWindow, finished); - #endif - if(waitKey(30) >= 0) break; - } - cap.release(); - } - - void UiDrawer::drawMenu(){ - try{ - fcheckManager::fcDrawMenu.tickBegin(); - int& wd = UiController::menuSize.width; - int& he = UiController::menuSize.height; - unsigned int stackerIndex = 0; - UMat MenuMat(cv::Size(wd, he), CV_8UC3,Scalar(0,0,0)); - cv::rectangle(MenuMat, cv::Rect2i(0,0,wd, he), Scalar(255,0,0), 5, 8, 0); - ui::UiController::update(); - cv::putText(MenuMat, UiController::menuTitle, Point2i(5,stackerIndex+=20), HersheyFonts::FONT_HERSHEY_PLAIN, 1, Scalar(255,255,255), 1, 8, false); - for(std::map>::iterator iter = UiController::menuItems.begin(); iter != UiController::menuItems.end(); ++iter) - { - std::string str = iter->first; - cv::putText(MenuMat, str, Point2i(5,stackerIndex+=20), HersheyFonts::FONT_HERSHEY_PLAIN, 1, Scalar(255,255,255), 1, 8, false); - } - int mFps,uiFps,Drawfps,camFPS = 0; - mFps = fcheckManager::fcMergeUI.fps; - uiFps = fcheckManager::fcDrawMenu.fps; - Drawfps = fcheckManager::fcShow.fps; - camFPS = fcheckManager::fcCam.fps; - cv::putText(MenuMat, cv::format("Eps Ui drawer: %d", uiFps), Point2i(5,stackerIndex+=20), HersheyFonts::FONT_HERSHEY_PLAIN, 1, Scalar(255,255,255), 1, 8, false); - cv::putText(MenuMat, cv::format("Eps Ui merger: %d", mFps), Point2i(5,stackerIndex+=20), HersheyFonts::FONT_HERSHEY_PLAIN, 1, Scalar(255,255,255), 1, 8, false); - cv::putText(MenuMat, cv::format("Eps imshow: %d", Drawfps), Point2i(5,stackerIndex+=20), HersheyFonts::FONT_HERSHEY_PLAIN, 1, Scalar(255,255,255), 1, 8, false); - cv::putText(MenuMat, cv::format("Eps Camera 0: %d", camFPS), Point2i(5,stackerIndex+=20), HersheyFonts::FONT_HERSHEY_PLAIN, 1, Scalar(255,255,255), 1, 8, false); - - cv::rectangle(MenuMat, cv::Rect2i(0,((20*ui::UiController::selectedIndex)+20)+5,wd, 20), Scalar(200,0,0), 3, 8, 0); - outputLock.lock(); - output = MenuMat; - outputLock.unlock(); - } catch(...){ - cerr << "\033[1;31m caught DrawUi::drawMenu thread exception \033[0m" << endl; - exit(1); - } - fcheckManager::fcDrawMenu.tickUpdate(); - } - - void UiDrawer::runDrawMenu(){ - try{ - cout << "starting ui drawer thread" << endl; - ui::UiController::exitCalled = false; - std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now(); - std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); - while(true){ - DEBUG_LOG("drawing"); - begin = std::chrono::steady_clock::now(); - ui::UiDrawer::drawMenu(); - end = std::chrono::steady_clock::now(); - std::this_thread::sleep_for (std::chrono::milliseconds((1000/FPS_LIMIT_DRAW)-std::chrono::duration_cast(end-begin).count())); - } - } catch(...){ - cerr << "\033[1;31m caught DrawUi thread exception \033[0m" << endl; - exit(1); - } - } -} diff --git a/src/ui/merger/uiMerger.cpp b/src/ui/merger/uiMerger.cpp deleted file mode 100644 index 775d033..0000000 --- a/src/ui/merger/uiMerger.cpp +++ /dev/null @@ -1,65 +0,0 @@ -#include "../_ui.hpp" - -UMat ui::UiMerger::output; -std::mutex ui::UiMerger::outputLock; - -namespace ui -{ - void UiMerger::runMerge() - { - try - { - cout << "starting ui merger thread" << endl; - ui::UiController::exitCalled = false; - std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now(); - std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); - while (true) - { - begin = std::chrono::steady_clock::now(); - DEBUG_LOG("drawing"); - ui::UiMerger::mergeUI(); - end = std::chrono::steady_clock::now(); - std::this_thread::sleep_for (std::chrono::milliseconds((1000/FPS_LIMIT_MERGE)-std::chrono::duration_cast(end-begin).count())); - } - } - catch (...) - { - cerr << "\033[1;31m caught mergeUI thread exception \033[0m" << endl; - exit(1); - } - } - - void UiMerger::mergeUI() - { - DEBUG_LOG("\nBegan new pipeline cycle-------------------------------") - fcheckManager::fcMergeUI.tickBegin(); - UMat UiMat = UiSupport::prepareUiMat(); // prepare black background 960*1080 - DEBUG_LOG("prepared UI mat") - cameraManager::accessLocks[0]->lock(); // lock the capture access - UMat cameraFrame = cameraManager::captures[0]; // retreive latest camera frame - cameraManager::accessLocks[0]->unlock(); // unlock capture access - DEBUG_LOG("retreived camera frame") - if (cameraFrame.rows <= 0 || cameraFrame.cols <= 0) - return; // check for empty frame - cameraFrame = UiSupport::resizeIn(cameraFrame); // resize the frame to the standard format - DEBUG_LOG("resized camera frame") - // Copy the frame in the center of the background - cameraFrame.copyTo(UiMat(cv::Rect((UiMat.cols / 2) - (cameraFrame.cols / 2), (UiMat.rows / 2) - (cameraFrame.rows / 2), cameraFrame.cols, cameraFrame.rows))); - DEBUG_LOG("copied camera frame") - if (UiController::showMenu) - { - UiDrawer::outputLock.lock(); - // UiMat = OverlayBlackMask(UiMat, OsMat, ui::UiController::menuPos.x,ui::UiController::menuPos.y); //add the OS ui overlay - UiMat = UiSupport::OverlayBlackMask(UiMat, UiDrawer::output); - UiDrawer::outputLock.unlock(); - } - DEBUG_LOG("drawn menu") - UMat finished = UiSupport::makeMatStereo(UiMat); - DEBUG_LOG("concated mats") - - UiManager::accessLocks.at(0)->lock(); - UiManager::managedUIs[0]->drawSurface = finished; // write the final image to the psvr UI buffer - UiManager::accessLocks.at(0)->unlock(); - fcheckManager::fcMergeUI.tickUpdate(); - } -} \ No newline at end of file diff --git a/src/ui/support/UiSupport.cpp b/src/ui/support/UiSupport.cpp index 1fcfd3e..c525343 100644 --- a/src/ui/support/UiSupport.cpp +++ b/src/ui/support/UiSupport.cpp @@ -1,41 +1,41 @@ -#include "../_ui.hpp" +#include "UiSupport.hpp" namespace ui{ - UMat UiSupport::makeMatStereo(UMat toStereo){ - UMat toreturn; - vector mats{toStereo,toStereo}; + cv::UMat UiSupport::makeMatStereo(cv::UMat toStereo){ + cv::UMat toreturn; + std::vector mats{toStereo,toStereo}; cv::hconcat(mats,toreturn); return toreturn; } - UMat UiSupport::prepareUiMat(){ - return UMat(cv::Size(960, 1080), CV_8UC3,Scalar(0,0,0)); + cv::UMat UiSupport::prepareUiMat(){ + return cv::UMat(cv::Size(960, 1080), CV_8UC3,cv::Scalar(0,0,0)); } - UMat UiSupport::resizeIn(UMat input){ - UMat output; - resize(input, output, Size(960, 1080), InterpolationFlags::INTER_NEAREST); + cv::UMat UiSupport::resizeIn(cv::UMat input){ + cv::UMat output; + cv::resize(input, output, cv::Size(960, 1080), cv::InterpolationFlags::INTER_NEAREST); return output; } ///if a non transparent picture is supplied (3 channels), it will be made transparent by using black as a mask - UMat UiSupport::OverlayBlackMask(UMat input, UMat toOverlay, int x, int y){ + cv::UMat UiSupport::OverlayBlackMask(cv::UMat input, cv::UMat toOverlay, int x, int y){ //return input; if(input.cols < toOverlay.cols || input.rows < toOverlay.rows){ - cerr << "Wrong size for inout file!!! overlay was bigger" << endl; + std::cerr << "Wrong size for inout file!!! overlay was bigger" << std::endl; return input; } - UMat toOverlayGRAY, mask; - vector Bands; + cv::UMat toOverlayGRAY, mask; + std::vector Bands; if(toOverlay.channels() == 3){ //non transparent image, use black as mask - cvtColor(toOverlay,toOverlayGRAY, COLOR_BGR2GRAY); //picture to greyscale - threshold(toOverlayGRAY, mask, 0, 255, THRESH_BINARY); //greyscale to alpha (black or not) + cvtColor(toOverlay,toOverlayGRAY, cv::COLOR_BGR2GRAY); //picture to greyscale + threshold(toOverlayGRAY, mask, 0, 255, cv::THRESH_BINARY); //greyscale to alpha (black or not) } else if (toOverlay.channels() == 4){ //transparent, use alpha layer as mask split(toOverlay,Bands); // seperate channels - vector channels{ Bands[0],Bands[1],Bands[2] }; + std::vector channels{ Bands[0],Bands[1],Bands[2] }; merge(channels,toOverlay); // glue together again mask = Bands[3]; // png's alpha channel used as mask } diff --git a/src/ui/support/UiSupport.hpp b/src/ui/support/UiSupport.hpp new file mode 100644 index 0000000..6cd55b1 --- /dev/null +++ b/src/ui/support/UiSupport.hpp @@ -0,0 +1,14 @@ +#include +#include +#include +#include +#include + +class UiSupport +{ +public: + static cv::UMat makeMatStereo(cv::UMat toStereo); + static cv::UMat prepareUiMat(); + static cv::UMat resizeIn(cv::UMat input); + static cv::UMat OverlayBlackMask(cv::UMat input, cv::UMat toOverlay, int x = 0, int y = 0); +}; \ No newline at end of file diff --git a/src/ui/uiElements/ui.cpp b/src/ui/uiElements/ui.cpp deleted file mode 100644 index e945c0e..0000000 --- a/src/ui/uiElements/ui.cpp +++ /dev/null @@ -1,30 +0,0 @@ -#include "../_ui.hpp" - -void ui::Ui::draw(){ - try{ - DEBUG_LOG("\nBegin drawing--------------") - fcheckManager::fcShow.tickBegin(); - UiManager::accessLocks.at(this->id)->lock(); - if(drawSurface.empty()){ - UiManager::accessLocks.at(this->id)->unlock(); - return; - } - UMat drawBuffer = drawSurface; - UiManager::accessLocks.at(this->id)->unlock(); - DEBUG_LOG("Buffer retreived") - #ifdef OGLWIN - drawTexture.copyFrom(drawBuffer); - imshow(this->myWindow, this->drawTexture); - #else - imshow(this->myWindow, drawBuffer); - #endif - - waitKey(10); - fcheckManager::fcShow.tickUpdate(); - DEBUG_LOG("Done draw cycle-----------------") - } - catch(...){ - cerr << "exception caught in ui::draw" << endl; - UiManager::accessLocks.at(this->id)->unlock(); - } -} \ No newline at end of file diff --git a/src/ui/uiElements/uiElements.cpp b/src/ui/uiElements/uiElements.cpp deleted file mode 100644 index 8978c0a..0000000 --- a/src/ui/uiElements/uiElements.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "./uiElements.hpp" \ No newline at end of file diff --git a/src/ui/uiElements/uiElements.hpp b/src/ui/uiElements/uiElements.hpp deleted file mode 100644 index 6a9b2d5..0000000 --- a/src/ui/uiElements/uiElements.hpp +++ /dev/null @@ -1,12 +0,0 @@ -#include -#include -#include -#include - -using namespace cv; - -class Widget{ - public: - int x,y,width,height = 0; - UMat output; -}; \ No newline at end of file