diff --git a/CMakeLists.txt b/CMakeLists.txt index 9f5c2c1..7c64b5c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,13 +1,12 @@ cmake_minimum_required(VERSION 3.10) project(Cluster LANGUAGES CXX) -message("CMAKE_SYSROOT " ${CMAKE_SYSROOT}) -message("CMAKE_LIBRARY_ARCHITECTURE " ${CMAKE_LIBRARY_ARCHITECTURE}) + set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) - set(zenohc_DIR "/usr/local/lib/cmake/zenohc") set(zenohcxx_DIR "/usr/local/lib/cmake/zenohcxx") + find_package(Qt6 COMPONENTS Core Quick DBus REQUIRED) find_package(zenohc REQUIRED) find_package(zenohcxx REQUIRED) @@ -21,17 +20,11 @@ set(CMAKE_AUTORCC ON) qt_add_resources(QT_RESOURCES ./ui/resources.qrc) # Define Executable Target -add_executable(speedometer - ${QT_RESOURCES} # Add Resource File - ./src/main.cpp # Main C++ File - ./src/CANBusHandler.cpp # CANBusHandler Implementation - ./include/CANBusHandler.hpp # CANBusHandler Header -) - -target_link_libraries(speedometer zenohcxx::zenohc -lm -ldl Qt6::Core Qt6::DBus Qt6::Quick) - -add_executable(zenoh - ./middelWare/src/main.cpp +add_executable(InstrumentCluster + ${QT_RESOURCES} + ./src/main.cpp + ./src/InstrumentCluster.cpp + ./include/InstrumentCluster.hpp ) -target_link_libraries(zenoh PRIVATE zenohcxx::zenohc) +target_link_libraries(InstrumentCluster zenohcxx::zenohc -lm -ldl Qt6::Core Qt6::DBus Qt6::Quick) diff --git a/MiddleWare/CMakeLists.txt b/MiddleWare/CMakeLists.txt new file mode 100644 index 0000000..c1de850 --- /dev/null +++ b/MiddleWare/CMakeLists.txt @@ -0,0 +1,17 @@ +cmake_minimum_required(VERSION 3.10) + +project(Middelware LANGUAGES CXX) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(zenohc_DIR "/usr/local/lib/cmake/zenohc") +set(zenohcxx_DIR "/usr/local/lib/cmake/zenohcxx") + +find_package(zenohc REQUIRED) +find_package(zenohcxx REQUIRED) + +add_executable(middleWare + ./src/main.cpp +) + +target_link_libraries(middleWare PRIVATE zenohcxx::zenohc) diff --git a/middelWare/src/main.cpp b/MiddleWare/src/main.cpp similarity index 100% rename from middelWare/src/main.cpp rename to MiddleWare/src/main.cpp diff --git a/include/CANBusHandler.hpp b/include/CANBusHandler.hpp deleted file mode 100644 index 041e97e..0000000 --- a/include/CANBusHandler.hpp +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef CANBUSHANDLER_HPP -#define CANBUSHANDLER_HPP - -#include -#include -#include "zenoh.hxx" - -using namespace zenoh; - -class CANBusHandler : public QObject -{ - Q_OBJECT - Q_PROPERTY(int speed READ getSpeed NOTIFY speedChanged) - Q_PROPERTY(int battery READ getBattery NOTIFY batteryChanged) - - public: - explicit CANBusHandler(Session& session, QObject* parent = nullptr); - ~CANBusHandler(); - - int getSpeed() const; - int getBattery() const; - void setSpeed(int speed); - void setBattery(int battery); - - signals: - void speedChanged(int speed); - void batteryChanged(int battery); - - private: - int m_speed; - int m_battery; - Session& m_session; -}; - -#endif // CANBUSHANDLER_HPP diff --git a/include/InstrumentCluster.hpp b/include/InstrumentCluster.hpp new file mode 100644 index 0000000..9d8590e --- /dev/null +++ b/include/InstrumentCluster.hpp @@ -0,0 +1,97 @@ +#ifndef INSTRUMENTCLUSTER_HPP +#define INSTRUMENTCLUSTER_HPP + +#include +#include +#include "zenoh.hxx" + +using namespace zenoh; + +class InstrumentCluster : public QObject +{ + Q_OBJECT + Q_PROPERTY(int speed READ getSpeed NOTIFY speedChanged) + Q_PROPERTY(int battery READ getBattery NOTIFY batteryChanged) + Q_PROPERTY( + bool rightBlinker READ getRightBlinker NOTIFY rightBlinkerChanged) + Q_PROPERTY(bool leftBlinker READ getLeftBlinker NOTIFY leftBlinkerChanged) + Q_PROPERTY(bool lowBeam READ getLowBeam NOTIFY lowBeamChanged) + Q_PROPERTY(bool highBeam READ getHighBeam NOTIFY highBeamChanged) + Q_PROPERTY( + bool frontFogLight READ getFrontFogLight NOTIFY frontFogLightChanged) + Q_PROPERTY( + bool readFogLight READ getRearFogLight NOTIFY rearFogLightChanged) + Q_PROPERTY(bool hazardLight READ getHazardLight NOTIFY hazardLightChanged) + Q_PROPERTY( + bool parkingLight READ getParkingLight NOTIFY parkingLightChanged) + Q_PROPERTY(GearPosition gear READ getGear NOTIFY gearChanged) + + public: + enum class GearPosition + { + PARK, + REVERSE, + NEUTRAL, + DRIVE + }; + + Q_ENUM(GearPosition) + + private: + int m_speed; + int m_battery; + bool m_rightBlinker; + bool m_leftBlinker; + bool m_lowBeam; + bool m_highBeam; + bool m_frontFogLight; + bool m_rearFogLight; + bool m_hazardLight; + bool m_parkingLight; + GearPosition m_gear; + + Session& m_session; + + public: + explicit InstrumentCluster(Session& session, QObject* parent = nullptr); + ~InstrumentCluster(); + + int getSpeed() const; + int getBattery() const; + bool getRightBlinker() const; + bool getLeftBlinker() const; + bool getLowBeam() const; + bool getHighBeam() const; + bool getFrontFogLight() const; + bool getRearFogLight() const; + bool getHazardLight() const; + bool getParkingLight() const; + GearPosition getGear() const; + + void setSpeed(int speed); + void setBattery(int battery); + void setRightBlinker(bool rightBlinker); + void setLeftBlinker(bool leftBlinker); + void setLowBeam(bool lowBeam); + void setHighBeam(bool highBeam); + void setFrontFogLight(bool frontFogLight); + void setRearFogLight(bool readFogLight); + void setHazardLight(bool hazardLight); + void setParkingLight(bool parkingLight); + void setGear(GearPosition gear); + + signals: + void speedChanged(int speed); + void batteryChanged(int battery); + void rightBlinkerChanged(bool rightBlinker); + void leftBlinkerChanged(bool leftBlinker); + void lowBeamChanged(bool lowBeam); + void highBeamChanged(bool highBeam); + void frontFogLightChanged(bool frontFogLight); + void rearFogLightChanged(bool readFogLight); + void hazardLightChanged(bool hazardLight); + void parkingLightChanged(bool parkingLight); + void gearChanged(GearPosition gear); +}; + +#endif // INSTRUMENTCLUSTER_HPP diff --git a/src/CANBusHandler.cpp b/src/CANBusHandler.cpp deleted file mode 100644 index 362386a..0000000 --- a/src/CANBusHandler.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include "../include/CANBusHandler.hpp" - -CANBusHandler::CANBusHandler(Session& session, QObject* parent) - : QObject(parent), m_speed(0), m_battery(0), m_session(session) -{ -} - -CANBusHandler::~CANBusHandler() -{ - m_session.close(); -} - -int CANBusHandler::getSpeed() const -{ - return m_speed; -} - -int CANBusHandler::getBattery() const -{ - return m_battery; -} - -void CANBusHandler::setSpeed(int speed) -{ - if (m_speed != speed) - { - m_speed = speed; - emit speedChanged(m_speed); - } -} - -void CANBusHandler::setBattery(int battery) -{ - if (m_battery != battery) - emit batteryChanged(m_battery); - { - m_battery = battery; - } -} diff --git a/src/InstrumentCluster.cpp b/src/InstrumentCluster.cpp new file mode 100644 index 0000000..d8c0f11 --- /dev/null +++ b/src/InstrumentCluster.cpp @@ -0,0 +1,168 @@ +#include "../include/InstrumentCluster.hpp" + +InstrumentCluster::InstrumentCluster(Session& session, QObject* parent) + : QObject(parent), m_speed(0), m_battery(0), m_rightBlinker(false), + m_leftBlinker(false), m_lowBeam(false), m_highBeam(false), + m_frontFogLight(false), m_rearFogLight(false), m_hazardLight(false), + m_parkingLight(false), m_gear(GearPosition::PARK), m_session(session) +{ +} + +InstrumentCluster::~InstrumentCluster() +{ + m_session.close(); +} + +int InstrumentCluster::getSpeed() const +{ + return m_speed; +} + +int InstrumentCluster::getBattery() const +{ + return m_battery; +} + +bool InstrumentCluster::getRightBlinker() const +{ + return m_rightBlinker; +} + +bool InstrumentCluster::getLeftBlinker() const +{ + return m_leftBlinker; +} + +bool InstrumentCluster::getLowBeam() const +{ + return m_lowBeam; +} + +bool InstrumentCluster::getHighBeam() const +{ + return m_highBeam; +} + +bool InstrumentCluster::getFrontFogLight() const +{ + return m_frontFogLight; +} + +bool InstrumentCluster::getRearFogLight() const +{ + return m_rearFogLight; +} + +bool InstrumentCluster::getHazardLight() const +{ + return m_hazardLight; +} + +bool InstrumentCluster::getParkingLight() const +{ + return m_parkingLight; +} + +InstrumentCluster::GearPosition InstrumentCluster::getGear() const +{ + return m_gear; +} + +void InstrumentCluster::setSpeed(int speed) +{ + if (m_speed != speed) + { + m_speed = speed; + emit speedChanged(m_speed); + } +} + +void InstrumentCluster::setBattery(int battery) +{ + if (m_battery != battery) + { + m_battery = battery; + emit batteryChanged(m_battery); + } +} + +void InstrumentCluster::setRightBlinker(bool rightBlinker) +{ + if (m_rightBlinker != rightBlinker) + { + m_rightBlinker = rightBlinker; + emit rightBlinkerChanged(m_rightBlinker); + } +} + +void InstrumentCluster::setLeftBlinker(bool leftBlinker) +{ + if (m_leftBlinker != leftBlinker) + { + m_leftBlinker = leftBlinker; + emit leftBlinkerChanged(m_leftBlinker); + } +} + +void InstrumentCluster::setLowBeam(bool lowBeam) +{ + if (m_lowBeam != lowBeam) + { + m_lowBeam = lowBeam; + emit lowBeamChanged(m_lowBeam); + } +} + +void InstrumentCluster::setHighBeam(bool highBeam) +{ + if (m_highBeam != highBeam) + { + m_highBeam = highBeam; + emit highBeamChanged(m_highBeam); + } +} + +void InstrumentCluster::setFrontFogLight(bool frontFogLight) +{ + if (m_frontFogLight != frontFogLight) + { + m_frontFogLight = frontFogLight; + emit frontFogLightChanged(m_frontFogLight); + } +} + +void InstrumentCluster::setRearFogLight(bool rearFogLight) +{ + if (m_rearFogLight != rearFogLight) + { + m_rearFogLight = rearFogLight; + emit rearFogLightChanged(m_rearFogLight); + } +} + +void InstrumentCluster::setHazardLight(bool hazardLight) +{ + if (m_hazardLight != hazardLight) + { + m_hazardLight = hazardLight; + emit hazardLightChanged(m_hazardLight); + } +} + +void InstrumentCluster::setParkingLight(bool parkingLight) +{ + if (m_parkingLight != parkingLight) + { + m_parkingLight = parkingLight; + emit parkingLightChanged(m_parkingLight); + } +} + +void InstrumentCluster::setGear(GearPosition gear) +{ + if (m_gear != gear) + { + m_gear = gear; + emit gearChanged(m_gear); + } +} diff --git a/src/main.cpp b/src/main.cpp index e17a8b1..ffbc34f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,7 +1,7 @@ #include #include #include -#include "../include/CANBusHandler.hpp" +#include "../include/InstrumentCluster.hpp" int main(int argc, char* argv[]) { @@ -11,8 +11,9 @@ int main(int argc, char* argv[]) Config config = Config::create_default(); auto session = Session::open(std::move(config)); - CANBusHandler canBusHandler(session); - engine.rootContext()->setContextProperty("canBusHandler", &canBusHandler); + InstrumentCluster instrumentCluster(session); + engine.rootContext()->setContextProperty("instrumentCluster", + &instrumentCluster); const QUrl url(QStringLiteral("qrc:/Main.qml")); QObject::connect( @@ -25,24 +26,116 @@ int main(int argc, char* argv[]) Qt::QueuedConnection); engine.load(url); - auto speed_handler = [&canBusHandler](const Sample& sample) + auto speed_handler = [&instrumentCluster](const Sample& sample) { int speed = std::stoi(sample.get_payload().as_string()); std::cout << "Sub speed: " << speed << std::endl; - canBusHandler.setSpeed(speed); + instrumentCluster.setSpeed(speed); }; - auto battery_handler = [&canBusHandler](const Sample& sample) + auto battery_handler = [&instrumentCluster](const Sample& sample) { int battery = std::stoi(sample.get_payload().as_string()); std::cout << "Sub battery: " << battery << std::endl; - canBusHandler.setBattery(battery); + instrumentCluster.setBattery(battery); }; - auto subSpeed = session.declare_subscriber("seame/car/1/speedSensor", - speed_handler, closures::none); + auto rightBlinker_handler = [&instrumentCluster](const Sample& sample) + { + int rightBlinker = std::stoi(sample.get_payload().as_string()); + std::cout << "Sub rightBlinker: " << rightBlinker << std::endl; + instrumentCluster.setRightBlinker(rightBlinker); + }; + + auto leftBlinker_handler = [&instrumentCluster](const Sample& sample) + { + int leftBlinker = std::stoi(sample.get_payload().as_string()); + std::cout << "Sub leftBlinker: " << leftBlinker << std::endl; + instrumentCluster.setLeftBlinker(leftBlinker); + }; + + auto lowBeam_handler = [&instrumentCluster](const Sample& sample) + { + int lowBeam = std::stoi(sample.get_payload().as_string()); + std::cout << "Sub lowBeam: " << lowBeam << std::endl; + instrumentCluster.setLowBeam(lowBeam); + }; + + auto highBeam_handler = [&instrumentCluster](const Sample& sample) + { + int highBeam = std::stoi(sample.get_payload().as_string()); + std::cout << "Sub highBeam: " << highBeam << std::endl; + instrumentCluster.setHighBeam(highBeam); + }; + + auto frontFogLight_handler = [&instrumentCluster](const Sample& sample) + { + int frontFogLight = std::stoi(sample.get_payload().as_string()); + std::cout << "Sub frontFogLight: " << frontFogLight << std::endl; + instrumentCluster.setFrontFogLight(frontFogLight); + }; + + auto rearFogLight_handler = [&instrumentCluster](const Sample& sample) + { + int rearFogLight = std::stoi(sample.get_payload().as_string()); + std::cout << "Sub rearFogLight: " << rearFogLight << std::endl; + instrumentCluster.setRearFogLight(rearFogLight); + }; + + auto hazardLight_handler = [&instrumentCluster](const Sample& sample) + { + int hazardLight = std::stoi(sample.get_payload().as_string()); + std::cout << "Sub frontFogLight: " << hazardLight << std::endl; + instrumentCluster.setHazardLight(hazardLight); + }; + + auto parkingLight_handler = [&instrumentCluster](const Sample& sample) + { + int parkingLight = std::stoi(sample.get_payload().as_string()); + std::cout << "Sub parkingLight: " << parkingLight << std::endl; + instrumentCluster.setParkingLight(parkingLight); + }; + + auto gear_handler = [&instrumentCluster](const Sample& sample) + { + int gear = std::stoi(sample.get_payload().as_string()); + std::cout << "Sub gear: " << gear << std::endl; + instrumentCluster.setGear(InstrumentCluster::GearPosition::PARK); + }; + + auto subSpeed = session.declare_subscriber("seame/car/1/speedSensor", + speed_handler, closures::none); + auto subBattery = session.declare_subscriber( "seame/car/1/batterySensor", battery_handler, closures::none); + + auto subRightBlinker = session.declare_subscriber( + "seame/car/1/rightBlinker", rightBlinker_handler, closures::none); + + auto subLeftBlinker = session.declare_subscriber( + "seame/car/1/leftBlinker", leftBlinker_handler, closures::none); + + auto subLowBeam = session.declare_subscriber( + "seame/car/1/lowBeam", lowBeam_handler, closures::none); + + auto subHighBeam = session.declare_subscriber( + "seame/car/1/highBeam", highBeam_handler, closures::none); + + auto subFrontFogLight = session.declare_subscriber( + "seame/car/1/frontFogLight", frontFogLight_handler, closures::none); + + auto subRearFogLight = session.declare_subscriber( + "seame/car/1/rearFogLight", rearFogLight_handler, closures::none); + + auto subHazardLight = session.declare_subscriber( + "seame/car/1/hazardLight", hazardLight_handler, closures::none); + + auto subParkingLight = session.declare_subscriber( + "seame/car/1/parkingLight", parkingLight_handler, closures::none); + + auto subGear = session.declare_subscriber("seame/car/1/gear", gear_handler, + closures::none); + std::cout << "Subs created!" << std::endl; return app.exec(); diff --git a/ui/SpeedDisplay.qml b/ui/SpeedDisplay.qml index e2859da..b7f1e3a 100644 --- a/ui/SpeedDisplay.qml +++ b/ui/SpeedDisplay.qml @@ -5,7 +5,7 @@ Column { Text { font.family: "Open Sans" - text: canBusHandler.speed + text: instrumentCluster.speed font.pixelSize: 110 color: "white" opacity: 1.0