From c5d114291dac95b3447df48dbd712ec7eb84b89a Mon Sep 17 00:00:00 2001 From: Rui Pires Date: Fri, 17 Jan 2025 15:38:28 +0000 Subject: [PATCH 01/23] Rename InstrumentCluster to InstrumentClusterApp and refactor light properties into LightStatus struct --- CMakeLists.txt | 4 +- include/InstrumentCluster.hpp | 111 ++++++++++++----------- src/InstrumentCluster.cpp | 161 +++++++++++----------------------- src/main.cpp | 117 +----------------------- 4 files changed, 108 insertions(+), 285 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7c64b5c..d1877e3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,11 +20,11 @@ set(CMAKE_AUTORCC ON) qt_add_resources(QT_RESOURCES ./ui/resources.qrc) # Define Executable Target -add_executable(InstrumentCluster +add_executable(InstrumentClusterApp ${QT_RESOURCES} ./src/main.cpp ./src/InstrumentCluster.cpp ./include/InstrumentCluster.hpp ) -target_link_libraries(InstrumentCluster zenohcxx::zenohc -lm -ldl Qt6::Core Qt6::DBus Qt6::Quick) +target_link_libraries(InstrumentClusterApp zenohcxx::zenohc -lm -ldl Qt6::Core Qt6::DBus Qt6::Quick) diff --git a/include/InstrumentCluster.hpp b/include/InstrumentCluster.hpp index 9d8590e..992693b 100644 --- a/include/InstrumentCluster.hpp +++ b/include/InstrumentCluster.hpp @@ -7,90 +7,87 @@ using namespace zenoh; +struct LightStatus +{ + Q_GADGET + Q_PROPERTY(bool rightBlinker MEMBER rightBlinker) + Q_PROPERTY(bool leftBlinker MEMBER leftBlinker) + Q_PROPERTY(bool lowBeam MEMBER lowBeam) + Q_PROPERTY(bool highBeam MEMBER highBeam) + Q_PROPERTY(bool frontFogLight MEMBER frontFogLight) + Q_PROPERTY(bool rearFogLight MEMBER rearFogLight) + Q_PROPERTY(bool hazardLight MEMBER hazardLight) + Q_PROPERTY(bool parkingLight MEMBER parkingLight) + public: + bool rightBlinker{false}; + bool leftBlinker{false}; + bool lowBeam{false}; + bool highBeam{false}; + bool frontFogLight{false}; + bool rearFogLight{false}; + bool hazardLight{false}; + bool parkingLight{false}; + + public: + bool operator!=(const LightStatus& lights) const + { + return rightBlinker != lights.rightBlinker || + leftBlinker != lights.leftBlinker || lowBeam != lights.lowBeam || + highBeam != lights.highBeam || + frontFogLight != lights.frontFogLight || + rearFogLight != lights.rearFogLight || + hazardLight != lights.hazardLight || + parkingLight != lights.parkingLight; + } +}; +Q_DECLARE_METATYPE(LightStatus) + +enum GearPosition +{ + PARK, + REVERSE, + NEUTRAL, + DRIVE +}; + 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(LightStatus lights READ getLights NOTIFY lightsChanged) 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; + LightStatus m_lights; GearPosition m_gear; - Session& m_session; + Session m_session; + Subscriber m_subSpeed; + Subscriber m_subBattery; + Subscriber m_subLights; + Subscriber m_subGear; public: - explicit InstrumentCluster(Session& session, QObject* parent = nullptr); + explicit InstrumentCluster(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; + LightStatus getLights() 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 setLights(LightStatus lights); 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 lightsChanged(LightStatus lights); void gearChanged(GearPosition gear); }; diff --git a/src/InstrumentCluster.cpp b/src/InstrumentCluster.cpp index d8c0f11..068c6ee 100644 --- a/src/InstrumentCluster.cpp +++ b/src/InstrumentCluster.cpp @@ -1,10 +1,49 @@ #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(QObject* parent) + : QObject(parent), + m_session(Session::open(std::move(Config::create_default()))), + m_subSpeed(m_session.declare_subscriber( + "seame/car/1/speedSensor", + [this](const Sample& sample) + { + int speed = std::stoi(sample.get_payload().as_string()); + std::cout << "Sub speed" << std::endl; + this->setSpeed(speed); + }, + closures::none)), + m_subBattery(m_session.declare_subscriber( + "seame/car/1/batterySensor", + [this](const Sample& sample) + { + int battery = std::stoi(sample.get_payload().as_string()); + std::cout << "Sub battery" << std::endl; + this->setBattery(battery); + }, + closures::none)), + m_subLights(m_session.declare_subscriber( + "seame/car/1/lights", + [this](const Sample& sample) + { + auto lightsStr = sample.get_payload().data(); + LightStatus lights; + memcpy(&lights, lightsStr, sizeof(LightStatus)); + std::cout << "Sub lights" << std::endl; + this->setLights(lights); + }, + closures::none)), + m_subGear(m_session.declare_subscriber( + "seame/car/1/gear", + [this](const Sample& sample) + { + auto gearStr = sample.get_payload().data(); + GearPosition gear; + memcpy(&gear, gearStr, sizeof(GearPosition)); + std::cout << "Sub gear" << std::endl; + this->setGear(gear); + }, + closures::none)), + m_speed(0), m_battery(0), m_gear(GearPosition::PARK) { } @@ -23,47 +62,12 @@ int InstrumentCluster::getBattery() const return m_battery; } -bool InstrumentCluster::getRightBlinker() const +LightStatus InstrumentCluster::getLights() const { - return m_rightBlinker; + return m_lights; } -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 +GearPosition InstrumentCluster::getGear() const { return m_gear; } @@ -86,75 +90,12 @@ void InstrumentCluster::setBattery(int 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) +void InstrumentCluster::setLights(LightStatus lights) { - if (m_parkingLight != parkingLight) + if (m_lights != lights) { - m_parkingLight = parkingLight; - emit parkingLightChanged(m_parkingLight); + m_lights = lights; + emit lightsChanged(m_lights); } } diff --git a/src/main.cpp b/src/main.cpp index ffbc34f..24db6ad 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,10 +8,7 @@ int main(int argc, char* argv[]) QGuiApplication app(argc, argv); QQmlApplicationEngine engine; - Config config = Config::create_default(); - auto session = Session::open(std::move(config)); - - InstrumentCluster instrumentCluster(session); + InstrumentCluster instrumentCluster; engine.rootContext()->setContextProperty("instrumentCluster", &instrumentCluster); @@ -26,117 +23,5 @@ int main(int argc, char* argv[]) Qt::QueuedConnection); engine.load(url); - auto speed_handler = [&instrumentCluster](const Sample& sample) - { - int speed = std::stoi(sample.get_payload().as_string()); - std::cout << "Sub speed: " << speed << std::endl; - instrumentCluster.setSpeed(speed); - }; - - auto battery_handler = [&instrumentCluster](const Sample& sample) - { - int battery = std::stoi(sample.get_payload().as_string()); - std::cout << "Sub battery: " << battery << std::endl; - instrumentCluster.setBattery(battery); - }; - - 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(); } From cb08ae378028a3e720cec219d8d7e779c1c23b8b Mon Sep 17 00:00:00 2001 From: Rui Pires Date: Fri, 17 Jan 2025 16:04:17 +0000 Subject: [PATCH 02/23] Refactor LightStatus struct by removing Q_PROPERTY macros and update memcpy calls to use as_string() for payload handling --- include/InstrumentCluster.hpp | 12 ------------ src/InstrumentCluster.cpp | 8 ++++---- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/include/InstrumentCluster.hpp b/include/InstrumentCluster.hpp index 992693b..aefd529 100644 --- a/include/InstrumentCluster.hpp +++ b/include/InstrumentCluster.hpp @@ -9,16 +9,6 @@ using namespace zenoh; struct LightStatus { - Q_GADGET - Q_PROPERTY(bool rightBlinker MEMBER rightBlinker) - Q_PROPERTY(bool leftBlinker MEMBER leftBlinker) - Q_PROPERTY(bool lowBeam MEMBER lowBeam) - Q_PROPERTY(bool highBeam MEMBER highBeam) - Q_PROPERTY(bool frontFogLight MEMBER frontFogLight) - Q_PROPERTY(bool rearFogLight MEMBER rearFogLight) - Q_PROPERTY(bool hazardLight MEMBER hazardLight) - Q_PROPERTY(bool parkingLight MEMBER parkingLight) - public: bool rightBlinker{false}; bool leftBlinker{false}; bool lowBeam{false}; @@ -28,7 +18,6 @@ struct LightStatus bool hazardLight{false}; bool parkingLight{false}; - public: bool operator!=(const LightStatus& lights) const { return rightBlinker != lights.rightBlinker || @@ -40,7 +29,6 @@ struct LightStatus parkingLight != lights.parkingLight; } }; -Q_DECLARE_METATYPE(LightStatus) enum GearPosition { diff --git a/src/InstrumentCluster.cpp b/src/InstrumentCluster.cpp index 068c6ee..7670138 100644 --- a/src/InstrumentCluster.cpp +++ b/src/InstrumentCluster.cpp @@ -25,9 +25,9 @@ InstrumentCluster::InstrumentCluster(QObject* parent) "seame/car/1/lights", [this](const Sample& sample) { - auto lightsStr = sample.get_payload().data(); LightStatus lights; - memcpy(&lights, lightsStr, sizeof(LightStatus)); + memcpy(&lights, sample.get_payload().as_string().c_str(), + sizeof(LightStatus)); std::cout << "Sub lights" << std::endl; this->setLights(lights); }, @@ -36,9 +36,9 @@ InstrumentCluster::InstrumentCluster(QObject* parent) "seame/car/1/gear", [this](const Sample& sample) { - auto gearStr = sample.get_payload().data(); GearPosition gear; - memcpy(&gear, gearStr, sizeof(GearPosition)); + memcpy(&gear, sample.get_payload().as_string().c_str(), + sizeof(GearPosition)); std::cout << "Sub gear" << std::endl; this->setGear(gear); }, From a7a6b62396fa87c4b86a8756897aba7b177d914b Mon Sep 17 00:00:00 2001 From: ziliolu Date: Fri, 17 Jan 2025 16:51:57 +0000 Subject: [PATCH 03/23] background change --- CMakeLists.txt | 1 + assets/images/car-background.png | Bin 0 -> 116929 bytes ui/FootbarInfo.qml | 2 +- ui/GearShiftInfo.qml | 12 ++- ui/LightInfo.qml | 10 +-- ui/Main.qml | 148 +++++++++++++++---------------- ui/SpeedDisplay.qml | 5 +- ui/TurnSignals.qml | 19 ++-- ui/resources.qrc | 3 + 9 files changed, 101 insertions(+), 99 deletions(-) create mode 100644 assets/images/car-background.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 7c64b5c..dac97fd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,3 +28,4 @@ add_executable(InstrumentCluster ) target_link_libraries(InstrumentCluster zenohcxx::zenohc -lm -ldl Qt6::Core Qt6::DBus Qt6::Quick) +target_compile_options(InstrumentCluster PRIVATE -Wall -Werror -Wextra) \ No newline at end of file diff --git a/assets/images/car-background.png b/assets/images/car-background.png new file mode 100644 index 0000000000000000000000000000000000000000..3239bdb9bd7e0b1f1a468c9c3d7f98eea8381d59 GIT binary patch literal 116929 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%0DfxAWj!kDek*T^^Q00am4i1@2jgh(@_?K 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 literal 0 HcmV?d00001 diff --git a/ui/FootbarInfo.qml b/ui/FootbarInfo.qml index 66ea725..082723f 100644 --- a/ui/FootbarInfo.qml +++ b/ui/FootbarInfo.qml @@ -28,7 +28,7 @@ Row { width: 80 visible: true fillMode: Image.PreserveAspectFit - source: "qrc:/assets/icons/battery-5.png" + source: "qrc:/assets/icons/battery-4.png" // Adjust this value to move the image up or down } } diff --git a/ui/GearShiftInfo.qml b/ui/GearShiftInfo.qml index ef5bbce..c52c292 100644 --- a/ui/GearShiftInfo.qml +++ b/ui/GearShiftInfo.qml @@ -6,24 +6,28 @@ Column { font.family: "Open Sans" text: "P" font.pixelSize: app.letterSize - color: "gray" + // color: instrumentCluster.gear === GearPosition.PARK ? "blue" : "white" + color: "white" } Text { font.family: "Open Sans" text: "R" font.pixelSize: app.letterSize - color: "gray" + // color: instrumentCluster.gear === GearPosition.REVERSE ? "blue" : "white" + color: "white" } Text { font.family: "Open Sans" text: "N" font.pixelSize: app.letterSize - color: "gray" + // color: instrumentCluster.gear === GearPosition.NEUTRAL ? "blue" : "white" + color: "white" } Text { font.family: "Open Sans" text: "D" font.pixelSize: app.letterSize - color: "blue" + // color: instrumentCluster.gear === GearPosition.DRIVE ? "blue" : "white" + color: "white" } } \ No newline at end of file diff --git a/ui/LightInfo.qml b/ui/LightInfo.qml index 0994884..b2ed8ac 100644 --- a/ui/LightInfo.qml +++ b/ui/LightInfo.qml @@ -9,7 +9,7 @@ Row { source: "qrc:/assets/icons/low_beam_on.png" width: app.iconWidth height: app.iconHeight - visible: true + visible: instrumentCluster.lowBeam } Image { @@ -17,7 +17,7 @@ Row { source: "qrc:/assets/icons/high_beam_on.png" width: app.iconWidth height: app.iconHeight - visible: true + visible: instrumentCluster.highBeam } Image { @@ -25,7 +25,7 @@ Row { source: "qrc:/assets/icons/front_fog_on.png" width: app.iconWidth height: app.iconHeight - visible: true + visible: instrumentCluster.frontFogLight } Image { @@ -33,7 +33,7 @@ Row { source: "qrc:/assets/icons/parking_lights_on.png" width: app.iconWidth height: app.iconHeight - visible: true + visible: instrumentCluster.parkingLight } Image { @@ -41,6 +41,6 @@ Row { source: "qrc:/assets/icons/back_fog_on.png" width: app.iconWidth height: app.iconHeight - visible: true + visible: instrumentCluster.readFogLight } } diff --git a/ui/Main.qml b/ui/Main.qml index 37c78f3..250d73c 100644 --- a/ui/Main.qml +++ b/ui/Main.qml @@ -6,13 +6,13 @@ ApplicationWindow { visible: true width: Screen.width height: Screen.height - // flags: Qt.FramelessWindowHint + flags: Qt.Window | Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint + visibility: Window.FullScreen // Add this line property int letterSize: 25 property int iconWidth: 40 property int iconHeight: 40 property bool carClusterVisible: true - property bool showSplash: true font.family: "Roboto" @@ -24,35 +24,33 @@ ApplicationWindow { anchors.fill: parent visible: app.carClusterVisible - // Background Gradient - Canvas { + // Background Image + Image { + source: "qrc:/assets/images/car-background.png" + // fillMode: Image.PreserveAspectCrop anchors.fill: parent - onPaint: { - var ctx = getContext("2d"); - ctx.fillStyle = "#000000"; - ctx.fillRect(0, 0, width, height); - } } Row { anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.left - anchors.leftMargin: 100 + anchors.verticalCenterOffset: -90 + anchors.horizontalCenter: parent.horizontalCenter + anchors.leftMargin: 2 spacing: 10 - TurnSignals { - isLeft: true - isBlinking: true - } + // Left Turn Signal + TurnSignals {} + + // Speed Display (example) SpeedDisplay {} - TurnSignals { - isLeft: false - isBlinking: false - } + + // Right Turn Signal + TurnSignals {} } GearShiftInfo { anchors.verticalCenter: parent.verticalCenter + anchors.verticalCenterOffset: -10 anchors.left: parent.left anchors.leftMargin: 20 } @@ -66,71 +64,71 @@ ApplicationWindow { FootbarInfo { anchors.bottom: parent.bottom - anchors.bottomMargin: 60 + anchors.bottomMargin: 0 anchors.left: parent.left - anchors.leftMargin: 70 + anchors.leftMargin: 20 } TimeInfo { anchors.bottom: parent.bottom - anchors.bottomMargin: 60 + anchors.bottomMargin: 5 anchors.right: parent.right - anchors.rightMargin: 70 + anchors.rightMargin: 20 } } - // Logo Screen - Rectangle { - id: splashScreen - visible: app.showSplash - anchors.fill: parent - color: "black" - - // O retângulo sempre fica visível, mas apenas o logo tem a opacidade animada - Image { - id: logo - source: "qrc:/assets/icons/seame-logo.png" // Substitua pelo logo do carro - anchors.centerIn: parent - width: parent.width * 0.5 - height: parent.width * 0.5 - fillMode: Image.PreserveAspectFit - opacity: 1.0 // Começa visível - - SequentialAnimation { - running: true - loops: 1 - - // Transição para mostrar o logo - PropertyAnimation { - target: logo - property: "opacity" - from: 0.0 - to: 1.0 - duration: 3000 // 3 segundos - } - - PauseAnimation { duration: 1000 } // Aguarda 1 segundo com o logo visível - - // Transição para esconder o logo - PropertyAnimation { - target: logo - property: "opacity" - from: 1.0 - to: 0.0 - duration: 2000 // 2 segundos - } - - PauseAnimation { duration: 1000 } // Aguarda 2 segundos com a tela preta - - ScriptAction { - script: { - app.showSplash = false; // Oculta a splash screen - app.carClusterVisible = true; // Mostra o cluster - } - } - } - } - } + // // Logo Screen + // Rectangle { + // id: splashScreen + // visible: app.showSplash + // anchors.fill: parent + // color: "black" + + // // O retângulo sempre fica visível, mas apenas o logo tem a opacidade animada + // Image { + // id: logo + // source: "qrc:/assets/icons/seame-logo.png" // Substitua pelo logo do carro + // anchors.centerIn: parent + // width: parent.width * 0.5 + // height: parent.width * 0.5 + // fillMode: Image.PreserveAspectFit + // opacity: 1.0 // Começa visível + + // SequentialAnimation { + // running: true + // loops: 1 + + // // Transição para mostrar o logo + // PropertyAnimation { + // target: logo + // property: "opacity" + // from: 0.0 + // to: 1.0 + // duration: 3000 // 3 segundos + // } + + // PauseAnimation { duration: 1000 } // Aguarda 1 segundo com o logo visível + + // // Transição para esconder o logo + // PropertyAnimation { + // target: logo + // property: "opacity" + // from: 1.0 + // to: 0.0 + // duration: 2000 // 2 segundos + // } + + // PauseAnimation { duration: 1000 } // Aguarda 2 segundos com a tela preta + + // ScriptAction { + // script: { + // app.showSplash = false; // Oculta a splash screen + // app.carClusterVisible = true; // Mostra o cluster + // } + // } + // } + // } + // } } \ No newline at end of file diff --git a/ui/SpeedDisplay.qml b/ui/SpeedDisplay.qml index b7f1e3a..ec88037 100644 --- a/ui/SpeedDisplay.qml +++ b/ui/SpeedDisplay.qml @@ -1,11 +1,12 @@ import QtQuick 2.15 Column { - spacing: 5 + spacing: 3 Text { font.family: "Open Sans" - text: instrumentCluster.speed + // text: instrumentCluster.speed + text: "12" font.pixelSize: 110 color: "white" opacity: 1.0 diff --git a/ui/TurnSignals.qml b/ui/TurnSignals.qml index 3d33a4e..92639c6 100644 --- a/ui/TurnSignals.qml +++ b/ui/TurnSignals.qml @@ -3,29 +3,24 @@ import QtQuick 2.15 Row { id: root spacing: 10 - - property bool isLeft: true - property bool isBlinking: false - + Image { anchors.verticalCenter: parent.verticalCenter id: turnSignal - source: isLeft ? "qrc:/assets/icons/turn_left_on.png" : "qrc:/assets/icons/turn_right_on.png" + source: instrumentCluster.rightBlinker ? "qrc:/assets/icons/turn_right_on.png" : "qrc:/assets/icons/turn_left_on.png" width: 70 height: 70 opacity: 0.0 - + visible: instrumentCluster.rightBlinker || instrumentCluster.leftBlinker + Timer { id: blinkTimer interval: 500 - running: root.isBlinking + running: instrumentCluster.rightBlinker || instrumentCluster.leftBlinker // Start the timer if any blinker is on repeat: true onTriggered: { - if (turnSignal.isBlinking) { - turnSignal.opacity = turnSignal.opacity === 1.0 ? 0.0 : 1.0; - } else { - turnSignal.opacity = 0.0; - } + // Toggle opacity when blinking + turnSignal.opacity = turnSignal.opacity === 1.0 ? 0.0 : 1.0; } } } diff --git a/ui/resources.qrc b/ui/resources.qrc index 27ab5eb..ed6c1b6 100644 --- a/ui/resources.qrc +++ b/ui/resources.qrc @@ -26,4 +26,7 @@ ../assets/icons/battery-4.png ../assets/icons/battery-5.png + + ../assets/images/car-background.png + \ No newline at end of file From 5cc917b79f301588167a70000d05212d5faab5ad Mon Sep 17 00:00:00 2001 From: Rui Pires Date: Fri, 17 Jan 2025 17:38:33 +0000 Subject: [PATCH 04/23] Refactor InstrumentCluster to use BatteryStatus struct and update light properties in LightStatus struct --- include/InstrumentCluster.hpp | 39 ++++++++++++++++++++++++++++++----- src/InstrumentCluster.cpp | 10 +++++---- 2 files changed, 40 insertions(+), 9 deletions(-) diff --git a/include/InstrumentCluster.hpp b/include/InstrumentCluster.hpp index aefd529..1973207 100644 --- a/include/InstrumentCluster.hpp +++ b/include/InstrumentCluster.hpp @@ -9,6 +9,17 @@ using namespace zenoh; struct LightStatus { + Q_GADGET + public: + Q_PROPERTY(bool rightBlinker MEMBER rightBlinker) + Q_PROPERTY(bool leftBlinker MEMBER leftBlinker) + Q_PROPERTY(bool lowBeam MEMBER lowBeam) + Q_PROPERTY(bool highBeam MEMBER highBeam) + Q_PROPERTY(bool frontFogLight MEMBER frontFogLight) + Q_PROPERTY(bool rearFogLight MEMBER rearFogLight) + Q_PROPERTY(bool hazardLight MEMBER hazardLight) + Q_PROPERTY(bool parkingLight MEMBER parkingLight) + bool rightBlinker{false}; bool leftBlinker{false}; bool lowBeam{false}; @@ -29,6 +40,24 @@ struct LightStatus parkingLight != lights.parkingLight; } }; +Q_DECLARE_METATYPE(LightStatus) + +struct BatteryStatus +{ + Q_GADGET + public: + Q_PROPERTY(bool percentage MEMBER percentage) + Q_PROPERTY(bool autonomy MEMBER autonomy) + + int percentage; + int autonomy; + + bool operator!=(const BatteryStatus& battery) const + { + return percentage != battery.percentage || autonomy != battery.autonomy; + } +}; +Q_DECLARE_METATYPE(BatteryStatus) enum GearPosition { @@ -42,13 +71,13 @@ class InstrumentCluster : public QObject { Q_OBJECT Q_PROPERTY(int speed READ getSpeed NOTIFY speedChanged) - Q_PROPERTY(int battery READ getBattery NOTIFY batteryChanged) + Q_PROPERTY(BatteryStatus battery READ getBattery NOTIFY batteryChanged) Q_PROPERTY(LightStatus lights READ getLights NOTIFY lightsChanged) Q_PROPERTY(GearPosition gear READ getGear NOTIFY gearChanged) private: int m_speed; - int m_battery; + BatteryStatus m_battery; LightStatus m_lights; GearPosition m_gear; @@ -63,18 +92,18 @@ class InstrumentCluster : public QObject ~InstrumentCluster(); int getSpeed() const; - int getBattery() const; + BatteryStatus getBattery() const; LightStatus getLights() const; GearPosition getGear() const; void setSpeed(int speed); - void setBattery(int battery); + void setBattery(BatteryStatus battery); void setLights(LightStatus lights); void setGear(GearPosition gear); signals: void speedChanged(int speed); - void batteryChanged(int battery); + void batteryChanged(BatteryStatus battery); void lightsChanged(LightStatus lights); void gearChanged(GearPosition gear); }; diff --git a/src/InstrumentCluster.cpp b/src/InstrumentCluster.cpp index 7670138..387ce06 100644 --- a/src/InstrumentCluster.cpp +++ b/src/InstrumentCluster.cpp @@ -16,7 +16,9 @@ InstrumentCluster::InstrumentCluster(QObject* parent) "seame/car/1/batterySensor", [this](const Sample& sample) { - int battery = std::stoi(sample.get_payload().as_string()); + BatteryStatus battery; + memcpy(&battery, sample.get_payload().as_string().c_str(), + sizeof(BatteryStatus)); std::cout << "Sub battery" << std::endl; this->setBattery(battery); }, @@ -43,7 +45,7 @@ InstrumentCluster::InstrumentCluster(QObject* parent) this->setGear(gear); }, closures::none)), - m_speed(0), m_battery(0), m_gear(GearPosition::PARK) + m_speed(0), m_gear(GearPosition::PARK) { } @@ -57,7 +59,7 @@ int InstrumentCluster::getSpeed() const return m_speed; } -int InstrumentCluster::getBattery() const +BatteryStatus InstrumentCluster::getBattery() const { return m_battery; } @@ -81,7 +83,7 @@ void InstrumentCluster::setSpeed(int speed) } } -void InstrumentCluster::setBattery(int battery) +void InstrumentCluster::setBattery(BatteryStatus battery) { if (m_battery != battery) { From 6f9476ec00f187cf4d20dd36ac85776071ca0924 Mon Sep 17 00:00:00 2001 From: ziliolu Date: Fri, 17 Jan 2025 17:39:25 +0000 Subject: [PATCH 05/23] image change --- CMakeLists.txt | 6 +++--- include/InstrumentCluster.hpp | 31 +++++++++++++++++++++++++++++++ ui/GearShiftInfo.qml | 1 + ui/LightInfo.qml | 25 ++++++++++++------------- ui/Main.qml | 15 ++++++++++----- 5 files changed, 57 insertions(+), 21 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dac97fd..1430184 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,12 +20,12 @@ set(CMAKE_AUTORCC ON) qt_add_resources(QT_RESOURCES ./ui/resources.qrc) # Define Executable Target -add_executable(InstrumentCluster +add_executable(InstrumentClusterApp ${QT_RESOURCES} ./src/main.cpp ./src/InstrumentCluster.cpp ./include/InstrumentCluster.hpp ) -target_link_libraries(InstrumentCluster zenohcxx::zenohc -lm -ldl Qt6::Core Qt6::DBus Qt6::Quick) -target_compile_options(InstrumentCluster PRIVATE -Wall -Werror -Wextra) \ No newline at end of file +target_link_libraries(InstrumentClusterApp zenohcxx::zenohc -lm -ldl Qt6::Core Qt6::DBus Qt6::Quick) +target_compile_options(InstrumentClusterApp PRIVATE -Wall -Werror -Wextra) \ No newline at end of file diff --git a/include/InstrumentCluster.hpp b/include/InstrumentCluster.hpp index 9d8590e..7b035cc 100644 --- a/include/InstrumentCluster.hpp +++ b/include/InstrumentCluster.hpp @@ -7,6 +7,37 @@ using namespace zenoh; +struct LightStatus +{ + bool rightBlinker{false}; + bool leftBlinker{false}; + bool lowBeam{false}; + bool highBeam{false}; + bool frontFogLight{false}; + bool rearFogLight{false}; + bool hazardLight{false}; + bool parkingLight{false}; + + bool operator!=(const LightStatus& lights) const + { + return rightBlinker != lights.rightBlinker || + leftBlinker != lights.leftBlinker || lowBeam != lights.lowBeam || + highBeam != lights.highBeam || + frontFogLight != lights.frontFogLight || + rearFogLight != lights.rearFogLight || + hazardLight != lights.hazardLight || + parkingLight != lights.parkingLight; + } +}; + +enum GearPosition +{ + PARK, + REVERSE, + NEUTRAL, + DRIVE +}; + class InstrumentCluster : public QObject { Q_OBJECT diff --git a/ui/GearShiftInfo.qml b/ui/GearShiftInfo.qml index c52c292..510f665 100644 --- a/ui/GearShiftInfo.qml +++ b/ui/GearShiftInfo.qml @@ -2,6 +2,7 @@ import QtQuick 2.15 Column { spacing: 10 + Text { font.family: "Open Sans" text: "P" diff --git a/ui/LightInfo.qml b/ui/LightInfo.qml index b2ed8ac..26b2221 100644 --- a/ui/LightInfo.qml +++ b/ui/LightInfo.qml @@ -1,15 +1,14 @@ import QtQuick 2.15 -Row { +Column { spacing: 10 - padding: 10 Image { id: lowBeamSignal source: "qrc:/assets/icons/low_beam_on.png" width: app.iconWidth height: app.iconHeight - visible: instrumentCluster.lowBeam + visible: instrumentCluster.lights.lowBeam } Image { @@ -17,7 +16,7 @@ Row { source: "qrc:/assets/icons/high_beam_on.png" width: app.iconWidth height: app.iconHeight - visible: instrumentCluster.highBeam + visible: instrumentCluster.lights.highBeam } Image { @@ -25,7 +24,7 @@ Row { source: "qrc:/assets/icons/front_fog_on.png" width: app.iconWidth height: app.iconHeight - visible: instrumentCluster.frontFogLight + visible: instrumentCluster.lights.frontFogLight } Image { @@ -33,14 +32,14 @@ Row { source: "qrc:/assets/icons/parking_lights_on.png" width: app.iconWidth height: app.iconHeight - visible: instrumentCluster.parkingLight + visible: instrumentCluster.lights.parkingLight } - Image { - id: backFogSignal - source: "qrc:/assets/icons/back_fog_on.png" - width: app.iconWidth - height: app.iconHeight - visible: instrumentCluster.readFogLight - } + // Image { + // id: backFogSignal + // source: "qrc:/assets/icons/back_fog_on.png" + // width: app.iconWidth + // height: app.iconHeight + // visible: instrumentCluster.lights.backFogLight + // } } diff --git a/ui/Main.qml b/ui/Main.qml index 250d73c..f5be382 100644 --- a/ui/Main.qml +++ b/ui/Main.qml @@ -33,7 +33,7 @@ ApplicationWindow { Row { anchors.verticalCenter: parent.verticalCenter - anchors.verticalCenterOffset: -90 + anchors.verticalCenterOffset: -100 anchors.horizontalCenter: parent.horizontalCenter anchors.leftMargin: 2 spacing: 10 @@ -56,10 +56,15 @@ ApplicationWindow { } LightInfo { - anchors.top: parent.top - anchors.topMargin: 30 - anchors.left: parent.left - anchors.leftMargin: 70 + // anchors.top: parent.top + // anchors.topMargin: 30 + // anchors.left: parent.left + // anchors.leftMargin: 70 + + anchors.verticalCenter: parent.verticalCenter + anchors.verticalCenterOffset: -10 + anchors.right: parent.right + anchors.rightMargin: 20 } FootbarInfo { From 68f81585587f9fcd8d78a4257c340266e41c6805 Mon Sep 17 00:00:00 2001 From: Rui Pires Date: Mon, 20 Jan 2025 13:00:52 +0000 Subject: [PATCH 06/23] Refactor turn signal components to separate left and right signals and improve visibility handling --- ui/Main.qml | 9 ++------ ui/{TurnSignals.qml => TurnSignalLeft.qml} | 7 +++--- ui/TurnSignalRight.qml | 27 ++++++++++++++++++++++ ui/resources.qrc | 3 ++- 4 files changed, 34 insertions(+), 12 deletions(-) rename ui/{TurnSignals.qml => TurnSignalLeft.qml} (57%) create mode 100644 ui/TurnSignalRight.qml diff --git a/ui/Main.qml b/ui/Main.qml index 4091dfa..e11d741 100644 --- a/ui/Main.qml +++ b/ui/Main.qml @@ -39,13 +39,13 @@ ApplicationWindow { spacing: 10 // Left Turn Signal - TurnSignals {} + TurnSignalLeft {} // Speed Display (example) SpeedDisplay {} // Right Turn Signal - TurnSignals {} + TurnSignalRight {} } GearShiftInfo { @@ -56,11 +56,6 @@ ApplicationWindow { } LightInfo { - // anchors.top: parent.top - // anchors.topMargin: 30 - // anchors.left: parent.left - // anchors.leftMargin: 70 - anchors.verticalCenter: parent.verticalCenter anchors.verticalCenterOffset: -10 anchors.right: parent.right diff --git a/ui/TurnSignals.qml b/ui/TurnSignalLeft.qml similarity index 57% rename from ui/TurnSignals.qml rename to ui/TurnSignalLeft.qml index 4471a34..e3204a3 100644 --- a/ui/TurnSignals.qml +++ b/ui/TurnSignalLeft.qml @@ -7,16 +7,16 @@ Row { Image { anchors.verticalCenter: parent.verticalCenter id: turnSignal - source: instrumentCluster.lights.rightBlinker ? "qrc:/assets/icons/turn_right_on.png" : "qrc:/assets/icons/turn_left_on.png" + source: "qrc:/assets/icons/turn_left_on.png" width: 70 height: 70 opacity: 0.0 - visible: instrumentCluster.lights.rightBlinker || instrumentCluster.lights.leftBlinker + visible: instrumentCluster.lights.leftBlinker Timer { id: blinkTimer interval: 500 - running: instrumentCluster.lights.rightBlinker || instrumentCluster.lights.leftBlinker // Start the timer if any blinker is on + running: instrumentCluster.lights.leftBlinker repeat: true onTriggered: { // Toggle opacity when blinking @@ -24,5 +24,4 @@ Row { } } } - } diff --git a/ui/TurnSignalRight.qml b/ui/TurnSignalRight.qml new file mode 100644 index 0000000..3a23722 --- /dev/null +++ b/ui/TurnSignalRight.qml @@ -0,0 +1,27 @@ +import QtQuick 2.15 + +Row { + id: root + spacing: 10 + + Image { + anchors.verticalCenter: parent.verticalCenter + id: turnSignal + source: "qrc:/assets/icons/turn_right_on.png" + width: 70 + height: 70 + opacity: 0.0 + visible: instrumentCluster.lights.rightBlinker + + Timer { + id: blinkTimer + interval: 500 + running: instrumentCluster.lights.rightBlinker + repeat: true + onTriggered: { + // Toggle opacity when blinking + turnSignal.opacity = turnSignal.opacity === 1.0 ? 0.0 : 1.0; + } + } + } +} diff --git a/ui/resources.qrc b/ui/resources.qrc index ed6c1b6..0dbaf11 100644 --- a/ui/resources.qrc +++ b/ui/resources.qrc @@ -1,7 +1,8 @@ Main.qml - TurnSignals.qml + TurnSignalLeft.qml + TurnSignalRight.qml SpeedDisplay.qml LightInfo.qml FootbarInfo.qml From dd5fd480f1fae0eeba67fcf5d7c0454bf425aaa3 Mon Sep 17 00:00:00 2001 From: Rui Pires Date: Mon, 20 Jan 2025 13:34:20 +0000 Subject: [PATCH 07/23] Calculate and publish battery percentage based on voltage readings --- MiddleWare/src/main.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/MiddleWare/src/main.cpp b/MiddleWare/src/main.cpp index 740c371..eab3f29 100644 --- a/MiddleWare/src/main.cpp +++ b/MiddleWare/src/main.cpp @@ -73,8 +73,12 @@ int main(int argc, char** argv) else if (frame.can_id == 0x02) { int battery; + float percentage; + memcpy(&battery, frame.data, sizeof(int)); - battery = ntohl(battery); + battery = ntohl(battery); + percentage = ((battery - 9.5f) / (12.6f - 9.5f)) * 100.0f; + battery = std::min(100.0f, std::max(0.0f, percentage)); std::string battery_str = std::to_string(battery); printf("Publishing battery: '%d\n", battery); From 40692c97f7606648c3f627854b93e9b02dc00663 Mon Sep 17 00:00:00 2001 From: Rui Pires Date: Mon, 20 Jan 2025 16:47:15 +0000 Subject: [PATCH 08/23] Remove submodule for Team02-Libs and update CMakeLists to fetch content directly; adjust include paths for InstrumentCluster --- .gitmodules | 3 --- CMakeLists.txt | 2 ++ MiddleWare/CMakeLists.txt | 12 ++++++++++++ MiddleWare/Libs | 1 - src/InstrumentCluster.cpp | 2 +- src/main.cpp | 2 +- 6 files changed, 16 insertions(+), 6 deletions(-) delete mode 100644 .gitmodules delete mode 160000 MiddleWare/Libs diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 07ed0c7..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "MiddleWare/Libs"] - path = MiddleWare/Libs - url = git@github.com:SEAME-pt/Team02-Libs.git diff --git a/CMakeLists.txt b/CMakeLists.txt index d1877e3..0d191f7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,6 +16,8 @@ set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) +include_directories(include) + # Add Resource File (QML and Other Resources) qt_add_resources(QT_RESOURCES ./ui/resources.qrc) diff --git a/MiddleWare/CMakeLists.txt b/MiddleWare/CMakeLists.txt index c1de850..662c97d 100644 --- a/MiddleWare/CMakeLists.txt +++ b/MiddleWare/CMakeLists.txt @@ -10,6 +10,18 @@ set(zenohcxx_DIR "/usr/local/lib/cmake/zenohcxx") find_package(zenohc REQUIRED) find_package(zenohcxx REQUIRED) +include(FetchContent) +FetchContent_Declare( + Libs + GIT_REPOSITORY https://github.com/SEAME-pt/Team02-Libs + GIT_TAG main +) +FetchContent_MakeAvailable(Libs) + +include_directories(${libs_SOURCE_DIR}/Communication/I2C/include) +include_directories(${libs_SOURCE_DIR}/Communication/CAN/include) +include_directories(${libs_SOURCE_DIR}/Peripherals/INA219/include) + add_executable(middleWare ./src/main.cpp ) diff --git a/MiddleWare/Libs b/MiddleWare/Libs deleted file mode 160000 index 7f38a66..0000000 --- a/MiddleWare/Libs +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 7f38a66dbbf353c0a477578ca87646fb77df0599 diff --git a/src/InstrumentCluster.cpp b/src/InstrumentCluster.cpp index dce0cb4..5d76880 100644 --- a/src/InstrumentCluster.cpp +++ b/src/InstrumentCluster.cpp @@ -1,4 +1,4 @@ -#include "../include/InstrumentCluster.hpp" +#include "InstrumentCluster.hpp" InstrumentCluster::InstrumentCluster(QObject* parent) : QObject(parent), diff --git a/src/main.cpp b/src/main.cpp index aef5587..67ab95b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,7 +1,7 @@ #include #include #include -#include "../include/InstrumentCluster.hpp" +#include "InstrumentCluster.hpp" int main(int argc, char* argv[]) { From a5d303e800aa8bf063dba54eda72c526d4d84f87 Mon Sep 17 00:00:00 2001 From: Rui Pires Date: Mon, 20 Jan 2025 17:28:04 +0000 Subject: [PATCH 09/23] Refactor InstrumentCluster to use int for battery status instead of BatteryStatus type; update related methods and QML bindings --- include/InstrumentCluster.hpp | 8 ++++---- src/InstrumentCluster.cpp | 8 +++----- ui/GearShiftInfo.qml | 2 -- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/include/InstrumentCluster.hpp b/include/InstrumentCluster.hpp index 1775680..59b0daa 100644 --- a/include/InstrumentCluster.hpp +++ b/include/InstrumentCluster.hpp @@ -59,7 +59,7 @@ class InstrumentCluster : public QObject private: int m_speed; - BatteryStatus m_battery; + int m_battery; LightStatus m_lights; GearPosition m_gear; @@ -74,18 +74,18 @@ class InstrumentCluster : public QObject ~InstrumentCluster(); int getSpeed() const; - BatteryStatus getBattery() const; + int getBattery() const; LightStatus getLights() const; GearPosition getGear() const; void setSpeed(int speed); - void setBattery(BatteryStatus battery); + void setBattery(int battery); void setLights(LightStatus lights); void setGear(GearPosition gear); signals: void speedChanged(int speed); - void batteryChanged(BatteryStatus battery); + void batteryChanged(int battery); void lightsChanged(LightStatus lights); void gearChanged(GearPosition gear); }; diff --git a/src/InstrumentCluster.cpp b/src/InstrumentCluster.cpp index 5d76880..1fca158 100644 --- a/src/InstrumentCluster.cpp +++ b/src/InstrumentCluster.cpp @@ -16,9 +16,7 @@ InstrumentCluster::InstrumentCluster(QObject* parent) "seame/car/1/batterySensor", [this](const Sample& sample) { - BatteryStatus battery; - memcpy(&battery, sample.get_payload().as_string().c_str(), - sizeof(BatteryStatus)); + int battery = std::stoi(sample.get_payload().as_string()); std::cout << "Sub battery" << std::endl; this->setBattery(battery); }, @@ -68,7 +66,7 @@ int InstrumentCluster::getSpeed() const return m_speed; } -BatteryStatus InstrumentCluster::getBattery() const +int InstrumentCluster::getBattery() const { return m_battery; } @@ -92,7 +90,7 @@ void InstrumentCluster::setSpeed(int speed) } } -void InstrumentCluster::setBattery(BatteryStatus battery) +void InstrumentCluster::setBattery(int battery) { if (m_battery != battery) { diff --git a/ui/GearShiftInfo.qml b/ui/GearShiftInfo.qml index a991427..7bfec57 100644 --- a/ui/GearShiftInfo.qml +++ b/ui/GearShiftInfo.qml @@ -22,13 +22,11 @@ Column { text: "N" font.pixelSize: app.letterSize color: instrumentCluster.gear === GearPosition.NEUTRAL ? "blue" : "white" - color: "white" } Text { font.family: "Open Sans" text: "D" font.pixelSize: app.letterSize color: instrumentCluster.gear === GearPosition.DRIVE ? "blue" : "white" - color: "white" } } \ No newline at end of file From 6d5c39878a84453f619326c2cb33bbbd041de27d Mon Sep 17 00:00:00 2001 From: Rui Pires Date: Tue, 21 Jan 2025 14:54:48 +0000 Subject: [PATCH 10/23] Refactor CMakeLists and main application; update battery handling to use BatteryStatus struct and improve light status properties --- MiddleWare/CMakeLists.txt | 24 ++++++++++++------------ MiddleWare/src/main.cpp | 13 ++++++------- include/InstrumentCluster.hpp | 26 ++++++++++++++++++++++---- src/InstrumentCluster.cpp | 9 ++++++--- 4 files changed, 46 insertions(+), 26 deletions(-) diff --git a/MiddleWare/CMakeLists.txt b/MiddleWare/CMakeLists.txt index 662c97d..8e8ffa4 100644 --- a/MiddleWare/CMakeLists.txt +++ b/MiddleWare/CMakeLists.txt @@ -10,20 +10,20 @@ set(zenohcxx_DIR "/usr/local/lib/cmake/zenohcxx") find_package(zenohc REQUIRED) find_package(zenohcxx REQUIRED) -include(FetchContent) -FetchContent_Declare( - Libs - GIT_REPOSITORY https://github.com/SEAME-pt/Team02-Libs - GIT_TAG main -) -FetchContent_MakeAvailable(Libs) +# include(FetchContent) +# FetchContent_Declare( +# Libs +# GIT_REPOSITORY https://github.com/SEAME-pt/Team02-Libs +# GIT_TAG main +# ) +# FetchContent_MakeAvailable(Libs) -include_directories(${libs_SOURCE_DIR}/Communication/I2C/include) -include_directories(${libs_SOURCE_DIR}/Communication/CAN/include) -include_directories(${libs_SOURCE_DIR}/Peripherals/INA219/include) +# include_directories(${libs_SOURCE_DIR}/Communication/I2C/include) +# include_directories(${libs_SOURCE_DIR}/Communication/CAN/include) +# include_directories(${libs_SOURCE_DIR}/Peripherals/INA219/include) -add_executable(middleWare +add_executable(middleWareApp ./src/main.cpp ) -target_link_libraries(middleWare PRIVATE zenohcxx::zenohc) +target_link_libraries(middleWareApp PRIVATE zenohcxx::zenohc) diff --git a/MiddleWare/src/main.cpp b/MiddleWare/src/main.cpp index eab3f29..2d77b77 100644 --- a/MiddleWare/src/main.cpp +++ b/MiddleWare/src/main.cpp @@ -72,16 +72,15 @@ int main(int argc, char** argv) } else if (frame.can_id == 0x02) { - int battery; - float percentage; + double battery; - memcpy(&battery, frame.data, sizeof(int)); - battery = ntohl(battery); - percentage = ((battery - 9.5f) / (12.6f - 9.5f)) * 100.0f; - battery = std::min(100.0f, std::max(0.0f, percentage)); + memcpy(&battery, frame.data, sizeof(double)); + + float percentage = ((battery - 9.5f) / (12.6f - 9.5f)) * 100.0f; + battery = std::min(100.0f, std::max(0.0f, percentage)); std::string battery_str = std::to_string(battery); - printf("Publishing battery: '%d\n", battery); + printf("Publishing battery: '%lf\n", battery); pubBattery.put(battery_str.c_str()); } usleep(10); diff --git a/include/InstrumentCluster.hpp b/include/InstrumentCluster.hpp index 59b0daa..6112dc7 100644 --- a/include/InstrumentCluster.hpp +++ b/include/InstrumentCluster.hpp @@ -9,6 +9,18 @@ using namespace zenoh; struct LightStatus { + Q_GADGET + + Q_PROPERTY(bool rightBlinker MEMBER rightBlinker) + Q_PROPERTY(bool leftBlinker MEMBER leftBlinker) + Q_PROPERTY(bool lowBeam MEMBER lowBeam) + Q_PROPERTY(bool highBeam MEMBER highBeam) + Q_PROPERTY(bool frontFogLight MEMBER frontFogLight) + Q_PROPERTY(bool rearFogLight MEMBER rearFogLight) + Q_PROPERTY(bool hazardLight MEMBER hazardLight) + Q_PROPERTY(bool parkingLight MEMBER parkingLight) + + public: bool rightBlinker{false}; bool leftBlinker{false}; bool lowBeam{false}; @@ -32,6 +44,12 @@ struct LightStatus struct BatteryStatus { + Q_GADGET + + Q_PROPERTY(int percentage MEMBER percentage) + Q_PROPERTY(int autonomy MEMBER autonomy) + + public: int percentage; int autonomy; @@ -59,7 +77,7 @@ class InstrumentCluster : public QObject private: int m_speed; - int m_battery; + BatteryStatus m_battery; LightStatus m_lights; GearPosition m_gear; @@ -74,18 +92,18 @@ class InstrumentCluster : public QObject ~InstrumentCluster(); int getSpeed() const; - int getBattery() const; + BatteryStatus getBattery() const; LightStatus getLights() const; GearPosition getGear() const; void setSpeed(int speed); - void setBattery(int battery); + void setBattery(BatteryStatus battery); void setLights(LightStatus lights); void setGear(GearPosition gear); signals: void speedChanged(int speed); - void batteryChanged(int battery); + void batteryChanged(BatteryStatus battery); void lightsChanged(LightStatus lights); void gearChanged(GearPosition gear); }; diff --git a/src/InstrumentCluster.cpp b/src/InstrumentCluster.cpp index 1fca158..b647894 100644 --- a/src/InstrumentCluster.cpp +++ b/src/InstrumentCluster.cpp @@ -16,7 +16,10 @@ InstrumentCluster::InstrumentCluster(QObject* parent) "seame/car/1/batterySensor", [this](const Sample& sample) { - int battery = std::stoi(sample.get_payload().as_string()); + int batteryPercentage = + std::stoi(sample.get_payload().as_string()); + BatteryStatus battery; + battery.percentage = batteryPercentage; std::cout << "Sub battery" << std::endl; this->setBattery(battery); }, @@ -66,7 +69,7 @@ int InstrumentCluster::getSpeed() const return m_speed; } -int InstrumentCluster::getBattery() const +BatteryStatus InstrumentCluster::getBattery() const { return m_battery; } @@ -90,7 +93,7 @@ void InstrumentCluster::setSpeed(int speed) } } -void InstrumentCluster::setBattery(int battery) +void InstrumentCluster::setBattery(BatteryStatus battery) { if (m_battery != battery) { From 5dd62fe49bac0b5831bf85df2765347f14b23c25 Mon Sep 17 00:00:00 2001 From: Rui Pires Date: Tue, 21 Jan 2025 15:30:34 +0000 Subject: [PATCH 11/23] Refactor gear handling in InstrumentCluster; update QML bindings for gear display and improve light visibility handling --- src/InstrumentCluster.cpp | 4 ++-- src/main.cpp | 4 ++++ ui/GearShiftInfo.qml | 11 +++++------ ui/LightInfo.qml | 14 +++++++------- 4 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/InstrumentCluster.cpp b/src/InstrumentCluster.cpp index b647894..d968182 100644 --- a/src/InstrumentCluster.cpp +++ b/src/InstrumentCluster.cpp @@ -49,8 +49,8 @@ InstrumentCluster::InstrumentCluster(QObject* parent) [this](const Sample& sample) { GearPosition gear; - memcpy(&gear, sample.get_payload().as_string().c_str(), - sizeof(GearPosition)); + int gearPayload = std::stoi(sample.get_payload().as_string()); + gear = static_cast(gearPayload); std::cout << "Sub gear" << std::endl; this->setGear(gear); }, diff --git a/src/main.cpp b/src/main.cpp index 67ab95b..e3ca2b2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -14,6 +14,10 @@ int main(int argc, char* argv[]) engine.rootContext()->setContextProperty("instrumentCluster", &instrumentCluster); + qmlRegisterUncreatableType( + "com.example.gearPosition", 1, 0, "GearPosition", + "Cannot create GearPosition in QML"); + const QUrl url(QStringLiteral("qrc:/Main.qml")); QObject::connect( &engine, &QQmlApplicationEngine::objectCreated, &app, diff --git a/ui/GearShiftInfo.qml b/ui/GearShiftInfo.qml index 7bfec57..280c960 100644 --- a/ui/GearShiftInfo.qml +++ b/ui/GearShiftInfo.qml @@ -1,4 +1,5 @@ import QtQuick 2.15 +import com.example.gearPosition 1.0 Column { spacing: 10 @@ -7,26 +8,24 @@ Column { font.family: "Open Sans" text: "P" font.pixelSize: app.letterSize - // color: instrumentCluster.gear === GearPosition.PARK ? "blue" : "white" - color: "white" + color: instrumentCluster.gear === 1 ? "blue" : "white" } Text { font.family: "Open Sans" text: "R" font.pixelSize: app.letterSize - // color: instrumentCluster.gear === GearPosition.REVERSE ? "blue" : "white" - color: "white" + color: instrumentCluster.gear === 2 ? "blue" : "white" } Text { font.family: "Open Sans" text: "N" font.pixelSize: app.letterSize - color: instrumentCluster.gear === GearPosition.NEUTRAL ? "blue" : "white" + color: instrumentCluster.gear === 3 ? "blue" : "white" } Text { font.family: "Open Sans" text: "D" font.pixelSize: app.letterSize - color: instrumentCluster.gear === GearPosition.DRIVE ? "blue" : "white" + color: instrumentCluster.gear === 4 ? "blue" : "white" } } \ No newline at end of file diff --git a/ui/LightInfo.qml b/ui/LightInfo.qml index 26b2221..190d533 100644 --- a/ui/LightInfo.qml +++ b/ui/LightInfo.qml @@ -35,11 +35,11 @@ Column { visible: instrumentCluster.lights.parkingLight } - // Image { - // id: backFogSignal - // source: "qrc:/assets/icons/back_fog_on.png" - // width: app.iconWidth - // height: app.iconHeight - // visible: instrumentCluster.lights.backFogLight - // } + Image { + id: backFogSignal + source: "qrc:/assets/icons/back_fog_on.png" + width: app.iconWidth + height: app.iconHeight + visible: instrumentCluster.lights.rearFogLight + } } From a594d259e14b3336be4d6e65e12a5d9964c5c520 Mon Sep 17 00:00:00 2001 From: Rui Pires Date: Tue, 21 Jan 2025 15:31:03 +0000 Subject: [PATCH 12/23] Remove unused import path for LightInfo.qml in main application --- src/main.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index e3ca2b2..1bf3355 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,8 +8,6 @@ int main(int argc, char* argv[]) QGuiApplication app(argc, argv); QQmlApplicationEngine engine; - engine.addImportPath("qrc:/LightInfo.qml"); - InstrumentCluster instrumentCluster; engine.rootContext()->setContextProperty("instrumentCluster", &instrumentCluster); From 29ae6c91ce9a2d3e0832c09af3775cd2a2805010 Mon Sep 17 00:00:00 2001 From: Rui Pires Date: Tue, 21 Jan 2025 15:47:22 +0000 Subject: [PATCH 13/23] Refactor GearPosition to a struct with Q_PROPERTY for better QML integration; update gear handling in InstrumentCluster and related QML bindings --- include/InstrumentCluster.hpp | 24 +++++++++++++++++++----- src/InstrumentCluster.cpp | 11 ++++++++--- src/main.cpp | 4 ---- ui/GearShiftInfo.qml | 10 +++++----- 4 files changed, 32 insertions(+), 17 deletions(-) diff --git a/include/InstrumentCluster.hpp b/include/InstrumentCluster.hpp index 6112dc7..4a94553 100644 --- a/include/InstrumentCluster.hpp +++ b/include/InstrumentCluster.hpp @@ -59,12 +59,26 @@ struct BatteryStatus } }; -enum GearPosition +struct GearPosition { - PARK, - REVERSE, - NEUTRAL, - DRIVE + Q_GADGET + + Q_PROPERTY(bool park MEMBER park) + Q_PROPERTY(bool reverse MEMBER reverse) + Q_PROPERTY(bool neutral MEMBER neutral) + Q_PROPERTY(bool drive MEMBER drive) + + public: + bool park{true}; + bool reverse{false}; + bool neutral{false}; + bool drive{false}; + + bool operator!=(const GearPosition& gear) const + { + return park != gear.park || reverse != gear.reverse || + neutral != gear.neutral || drive != gear.drive; + } }; class InstrumentCluster : public QObject diff --git a/src/InstrumentCluster.cpp b/src/InstrumentCluster.cpp index d968182..5a3f92f 100644 --- a/src/InstrumentCluster.cpp +++ b/src/InstrumentCluster.cpp @@ -48,14 +48,19 @@ InstrumentCluster::InstrumentCluster(QObject* parent) "seame/car/1/gear", [this](const Sample& sample) { + uint8_t data = + static_cast(sample.get_payload().as_string()[0]); + GearPosition gear; - int gearPayload = std::stoi(sample.get_payload().as_string()); - gear = static_cast(gearPayload); + gear.park = (data & (1 << 0)) != 0; + gear.reverse = (data & (1 << 1)) != 0; + gear.neutral = (data & (1 << 2)) != 0; + gear.drive = (data & (1 << 3)) != 0; std::cout << "Sub gear" << std::endl; this->setGear(gear); }, closures::none)), - m_speed(0), m_gear(GearPosition::PARK) + m_speed(0) { } diff --git a/src/main.cpp b/src/main.cpp index 1bf3355..da2cbcd 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -12,10 +12,6 @@ int main(int argc, char* argv[]) engine.rootContext()->setContextProperty("instrumentCluster", &instrumentCluster); - qmlRegisterUncreatableType( - "com.example.gearPosition", 1, 0, "GearPosition", - "Cannot create GearPosition in QML"); - const QUrl url(QStringLiteral("qrc:/Main.qml")); QObject::connect( &engine, &QQmlApplicationEngine::objectCreated, &app, diff --git a/ui/GearShiftInfo.qml b/ui/GearShiftInfo.qml index 280c960..d449032 100644 --- a/ui/GearShiftInfo.qml +++ b/ui/GearShiftInfo.qml @@ -1,5 +1,5 @@ import QtQuick 2.15 -import com.example.gearPosition 1.0 +// import com.example.gearPosition 1.0 Column { spacing: 10 @@ -8,24 +8,24 @@ Column { font.family: "Open Sans" text: "P" font.pixelSize: app.letterSize - color: instrumentCluster.gear === 1 ? "blue" : "white" + color: instrumentCluster.gear.park ? "blue" : "white" } Text { font.family: "Open Sans" text: "R" font.pixelSize: app.letterSize - color: instrumentCluster.gear === 2 ? "blue" : "white" + color: instrumentCluster.gear.reverse ? "blue" : "white" } Text { font.family: "Open Sans" text: "N" font.pixelSize: app.letterSize - color: instrumentCluster.gear === 3 ? "blue" : "white" + color: instrumentCluster.gear.neutral ? "blue" : "white" } Text { font.family: "Open Sans" text: "D" font.pixelSize: app.letterSize - color: instrumentCluster.gear === 4 ? "blue" : "white" + color: instrumentCluster.gear.drive ? "blue" : "white" } } \ No newline at end of file From a756d2ae938ae30b2a416c11572cb0fbd15fbfca Mon Sep 17 00:00:00 2001 From: ziliolu Date: Tue, 21 Jan 2025 16:29:02 +0000 Subject: [PATCH 14/23] lights blinking --- assets/icons/cloud.png | Bin 0 -> 72889 bytes include/InstrumentCluster.hpp | 72 ++++++++++++++++++-------------- src/InstrumentCluster.cpp | 35 +++++++++------- src/main.cpp | 8 ++++ ui/FootbarInfo.qml | 76 +++++++++++++++++----------------- ui/GearShiftInfo.qml | 14 +++---- ui/LightInfo.qml | 66 +++++++++++++++++++---------- ui/Main.qml | 32 ++++++-------- ui/TimeInfo.qml | 3 -- ui/TurnSignalRight.qml | 32 ++++++++++++++ ui/TurnSignals.qml | 36 +++++++++------- 11 files changed, 224 insertions(+), 150 deletions(-) create mode 100644 assets/icons/cloud.png create mode 100644 ui/TurnSignalRight.qml diff --git a/assets/icons/cloud.png b/assets/icons/cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..8aea0dbde89e456c40344df8d5a316108a273640 GIT binary patch literal 72889 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 L_<`(wwgLYOqZ*e$ literal 0 HcmV?d00001 diff --git a/include/InstrumentCluster.hpp b/include/InstrumentCluster.hpp index 1973207..0532f91 100644 --- a/include/InstrumentCluster.hpp +++ b/include/InstrumentCluster.hpp @@ -10,7 +10,6 @@ using namespace zenoh; struct LightStatus { Q_GADGET - public: Q_PROPERTY(bool rightBlinker MEMBER rightBlinker) Q_PROPERTY(bool leftBlinker MEMBER leftBlinker) Q_PROPERTY(bool lowBeam MEMBER lowBeam) @@ -20,6 +19,7 @@ struct LightStatus Q_PROPERTY(bool hazardLight MEMBER hazardLight) Q_PROPERTY(bool parkingLight MEMBER parkingLight) + public: bool rightBlinker{false}; bool leftBlinker{false}; bool lowBeam{false}; @@ -42,44 +42,55 @@ struct LightStatus }; Q_DECLARE_METATYPE(LightStatus) -struct BatteryStatus +// struct BatteryStatus +// { +// int percentage; +// int autonomy; + +// bool operator!=(const BatteryStatus& battery) const +// { +// return percentage != battery.percentage || autonomy != +// battery.autonomy; +// } +// }; + +// enum GearPosition +// { +// PARK, +// REVERSE, +// NEUTRAL, +// DRIVE +// }; +// Q_ENUM(GearPosition) + +class Enums { Q_GADGET - public: - Q_PROPERTY(bool percentage MEMBER percentage) - Q_PROPERTY(bool autonomy MEMBER autonomy) - int percentage; - int autonomy; - - bool operator!=(const BatteryStatus& battery) const + public: + enum class GearPosition { - return percentage != battery.percentage || autonomy != battery.autonomy; - } -}; -Q_DECLARE_METATYPE(BatteryStatus) - -enum GearPosition -{ - PARK, - REVERSE, - NEUTRAL, - DRIVE + PARK, + REVERSE, + NEUTRAL, + DRIVE + }; + Q_ENUM(GearPosition) }; class InstrumentCluster : public QObject { Q_OBJECT Q_PROPERTY(int speed READ getSpeed NOTIFY speedChanged) - Q_PROPERTY(BatteryStatus battery READ getBattery NOTIFY batteryChanged) + Q_PROPERTY(int battery READ getBattery NOTIFY batteryChanged) Q_PROPERTY(LightStatus lights READ getLights NOTIFY lightsChanged) - Q_PROPERTY(GearPosition gear READ getGear NOTIFY gearChanged) + Q_PROPERTY(Enums::GearPosition gear READ getGear NOTIFY gearChanged) private: int m_speed; - BatteryStatus m_battery; + int m_battery; LightStatus m_lights; - GearPosition m_gear; + Enums::GearPosition m_gear; Session m_session; Subscriber m_subSpeed; @@ -92,20 +103,21 @@ class InstrumentCluster : public QObject ~InstrumentCluster(); int getSpeed() const; - BatteryStatus getBattery() const; + int getBattery() const; LightStatus getLights() const; - GearPosition getGear() const; + Enums::GearPosition getGear() const; void setSpeed(int speed); - void setBattery(BatteryStatus battery); + void setBattery(int battery); void setLights(LightStatus lights); - void setGear(GearPosition gear); + void setGear(Enums::GearPosition gear); signals: void speedChanged(int speed); - void batteryChanged(BatteryStatus battery); + void batteryChanged(int battery); void lightsChanged(LightStatus lights); - void gearChanged(GearPosition gear); + void gearChanged(Enums::GearPosition gear); }; +Q_DECLARE_METATYPE(Enums::GearPosition) #endif // INSTRUMENTCLUSTER_HPP diff --git a/src/InstrumentCluster.cpp b/src/InstrumentCluster.cpp index 387ce06..c8e0dc6 100644 --- a/src/InstrumentCluster.cpp +++ b/src/InstrumentCluster.cpp @@ -8,7 +8,7 @@ InstrumentCluster::InstrumentCluster(QObject* parent) [this](const Sample& sample) { int speed = std::stoi(sample.get_payload().as_string()); - std::cout << "Sub speed" << std::endl; + // std::cout << "Sub speed" << std::endl; this->setSpeed(speed); }, closures::none)), @@ -16,10 +16,8 @@ InstrumentCluster::InstrumentCluster(QObject* parent) "seame/car/1/batterySensor", [this](const Sample& sample) { - BatteryStatus battery; - memcpy(&battery, sample.get_payload().as_string().c_str(), - sizeof(BatteryStatus)); - std::cout << "Sub battery" << std::endl; + int battery = std::stoi(sample.get_payload().as_string()); + // std::cout << "Sub battery" << std::endl; this->setBattery(battery); }, closures::none)), @@ -28,9 +26,15 @@ InstrumentCluster::InstrumentCluster(QObject* parent) [this](const Sample& sample) { LightStatus lights; - memcpy(&lights, sample.get_payload().as_string().c_str(), - sizeof(LightStatus)); - std::cout << "Sub lights" << std::endl; + lights.rightBlinker = (data & (1 << 0)) != 0; + lights.leftBlinker = (data & (1 << 1)) != 0; + lights.lowBeam = (data & (1 << 2)) != 0; + lights.highBeam = (data & (1 << 3)) != 0; + lights.frontFogLight = (data & (1 << 4)) != 0; + lights.rearFogLight = (data & (1 << 5)) != 0; + lights.hazardLight = (data & (1 << 6)) != 0; + lights.parkingLight = (data & (1 << 7)) != 0; + // std::cout << "Sub lights" << std::endl; this->setLights(lights); }, closures::none)), @@ -38,14 +42,17 @@ InstrumentCluster::InstrumentCluster(QObject* parent) "seame/car/1/gear", [this](const Sample& sample) { - GearPosition gear; + Enums::GearPosition gear; memcpy(&gear, sample.get_payload().as_string().c_str(), - sizeof(GearPosition)); - std::cout << "Sub gear" << std::endl; + sizeof(Enums::GearPosition)); + // std::cout << "Sub gear" << std::endl; + // std::cout << "Gear: " << gear << std::endl; + std::cout << "Gear: " << sample.get_payload().as_string().c_str() + << std::endl; this->setGear(gear); }, closures::none)), - m_speed(0), m_gear(GearPosition::PARK) + m_speed(0), m_gear(Enums::GearPosition::PARK) { } @@ -69,7 +76,7 @@ LightStatus InstrumentCluster::getLights() const return m_lights; } -GearPosition InstrumentCluster::getGear() const +Enums::GearPosition InstrumentCluster::getGear() const { return m_gear; } @@ -101,7 +108,7 @@ void InstrumentCluster::setLights(LightStatus lights) } } -void InstrumentCluster::setGear(GearPosition gear) +void InstrumentCluster::setGear(Enums::GearPosition gear) { if (m_gear != gear) { diff --git a/src/main.cpp b/src/main.cpp index 24db6ad..dd2617e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,6 +8,14 @@ int main(int argc, char* argv[]) QGuiApplication app(argc, argv); QQmlApplicationEngine engine; + qmlRegisterType("com.example", 1, 0, + "InstrumentCluster"); + engine.addImportPath("qrc:/LightInfo.qml"); + engine.addImportPath("qrc:/FootbarInfo.qml"); + engine.addImportPath("qrc:/TurnSignalLeft.qml"); + engine.addImportPath("qrc:/TurnSignalRight.qml"); + engine.addImportPath("qrc:/GearShiftInfo.qml"); + InstrumentCluster instrumentCluster; engine.rootContext()->setContextProperty("instrumentCluster", &instrumentCluster); diff --git a/ui/FootbarInfo.qml b/ui/FootbarInfo.qml index 082723f..029b9fc 100644 --- a/ui/FootbarInfo.qml +++ b/ui/FootbarInfo.qml @@ -7,48 +7,48 @@ Row { padding: 10 Column { - Row { - - anchors.verticalCenterOffset: -10 - Image { - id: batteryLevel - // source: { - // if (canBusHandler.battery >= 80) { - // "qrc:/assets/icons/battery-5.png" - // } else if (canBusHandler.battery >= 60) { - // "qrc:/assets/icons/battery-4.png" - // } else if (canBusHandler.battery >= 40) { - // "qrc:/assets/icons/battery-3.png" - // } else if (canBusHandler.battery >= 20) { - // "qrc:/assets/icons/battery-2.png" - // } else { - // "qrc:/assets/icons/battery-1.png" - // } - // } - width: 80 - visible: true - fillMode: Image.PreserveAspectFit - source: "qrc:/assets/icons/battery-4.png" - // Adjust this value to move the image up or down - } - } // Row { - // spacing: 5 - // Text { - // font.family: "Open Sans" - // //text: canBusHandler.battery - // text: "100" - // font.pixelSize: app.letterSize - // color: "white" - // } - // Text { - // font.family: "Open Sans" - // text: "%" - // font.pixelSize: app.letterSize - // color: "gray" + // anchors.verticalCenterOffset: -10 + // Image { + // id: batteryLevel + // source: Binding { + // value: { + // if (canBusHandler.battery >= 80) { + // "qrc:/assets/icons/battery-5.png" + // } else if (canBusHandler.battery >= 60) { + // "qrc:/assets/icons/battery-4.png" + // } else if (canBusHandler.battery >= 40) { + // "qrc:/assets/icons/battery-3.png" + // } else if (canBusHandler.battery >= 20) { + // "qrc:/assets/icons/battery-2.png" + // } else { + // "qrc:/assets/icons/battery-1.png" + // } + // } + // } + // width: 80 + // visible: true + // fillMode: Image.PreserveAspectFit + // // Adjust this value to move the image up or down // } // } + Row { + spacing: 5 + + Text { + font.family: "Open Sans" + text: instrumentCluster.battery + font.pixelSize: app.letterSize + color: "white" + } + Text { + font.family: "Open Sans" + text: "%" + font.pixelSize: app.letterSize + color: "gray" + } + } } Column { diff --git a/ui/GearShiftInfo.qml b/ui/GearShiftInfo.qml index a991427..c71bd0e 100644 --- a/ui/GearShiftInfo.qml +++ b/ui/GearShiftInfo.qml @@ -1,34 +1,34 @@ import QtQuick 2.15 -Column { +Row { spacing: 10 Text { font.family: "Open Sans" text: "P" font.pixelSize: app.letterSize - // color: instrumentCluster.gear === GearPosition.PARK ? "blue" : "white" - color: "white" + color: instrumentCluster.gear === GearPosition.PARK ? "blue" : "white" + // color: "white" } Text { font.family: "Open Sans" text: "R" font.pixelSize: app.letterSize - // color: instrumentCluster.gear === GearPosition.REVERSE ? "blue" : "white" - color: "white" + color: instrumentCluster.gear === GearPosition.REVERSE ? "blue" : "white" + // color: "white" } Text { font.family: "Open Sans" text: "N" font.pixelSize: app.letterSize - color: instrumentCluster.gear === GearPosition.NEUTRAL ? "blue" : "white" + // color: instrumentCluster.gear === GearPosition.NEUTRAL ? "blue" : "white" color: "white" } Text { font.family: "Open Sans" text: "D" font.pixelSize: app.letterSize - color: instrumentCluster.gear === GearPosition.DRIVE ? "blue" : "white" + // color: instrumentCluster.gear === GearPosition.DRIVE ? "blue" : "white" color: "white" } } \ No newline at end of file diff --git a/ui/LightInfo.qml b/ui/LightInfo.qml index 26b2221..297bfcb 100644 --- a/ui/LightInfo.qml +++ b/ui/LightInfo.qml @@ -3,43 +3,63 @@ import QtQuick 2.15 Column { spacing: 10 - Image { - id: lowBeamSignal - source: "qrc:/assets/icons/low_beam_on.png" + Rectangle { width: app.iconWidth height: app.iconHeight - visible: instrumentCluster.lights.lowBeam + color: "transparent" // Keeps the placeholder invisible + Image { + id: lowBeamSignal + anchors.centerIn: parent + source: "qrc:/assets/icons/low_beam_on.png" + visible: instrumentCluster.lights.lowBeam + } } - Image { - id: highBeamSignal - source: "qrc:/assets/icons/high_beam_on.png" + Rectangle { width: app.iconWidth height: app.iconHeight - visible: instrumentCluster.lights.highBeam + color: "transparent" + Image { + id: highBeamSignal + anchors.centerIn: parent + source: "qrc:/assets/icons/high_beam_on.png" + visible: instrumentCluster.lights.highBeam + } } - Image { - id: frontFogSignal - source: "qrc:/assets/icons/front_fog_on.png" + Rectangle { width: app.iconWidth height: app.iconHeight - visible: instrumentCluster.lights.frontFogLight + color: "transparent" + Image { + id: frontFogSignal + anchors.centerIn: parent + source: "qrc:/assets/icons/front_fog_on.png" + visible: instrumentCluster.lights.frontFogLight + } } - Image { - id: parkingLightsSignal - source: "qrc:/assets/icons/parking_lights_on.png" + Rectangle { width: app.iconWidth height: app.iconHeight - visible: instrumentCluster.lights.parkingLight + color: "transparent" + Image { + id: parkingLightsSignal + anchors.centerIn: parent + source: "qrc:/assets/icons/parking_lights_on.png" + visible: instrumentCluster.lights.parkingLight + } } - // Image { - // id: backFogSignal - // source: "qrc:/assets/icons/back_fog_on.png" - // width: app.iconWidth - // height: app.iconHeight - // visible: instrumentCluster.lights.backFogLight - // } + Rectangle { + width: app.iconWidth + height: app.iconHeight + color: "transparent" + Image { + id: backFogSignal + anchors.centerIn: parent + source: "qrc:/assets/icons/back_fog_on.png" + visible: instrumentCluster.lights.rearFogLight + } + } } diff --git a/ui/Main.qml b/ui/Main.qml index 4091dfa..80ceeab 100644 --- a/ui/Main.qml +++ b/ui/Main.qml @@ -24,11 +24,9 @@ ApplicationWindow { anchors.fill: parent visible: app.carClusterVisible - // Background Image - Image { - source: "qrc:/assets/images/car-background.png" - // fillMode: Image.PreserveAspectCrop - anchors.fill: parent + gradient: Gradient { + GradientStop { position: 0.0; color: "#000000" } // Start color + GradientStop { position: 1.0; color: "#FFFFFF" } // End color } Row { @@ -38,21 +36,15 @@ ApplicationWindow { anchors.leftMargin: 3 spacing: 10 - // Left Turn Signal - TurnSignals {} - - // Speed Display (example) + TurnSignalLeft {} SpeedDisplay {} - - // Right Turn Signal - TurnSignals {} + TurnSignalRight {} } GearShiftInfo { - anchors.verticalCenter: parent.verticalCenter - anchors.verticalCenterOffset: -10 - anchors.left: parent.left - anchors.leftMargin: 20 + anchors.bottom: parent.bottom + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottomMargin: 15 } LightInfo { @@ -68,15 +60,15 @@ ApplicationWindow { } FootbarInfo { - anchors.bottom: parent.bottom - anchors.bottomMargin: 0 + anchors.top: parent.top + anchors.topMargin: 0 anchors.left: parent.left anchors.leftMargin: 20 } TimeInfo { - anchors.bottom: parent.bottom - anchors.bottomMargin: 5 + anchors.top: parent.top + anchors.topMargin: 5 anchors.right: parent.right anchors.rightMargin: 20 } diff --git a/ui/TimeInfo.qml b/ui/TimeInfo.qml index af12b9b..2ec32e4 100644 --- a/ui/TimeInfo.qml +++ b/ui/TimeInfo.qml @@ -3,7 +3,6 @@ import QtQuick 2.15 Row { spacing: 5 - // Hora Text { font.family: "Open Sans" id: timeDisplay @@ -13,7 +12,6 @@ Row { opacity: 0.0 } - // AM/PM Text { font.family: "Open Sans" id: amPmDisplay @@ -37,7 +35,6 @@ Row { } } - // Funções encapsuladas em um QtObject QtObject { id: timeHelper diff --git a/ui/TurnSignalRight.qml b/ui/TurnSignalRight.qml new file mode 100644 index 0000000..a2592fd --- /dev/null +++ b/ui/TurnSignalRight.qml @@ -0,0 +1,32 @@ +import QtQuick 2.15 + +Row { + id: root + spacing: 10 + + Rectangle { + width: 70 + height: 70 + color: "transparent" + Image { + anchors.verticalCenter: parent.verticalCenter + id: turnSignal + source: "qrc:/assets/icons/turn_right_on.png" + width: 70 + height: 70 + opacity: 0.0 + visible: instrumentCluster.lights.rightBlinker + + Timer { + id: blinkTimer + interval: 500 + running: instrumentCluster.lights.rightBlinker + repeat: true + onTriggered: { + // Toggle opacity when blinking + turnSignal.opacity = turnSignal.opacity === 1.0 ? 0.0 : 1.0; + } + } + } + } +} diff --git a/ui/TurnSignals.qml b/ui/TurnSignals.qml index 4471a34..efb017e 100644 --- a/ui/TurnSignals.qml +++ b/ui/TurnSignals.qml @@ -4,23 +4,29 @@ Row { id: root spacing: 10 - Image { - anchors.verticalCenter: parent.verticalCenter - id: turnSignal - source: instrumentCluster.lights.rightBlinker ? "qrc:/assets/icons/turn_right_on.png" : "qrc:/assets/icons/turn_left_on.png" + Rectangle { width: 70 height: 70 - opacity: 0.0 - visible: instrumentCluster.lights.rightBlinker || instrumentCluster.lights.leftBlinker - - Timer { - id: blinkTimer - interval: 500 - running: instrumentCluster.lights.rightBlinker || instrumentCluster.lights.leftBlinker // Start the timer if any blinker is on - repeat: true - onTriggered: { - // Toggle opacity when blinking - turnSignal.opacity = turnSignal.opacity === 1.0 ? 0.0 : 1.0; + color: "transparent" + + Image { + anchors.verticalCenter: parent.verticalCenter + id: turnSignal + source: "qrc:/assets/icons/turn_left_on.png" + width: 70 + height: 70 + opacity: 0.0 + visible: instrumentCluster.lights.leftBlinker + + Timer { + id: blinkTimer + interval: 500 + running: instrumentCluster.lights.leftBlinker + repeat: true + onTriggered: { + // Toggle opacity when blinking + turnSignal.opacity = turnSignal.opacity === 1.0 ? 0.0 : 1.0; + } } } } From 06ba7648317f114a9a5a9cb113d6c7c8fe491fdb Mon Sep 17 00:00:00 2001 From: Rui Pires Date: Tue, 21 Jan 2025 18:38:13 +0000 Subject: [PATCH 15/23] Add middleware configuration and update InstrumentCluster to use JSON for session management; enhance battery display in FootbarInfo.qml --- MiddleWare/middleWare.json | 17 +++++++++ MiddleWare/src/main.cpp | 2 +- src/InstrumentCluster.cpp | 2 +- src/main.cpp | 2 + ui/FootbarInfo.qml | 77 +++++++++++++++++++------------------- 5 files changed, 59 insertions(+), 41 deletions(-) create mode 100644 MiddleWare/middleWare.json diff --git a/MiddleWare/middleWare.json b/MiddleWare/middleWare.json new file mode 100644 index 0000000..6ec92e9 --- /dev/null +++ b/MiddleWare/middleWare.json @@ -0,0 +1,17 @@ +{ + "mode": "peer", + "connect": { + "endpoints": ["tcp/127.0.0.1:7447"] + }, + "listen": { + "endpoints": ["tcp/127.0.0.1:7448"] + }, + "scouting": { + "multicast": { + "enabled": false + }, + "gossip": { + "enabled": false + } + } +} \ No newline at end of file diff --git a/MiddleWare/src/main.cpp b/MiddleWare/src/main.cpp index 2d77b77..459b3cb 100644 --- a/MiddleWare/src/main.cpp +++ b/MiddleWare/src/main.cpp @@ -39,7 +39,7 @@ int main(int argc, char** argv) std::cout << "CAN socket bound to can0 interface successfully." << std::endl; - Config config = Config::create_default(); + Config config = Config::from_file("middleWare.json"); auto session = Session::open(std::move(config)); auto pubSpeed = diff --git a/src/InstrumentCluster.cpp b/src/InstrumentCluster.cpp index 5a3f92f..b1582a7 100644 --- a/src/InstrumentCluster.cpp +++ b/src/InstrumentCluster.cpp @@ -2,7 +2,7 @@ InstrumentCluster::InstrumentCluster(QObject* parent) : QObject(parent), - m_session(Session::open(std::move(Config::create_default()))), + m_session(Session::open(std::move(Config::from_file("local.json")))), m_subSpeed(m_session.declare_subscriber( "seame/car/1/speedSensor", [this](const Sample& sample) diff --git a/src/main.cpp b/src/main.cpp index da2cbcd..d6179c9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,6 +3,8 @@ #include #include "InstrumentCluster.hpp" +using namespace zenoh; + int main(int argc, char* argv[]) { QGuiApplication app(argc, argv); diff --git a/ui/FootbarInfo.qml b/ui/FootbarInfo.qml index 082723f..76cf380 100644 --- a/ui/FootbarInfo.qml +++ b/ui/FootbarInfo.qml @@ -7,48 +7,47 @@ Row { padding: 10 Column { - Row { - - anchors.verticalCenterOffset: -10 - Image { - id: batteryLevel - // source: { - // if (canBusHandler.battery >= 80) { - // "qrc:/assets/icons/battery-5.png" - // } else if (canBusHandler.battery >= 60) { - // "qrc:/assets/icons/battery-4.png" - // } else if (canBusHandler.battery >= 40) { - // "qrc:/assets/icons/battery-3.png" - // } else if (canBusHandler.battery >= 20) { - // "qrc:/assets/icons/battery-2.png" - // } else { - // "qrc:/assets/icons/battery-1.png" - // } - // } - width: 80 - visible: true - fillMode: Image.PreserveAspectFit - source: "qrc:/assets/icons/battery-4.png" - // Adjust this value to move the image up or down - } - } // Row { - // spacing: 5 - // Text { - // font.family: "Open Sans" - // //text: canBusHandler.battery - // text: "100" - // font.pixelSize: app.letterSize - // color: "white" - // } - // Text { - // font.family: "Open Sans" - // text: "%" - // font.pixelSize: app.letterSize - // color: "gray" + // anchors.verticalCenterOffset: -10 + // Image { + // id: batteryLevel + // // source: { + // // if (canBusHandler.battery >= 80) { + // // "qrc:/assets/icons/battery-5.png" + // // } else if (canBusHandler.battery >= 60) { + // // "qrc:/assets/icons/battery-4.png" + // // } else if (canBusHandler.battery >= 40) { + // // "qrc:/assets/icons/battery-3.png" + // // } else if (canBusHandler.battery >= 20) { + // // "qrc:/assets/icons/battery-2.png" + // // } else { + // // "qrc:/assets/icons/battery-1.png" + // // } + // // } + // width: 80 + // visible: true + // fillMode: Image.PreserveAspectFit + // source: "qrc:/assets/icons/battery-4.png" + // // Adjust this value to move the image up or down // } // } + Row { + spacing: 5 + + Text { + font.family: "Open Sans" + text: instrumentCluster.battery.percentage + font.pixelSize: app.letterSize + color: "white" + } + Text { + font.family: "Open Sans" + text: "%" + font.pixelSize: app.letterSize + color: "gray" + } + } } Column { @@ -57,7 +56,7 @@ Row { spacing: 5 Text { font.family: "Open Sans" - text: "256" + text: instrumentCluster.battery.autonomy font.pixelSize: app.letterSize color: "white" } From 083a3e18d73c4d68046b01d7479cbdc69e4ed729 Mon Sep 17 00:00:00 2001 From: Rui Pires Date: Tue, 21 Jan 2025 18:53:27 +0000 Subject: [PATCH 16/23] Refactor InstrumentCluster to support configuration file input; update main application to handle dynamic instantiation and improve session management --- MiddleWare/CMakeLists.txt | 4 +- .../MiddleWareConfig.json} | 0 MiddleWare/src/main.cpp | 2 +- config/InstrumentClusterConfig.json | 17 +++++ include/InstrumentCluster.hpp | 2 + src/InstrumentCluster.cpp | 67 ++++++++++++++++++- src/main.cpp | 16 ++++- 7 files changed, 101 insertions(+), 7 deletions(-) rename MiddleWare/{middleWare.json => config/MiddleWareConfig.json} (100%) create mode 100644 config/InstrumentClusterConfig.json diff --git a/MiddleWare/CMakeLists.txt b/MiddleWare/CMakeLists.txt index 8e8ffa4..b7e4c90 100644 --- a/MiddleWare/CMakeLists.txt +++ b/MiddleWare/CMakeLists.txt @@ -22,8 +22,8 @@ find_package(zenohcxx REQUIRED) # include_directories(${libs_SOURCE_DIR}/Communication/CAN/include) # include_directories(${libs_SOURCE_DIR}/Peripherals/INA219/include) -add_executable(middleWareApp +add_executable(MiddleWareApp ./src/main.cpp ) -target_link_libraries(middleWareApp PRIVATE zenohcxx::zenohc) +target_link_libraries(MiddleWareApp PRIVATE zenohcxx::zenohc) diff --git a/MiddleWare/middleWare.json b/MiddleWare/config/MiddleWareConfig.json similarity index 100% rename from MiddleWare/middleWare.json rename to MiddleWare/config/MiddleWareConfig.json diff --git a/MiddleWare/src/main.cpp b/MiddleWare/src/main.cpp index 459b3cb..f0d4887 100644 --- a/MiddleWare/src/main.cpp +++ b/MiddleWare/src/main.cpp @@ -39,7 +39,7 @@ int main(int argc, char** argv) std::cout << "CAN socket bound to can0 interface successfully." << std::endl; - Config config = Config::from_file("middleWare.json"); + Config config = Config::from_file("MiddleWareConfig.json"); auto session = Session::open(std::move(config)); auto pubSpeed = diff --git a/config/InstrumentClusterConfig.json b/config/InstrumentClusterConfig.json new file mode 100644 index 0000000..e63c57c --- /dev/null +++ b/config/InstrumentClusterConfig.json @@ -0,0 +1,17 @@ +{ + "mode": "peer", + "connect": { + "endpoints": [] + }, + "listen": { + "endpoints": ["tcp/127.0.0.1:7447"] + }, + "scouting": { + "multicast": { + "enabled": false + }, + "gossip": { + "enabled": false + } + } +} \ No newline at end of file diff --git a/include/InstrumentCluster.hpp b/include/InstrumentCluster.hpp index 4a94553..89f23a3 100644 --- a/include/InstrumentCluster.hpp +++ b/include/InstrumentCluster.hpp @@ -103,6 +103,8 @@ class InstrumentCluster : public QObject public: explicit InstrumentCluster(QObject* parent = nullptr); + explicit InstrumentCluster(const std::string& configFile, + QObject* parent = nullptr); ~InstrumentCluster(); int getSpeed() const; diff --git a/src/InstrumentCluster.cpp b/src/InstrumentCluster.cpp index b1582a7..c6911f9 100644 --- a/src/InstrumentCluster.cpp +++ b/src/InstrumentCluster.cpp @@ -2,7 +2,72 @@ InstrumentCluster::InstrumentCluster(QObject* parent) : QObject(parent), - m_session(Session::open(std::move(Config::from_file("local.json")))), + m_session(Session::open(std::move(Config::create_default()))), + m_subSpeed(m_session.declare_subscriber( + "seame/car/1/speedSensor", + [this](const Sample& sample) + { + int speed = std::stoi(sample.get_payload().as_string()); + std::cout << "Sub speed" << std::endl; + this->setSpeed(speed); + }, + closures::none)), + m_subBattery(m_session.declare_subscriber( + "seame/car/1/batterySensor", + [this](const Sample& sample) + { + int batteryPercentage = + std::stoi(sample.get_payload().as_string()); + BatteryStatus battery; + battery.percentage = batteryPercentage; + std::cout << "Sub battery" << std::endl; + this->setBattery(battery); + }, + closures::none)), + m_subLights(m_session.declare_subscriber( + "seame/car/1/lights", + [this](const Sample& sample) + { + uint8_t data = + static_cast(sample.get_payload().as_string()[0]); + + LightStatus lights; + lights.rightBlinker = (data & (1 << 0)) != 0; + lights.leftBlinker = (data & (1 << 1)) != 0; + lights.lowBeam = (data & (1 << 2)) != 0; + lights.highBeam = (data & (1 << 3)) != 0; + lights.frontFogLight = (data & (1 << 4)) != 0; + lights.rearFogLight = (data & (1 << 5)) != 0; + lights.hazardLight = (data & (1 << 6)) != 0; + lights.parkingLight = (data & (1 << 7)) != 0; + std::cout << "Sub lights" << std::endl; + this->setLights(lights); + }, + closures::none)), + m_subGear(m_session.declare_subscriber( + "seame/car/1/gear", + [this](const Sample& sample) + { + uint8_t data = + static_cast(sample.get_payload().as_string()[0]); + + GearPosition gear; + gear.park = (data & (1 << 0)) != 0; + gear.reverse = (data & (1 << 1)) != 0; + gear.neutral = (data & (1 << 2)) != 0; + gear.drive = (data & (1 << 3)) != 0; + std::cout << "Sub gear" << std::endl; + this->setGear(gear); + }, + closures::none)), + m_speed(0) +{ +} + +InstrumentCluster::InstrumentCluster(const std::string& configFile, + QObject* parent) + : QObject(parent), + m_session(Session::open(std::move(Config::from_file(configFile)))), m_subSpeed(m_session.declare_subscriber( "seame/car/1/speedSensor", [this](const Sample& sample) diff --git a/src/main.cpp b/src/main.cpp index d6179c9..6cbd359 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -10,9 +10,17 @@ int main(int argc, char* argv[]) QGuiApplication app(argc, argv); QQmlApplicationEngine engine; - InstrumentCluster instrumentCluster; + InstrumentCluster* instrumentCluster; + if (argc == 2) + { + instrumentCluster = new InstrumentCluster(argv[1]); + } + else + { + instrumentCluster = new InstrumentCluster(); + } engine.rootContext()->setContextProperty("instrumentCluster", - &instrumentCluster); + instrumentCluster); const QUrl url(QStringLiteral("qrc:/Main.qml")); QObject::connect( @@ -25,5 +33,7 @@ int main(int argc, char* argv[]) Qt::QueuedConnection); engine.load(url); - return app.exec(); + int result = app.exec(); + delete instrumentCluster; + return result; } From 5754a49504afa3f7623185820de749fd0232e6c6 Mon Sep 17 00:00:00 2001 From: ziliolu Date: Wed, 22 Jan 2025 14:50:16 +0000 Subject: [PATCH 17/23] dealing with lights --- assets/icons/cloud.png | Bin 72889 -> 60030 bytes ui/FootbarInfo.qml | 12 +++++++++++- ui/LightInfo.qml | 14 ++++++++++++-- ui/Main.qml | 19 ++++++++----------- ui/resources.qrc | 1 + 5 files changed, 32 insertions(+), 14 deletions(-) diff --git a/assets/icons/cloud.png b/assets/icons/cloud.png index 8aea0dbde89e456c40344df8d5a316108a273640..5912e800371bd7a3af6003bf068a9b50f3d8ddfc 100644 GIT binary patch literal 60030 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 BR7C&) literal 72889 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 L_<`(wwgLYOqZ*e$ diff --git a/ui/FootbarInfo.qml b/ui/FootbarInfo.qml index 029b9fc..535ca1e 100644 --- a/ui/FootbarInfo.qml +++ b/ui/FootbarInfo.qml @@ -38,7 +38,7 @@ Row { Text { font.family: "Open Sans" - text: instrumentCluster.battery + text: instrumentCluster.battery.percentage font.pixelSize: app.letterSize color: "white" } @@ -73,6 +73,16 @@ Row { Row { spacing: 5 + + Image { + id: cloudIcon + source: "qrc:/assets/icons/cloud.png" + width: app.iconWidth / 2 + height: app.iconHeight / 2 + visible: true + fillMode: Image.PreserveAspectFit + } + Text { font.family: "Open Sans" text: "22°" diff --git a/ui/LightInfo.qml b/ui/LightInfo.qml index 297bfcb..ed819ee 100644 --- a/ui/LightInfo.qml +++ b/ui/LightInfo.qml @@ -1,7 +1,7 @@ import QtQuick 2.15 -Column { - spacing: 10 +Row { + spacing: 40 Rectangle { width: app.iconWidth @@ -10,6 +10,8 @@ Column { Image { id: lowBeamSignal anchors.centerIn: parent + width: parent.width + height: parent.height source: "qrc:/assets/icons/low_beam_on.png" visible: instrumentCluster.lights.lowBeam } @@ -22,6 +24,8 @@ Column { Image { id: highBeamSignal anchors.centerIn: parent + width: parent.width + height: parent.height source: "qrc:/assets/icons/high_beam_on.png" visible: instrumentCluster.lights.highBeam } @@ -34,6 +38,8 @@ Column { Image { id: frontFogSignal anchors.centerIn: parent + width: parent.width + height: parent.height source: "qrc:/assets/icons/front_fog_on.png" visible: instrumentCluster.lights.frontFogLight } @@ -46,6 +52,8 @@ Column { Image { id: parkingLightsSignal anchors.centerIn: parent + width: parent.width + height: parent.height source: "qrc:/assets/icons/parking_lights_on.png" visible: instrumentCluster.lights.parkingLight } @@ -58,6 +66,8 @@ Column { Image { id: backFogSignal anchors.centerIn: parent + width: parent.width + height: parent.height source: "qrc:/assets/icons/back_fog_on.png" visible: instrumentCluster.lights.rearFogLight } diff --git a/ui/Main.qml b/ui/Main.qml index b3c5179..c81c8c5 100644 --- a/ui/Main.qml +++ b/ui/Main.qml @@ -11,8 +11,8 @@ ApplicationWindow { property int letterSize: 25 property int letterSizeLoaded: 30 - property int iconWidth: 40 - property int iconHeight: 40 + property int iconWidth: 10 + property int iconHeight: 10 property bool carClusterVisible: true property bool showSplash: true @@ -32,8 +32,7 @@ ApplicationWindow { Rectangle { anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.left - anchors.leftMargin: 200 + anchors.horizontalCenter: parent.horizontalCenter width: 100 height: 100 @@ -47,9 +46,8 @@ ApplicationWindow { } Row { anchors.verticalCenter: parent.verticalCenter - anchors.verticalCenterOffset: -110 - anchors.horizontalCenter: parent.horizontalCenter - anchors.leftMargin: 3 + anchors.right: parent.right + anchors.rightMargin: 20 spacing: 10 TurnSignalLeft {} @@ -64,10 +62,9 @@ ApplicationWindow { } LightInfo { - anchors.verticalCenter: parent.verticalCenter - anchors.verticalCenterOffset: -10 - anchors.right: parent.right - anchors.rightMargin: 20 + anchors.top: parent.top + anchors.horizontalCenter: parent.horizontalCenter + anchors.topMargin: 15 } FootbarInfo { diff --git a/ui/resources.qrc b/ui/resources.qrc index 1aeb713..58fa973 100644 --- a/ui/resources.qrc +++ b/ui/resources.qrc @@ -26,6 +26,7 @@ ../assets/icons/battery-3.png ../assets/icons/battery-4.png ../assets/icons/battery-5.png + ../assets/icons/cloud.png ../assets/images/car.png From a96f28af23a7b6dbb04513b4de1b11cb846f9e5e Mon Sep 17 00:00:00 2001 From: Rui Pires Date: Wed, 22 Jan 2025 18:14:37 +0000 Subject: [PATCH 18/23] Enhance main application to support command-line configuration file input; fallback to default configuration if no file is provided --- MiddleWare/src/main.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/MiddleWare/src/main.cpp b/MiddleWare/src/main.cpp index f0d4887..2094401 100644 --- a/MiddleWare/src/main.cpp +++ b/MiddleWare/src/main.cpp @@ -39,8 +39,12 @@ int main(int argc, char** argv) std::cout << "CAN socket bound to can0 interface successfully." << std::endl; - Config config = Config::from_file("MiddleWareConfig.json"); - auto session = Session::open(std::move(config)); + auto config = Config::create_default(); + if (argc == 2) + { + config = Config::from_file(argv[1]); + } + auto session = Session::open(std::move(config)); auto pubSpeed = session.declare_publisher(KeyExpr("seame/car/1/speedSensor")); From 635eabc07579e08db1c0502b598035cf32c7bf2d Mon Sep 17 00:00:00 2001 From: ziliolu Date: Wed, 22 Jan 2025 19:07:47 +0000 Subject: [PATCH 19/23] Add clock icon to TimeInfo, adjust spacing in multiple QML files, and introduce CircularProgressBar component --- assets/icons/cloud.png | Bin 60030 -> 1702 bytes assets/icons/watch.png | Bin 0 -> 2535 bytes ui/CircularProgressBar.qml | 67 ++++++++++++++++++++++++++++++ ui/FootbarInfo.qml | 73 ++++----------------------------- ui/GearShiftInfo.qml | 8 +++- ui/LightInfo.qml | 18 +++++--- ui/Main.qml | 82 ++++++++++++++++++++++++++++--------- ui/SpeedDisplay.qml | 1 + ui/TimeInfo.qml | 14 +++++++ ui/resources.qrc | 3 +- 10 files changed, 173 insertions(+), 93 deletions(-) create mode 100644 assets/icons/watch.png create mode 100644 ui/CircularProgressBar.qml diff --git a/assets/icons/cloud.png b/assets/icons/cloud.png index 5912e800371bd7a3af6003bf068a9b50f3d8ddfc..bf331327a227878a0a8eea8032043a70bc453df8 100644 GIT binary patch literal 1702 zcmV;X23h%uP)xZ*qF{_oYw2kliDIxQ#wY|(6ao|rL?i@b2#2WP zfpvSkNka*0O*ASk;z2+Z8`gM$O1+lWHa+~k&CX`A$Ii}7o89S5@-j2ue&0L(?|t9A z?|o|MhsHvV-rin^ zh_~5nt=xouqRkl>7gwH@mDM&Jstx%RsI9F{?e6YggkeP(8n4DE`ktci+c7aQ>$9`7 zkEj`=wa<_NAcl8!b*;dVLPa?Y+arc?Kgj(zhr@9~ers)Q9Yfm%JYGY4G4~k(2E73g zs{rDtRwD-+HzWX5R#ui^$hH8%rG)j1nVFe?s4>FjawT?lb}pdrvr2#X&C1QqeM`;w zQ2H1SKvh-M^C<9?PlKR3)z#Ixc)bd0=Tn!SlasUG2<86I1CZ~a?R{wn0Osd%yitmv-Gt>m!2}xd zJ0N@kpKAeO9w2Pd!&4UkWOt6Js3X7FuDtGJjjCdx>hB$j05~7$X(0W9RTo< z79KK2GXS!=A?*J|i6~Olb4XSH(W-=&aeR3u5qV!T_9Or#YT=;^0K9)23_gUKP~c{* z3g{V!4zicH5GPzk1b(Z9m*xmSxNK`H@Ip27KTnHry<^a!5gxb8G{gyeweZsez+(v9 z1Z_sRJP-TDIc64-ZcU&uB}=^IHg+d0GU9>loIvT~cqvwnKKieM&|~#^0v_K!OX(?ahpp4000=e%ucL#!EH!OCRHuz!1?QEL_J>slFQLe&y5eQmIvX zrvMAzPHqo?jG^_ma0Eh0p3rR_06cALZf-uq?RKA}VKnF@McQf~D#$oHjWPS6V*oJD z#LcsxJkyFrsM&V@1IX3q*7WsY-SKRV!Mw0&H<&Q zt^lwVqvr;uh-L)=?@Q%Ks>m-9@lSXGU>%r%_r0D6gezGLzcV8M>~>{~?>)RB=}RW* z`@z2(1Q|KXzMl>U2$3{1Zid?0+CG4#&sGPwulF_DuyjZT-|&5ZOyXq}T)nk+G!uPHdWrZIS}t68MjmJ|!{vTMARa zMMv2;|HZ(Sk|*$W_%)Iu0*_zfTi7MjJ(K4qNX`*|3ACf%qG&@y!&x4Wr;LvCmCjO0 z;rSb=1%{`>5e#%Z551DnZxVNZPDA@D7WRIt$HB_t6JWFi%7N+G;b`{Da%HnGV zEAXg37-8F-PI2)v7%B%NVTXruFoMUw$Kz7p40@>sASkB@?O*{Ap^h_5Z7Tu{gEB%H wSrHJSjx$VcD*_CIGC~ literal 60030 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 BR7C&) diff --git a/assets/icons/watch.png b/assets/icons/watch.png new file mode 100644 index 0000000000000000000000000000000000000000..d10bfb5acd440b81d1da3f229e5def649b820319 GIT binary patch literal 2535 zcmV6-&foO9w>+5hIDpP&9%A6cNQ05eFKL5gdSV3n(LDx)m2< zu&8uWi>MW~BH}_RGDIzO;qU))Z*xm|eeb^8d*AaUCwHCmjsN-1{J!fu%!9OU-MRrW zF)^pXsu%g>0|yQq>+|_ixgI6<-0$H2Pp-f5_$_%8_Z2xgIR$Qu=W~NWadGkKC^Vv> zq2U}984xZHXzZhYG1oQFSl+*X|IOjj3RJJv04Ogn?^s=3JrPD@5&9I9A;SO6^J<>I z;aUYK+jzILO`A45_U+sEyUHadCU)k1N4|F;cjkL1axdVuUZtnL^1T8EqJeB$*$X6I$NaU)azX%X#WM^mp z;)K2<01)nOn9s1Z&?4?{5h_sKqN1WKz*t%Z z4cF&rkQ+ng6%qg_-T{K|k+aA<$)izTW*0T7prGIel%It_Nm#?X++Tu>)xiV|3IGTn z$-q+#AuVElhwxw!-V}^*B)%I9u2t|>_xuC^1_qNOC;%Y48l}&L&=!y##E82!7|}?6 z$6C{o^CM(VL5>B0a7|0{vWnBoR9#i<+oZxWVpIl?Z*8tPdvosInK4ki2{0br`@PsMyH#Bse2vwz`#qq#*; zKzN+T+hoD9v9V|L>(}q+gY{?zfacfj+qYNJ`duiz46`5Omhu37DF8RXL(^-kr~Lf< z*o1_HLI`ID8WfuWfayPg@|xebkkdk$O2U<#7OJOi9Xt}kr4g)NX=!Pfy1F`Tu{Awj zf;GQttRH*e6DRe%9X-aV|0l)zfhfmPi$cYd%>YeEHh<2s`&@~_c2sD?E z*OA{qsF6;XhEmrn03-__YzBlAxxES9o-yTXM4m-NR|=?5Ok7-C&&TC8Ax696!g zoqTN1bkUpXq9Rl!oRo_I0OQbc0Wvo(ll>NeAj8$~$>kt(rW2*?)b$#Gii(Ql-Me>J zY5Pn=chkDS4*;#df|r_;Z^8VZvZI8PvR(sVG`0?Mv`V~##-8OvX&-{f{8K>X7*O#a zRCZr4Eq zFBXD`^<>v|EFuAb(G9-i+7rF=1i(UWuI9yLEZ|w!wYD&b6aeO!hbR*TKp_C+@G!*d zW3EU60N)4E_dfKVtpRWc52+k`9haAvC*PcBDS`l)X9X(-z{O!YR#|{2Thc?JYVxKvy3zf9@(Ova z2>0ySBe&YW5$yt4pS-<&5afG2#JPR@_O0>)1OSK!0CoKu0q`d`a(tvR3&`o=S<-1u zZEbA{ARI$~tZ3V|ZC-kM`fj%cC@CpP<={s_89OuvY(;>sUYnt*q~TuIiL)AEJ-+|5 z@%{hnCI|q~9RPIRu|*b8#*KD>I`=PilW`#0iYP�vaNjGHaQU&U14{Lg!rgDEy{G z7GUlKuVg7KKR`qhAY=nVzHuJ;4ztp5w`L^(khkbX@?u$le^o?(m<|B%fq{HzzkrH-f>D#Ogh!EWDgxDF zx+zZ92q+x`01EQx$f-~o9^c@PBLEvVY)B#0RR>wlL1rq{cPSJu+s)=*%GZ7xwSFrIYf-FI$f6m+ozKfLO29-9>pvR@*J-V2&&5iXB8JR(U zQLLRtOvT{d2x`xT#4*YW(fZTT;U2{Li%79Eva+%i_R}N<3{A0Yl4=2AARrV)nSL#b zLnG=RgV)IotZjy{wviM1N_5e_6 zh$--R7$E#W9^~ceZ8%69-FFQ#x7U6j%k}Ri0;QnQSw>KS#)ICPMhp-Xb{2I>0iNt= zS7{oT+l$T9lwd*z1waIhRiaL6apRMiK{iFSCWWfJWC;lXQ)tZV zCGJP-ITZ79OWA|zBG(-Cbwe&&2Pn1x5CfQrk@nPz$uDJuoq#ob;gzyhK8#O;d7ej$ zpTt%Ejj?uvJ8c6X0f@3V1;rI>;}5998lI+GOb3WRyZ}P{QCf5SD1*Pc=XeIZ?RNQx z1%Szf7MO+*51G&Eg8(tpt?5!;T@FmA!1E$Qae0w$I(T_&2Lwj|7+vC26c-SU!Ij1; zauFl)J5FN`0J%5THVT@GTJLEnu0zfF1a&>?G^ool04CbT>GC8AYV=9-lY*~51PuN6 zTZJ;)c-|%7oPNLAxN+m*{6gD_@A_S~BW3(o%E)P|K7O>t!peBR1kcfYJV$@qY3V>^ zTMYm!15EWylo)ROJgxAXaMM4~Q3%gR&|2okBFq&4tlDx8kLNov8%5H1ukNA&Os%Tl x=To`o;yE002ovPDHLkV1ftjrB?s| literal 0 HcmV?d00001 diff --git a/ui/CircularProgressBar.qml b/ui/CircularProgressBar.qml new file mode 100644 index 0000000..f3446ab --- /dev/null +++ b/ui/CircularProgressBar.qml @@ -0,0 +1,67 @@ +import QtQuick 2.9 + +Item { + id: root + + property int size: 150 + property int lineWidth: 5 + property real value: 0 + + property color primaryColor: "#29b6f6" + property color secondaryColor: "#e0e0e0" + + property int animationDuration: 1000 + + width: size + height: size + + onValueChanged: { + canvas.degree = value * 360; + } + + Canvas { + id: canvas + + property real degree: 0 + + anchors.fill: parent + antialiasing: true + + onDegreeChanged: { + requestPaint(); + } + + onPaint: { + var ctx = getContext("2d"); + + var x = root.width/2; + var y = root.height/2; + + var radius = root.size/2 - root.lineWidth + var startAngle = (Math.PI/180) * 270; + var fullAngle = (Math.PI/180) * (270 + 360); + var progressAngle = (Math.PI/180) * (270 + degree); + + ctx.reset() + + ctx.lineCap = 'round'; + ctx.lineWidth = root.lineWidth; + + ctx.beginPath(); + ctx.arc(x, y, radius, startAngle, fullAngle); + ctx.strokeStyle = root.secondaryColor; + ctx.stroke(); + + ctx.beginPath(); + ctx.arc(x, y, radius, startAngle, progressAngle); + ctx.strokeStyle = root.primaryColor; + ctx.stroke(); + } + + Behavior on degree { + NumberAnimation { + duration: root.animationDuration + } + } + } +} \ No newline at end of file diff --git a/ui/FootbarInfo.qml b/ui/FootbarInfo.qml index 535ca1e..8338a0f 100644 --- a/ui/FootbarInfo.qml +++ b/ui/FootbarInfo.qml @@ -5,70 +5,7 @@ Row { height: 50 spacing: 30 padding: 10 - Column { - - // Row { - - // anchors.verticalCenterOffset: -10 - // Image { - // id: batteryLevel - // source: Binding { - // value: { - // if (canBusHandler.battery >= 80) { - // "qrc:/assets/icons/battery-5.png" - // } else if (canBusHandler.battery >= 60) { - // "qrc:/assets/icons/battery-4.png" - // } else if (canBusHandler.battery >= 40) { - // "qrc:/assets/icons/battery-3.png" - // } else if (canBusHandler.battery >= 20) { - // "qrc:/assets/icons/battery-2.png" - // } else { - // "qrc:/assets/icons/battery-1.png" - // } - // } - // } - // width: 80 - // visible: true - // fillMode: Image.PreserveAspectFit - // // Adjust this value to move the image up or down - // } - // } - Row { - spacing: 5 - - Text { - font.family: "Open Sans" - text: instrumentCluster.battery.percentage - font.pixelSize: app.letterSize - color: "white" - } - Text { - font.family: "Open Sans" - text: "%" - font.pixelSize: app.letterSize - color: "gray" - } - } - } - Column { - - Row { - spacing: 5 - Text { - font.family: "Open Sans" - text: "256" - font.pixelSize: app.letterSize - color: "white" - } - Text { - font.family: "Open Sans" - text: "mi" - font.pixelSize: app.letterSize - color: "gray" - } - } - } Column { Row { @@ -77,11 +14,17 @@ Row { Image { id: cloudIcon source: "qrc:/assets/icons/cloud.png" - width: app.iconWidth / 2 - height: app.iconHeight / 2 + width: app.iconWidth - 5 + height: app.iconHeight - 5 visible: true fillMode: Image.PreserveAspectFit } + + Rectangle { + width: 7 // Adjust the width to set the desired space + height: 1 + color: "transparent" + } Text { font.family: "Open Sans" diff --git a/ui/GearShiftInfo.qml b/ui/GearShiftInfo.qml index ecdbc1f..c00bfa4 100644 --- a/ui/GearShiftInfo.qml +++ b/ui/GearShiftInfo.qml @@ -2,30 +2,34 @@ import QtQuick 2.15 // import com.example.gearPosition 1.0 Row { - spacing: 15 + spacing: 20 Text { font.family: "Open Sans" text: "P" font.pixelSize: instrumentCluster.gear.park ? app.letterSizeLoaded : app.letterSize color: instrumentCluster.gear.park ? "blue" : "white" + y: instrumentCluster.gear.park ? gearOffset : 0 } Text { font.family: "Open Sans" text: "R" font.pixelSize: instrumentCluster.gear.reverse ? app.letterSizeLoaded : app.letterSize color: instrumentCluster.gear.reverse ? "blue" : "white" + y: instrumentCluster.gear.reverse ? gearOffset : 0 } Text { font.family: "Open Sans" text: "N" - font.pixelSize: instrumentCluster.gear.neutral ? app.letterSizeLoaded : app.letterSize + font.pixelSize: instrumentCluster.gear.neutral ? app.letterSizeLoaded : app.letterSize color: instrumentCluster.gear.neutral ? "blue" : "white" + y: instrumentCluster.gear.neutral ? gearOffset : 0 } Text { font.family: "Open Sans" text: "D" font.pixelSize: instrumentCluster.gear.drive ? app.letterSizeLoaded : app.letterSize color: instrumentCluster.gear.drive ? "blue" : "white" + y: instrumentCluster.gear.drive ? gearOffset : 0 } } \ No newline at end of file diff --git a/ui/LightInfo.qml b/ui/LightInfo.qml index ed819ee..2cf13e1 100644 --- a/ui/LightInfo.qml +++ b/ui/LightInfo.qml @@ -1,7 +1,7 @@ import QtQuick 2.15 Row { - spacing: 40 + spacing: 20 Rectangle { width: app.iconWidth @@ -13,7 +13,9 @@ Row { width: parent.width height: parent.height source: "qrc:/assets/icons/low_beam_on.png" - visible: instrumentCluster.lights.lowBeam + // visible: instrumentCluster.lights.lowBeam + visible: true + } } @@ -27,7 +29,8 @@ Row { width: parent.width height: parent.height source: "qrc:/assets/icons/high_beam_on.png" - visible: instrumentCluster.lights.highBeam + // visible: instrumentCluster.lights.highBeam + visible: true } } @@ -41,7 +44,8 @@ Row { width: parent.width height: parent.height source: "qrc:/assets/icons/front_fog_on.png" - visible: instrumentCluster.lights.frontFogLight + // visible: instrumentCluster.lights.frontFogLight + visible: true } } @@ -55,7 +59,8 @@ Row { width: parent.width height: parent.height source: "qrc:/assets/icons/parking_lights_on.png" - visible: instrumentCluster.lights.parkingLight + // visible: instrumentCluster.lights.parkingLight + visible: true } } @@ -69,7 +74,8 @@ Row { width: parent.width height: parent.height source: "qrc:/assets/icons/back_fog_on.png" - visible: instrumentCluster.lights.rearFogLight + // visible: instrumentCluster.lights.rearFogLight + visible: true } } } diff --git a/ui/Main.qml b/ui/Main.qml index c81c8c5..dafbfb4 100644 --- a/ui/Main.qml +++ b/ui/Main.qml @@ -1,5 +1,6 @@ import QtQuick 2.15 -import QtQuick.Controls 2.15 +import QtQuick.Window 2.2 +import QtQuick.Controls 2.4 ApplicationWindow { id: app @@ -10,9 +11,10 @@ ApplicationWindow { visibility: Window.FullScreen // Add this line property int letterSize: 25 - property int letterSizeLoaded: 30 - property int iconWidth: 10 - property int iconHeight: 10 + property int letterSizeLoaded: 35 + property int gearOffset: -5 + property int iconWidth: 40 + property int iconHeight: 40 property bool carClusterVisible: true property bool showSplash: true @@ -27,27 +29,29 @@ ApplicationWindow { gradient: Gradient { GradientStop { position: 0.0; color: "#000000" } - GradientStop { position: 1.0; color: "#808080" } + GradientStop { position: 0.5; color: "#153441" } // Turquoise color + GradientStop { position: 1.0; color: "#000000" } } - Rectangle { anchors.verticalCenter: parent.verticalCenter anchors.horizontalCenter: parent.horizontalCenter - - width: 100 - height: 100 + width: 420 + height: 420 color: "transparent" Image { - id: car - anchors.centerIn: parent - source: "qrc:/assets/images/car.png" - visible: true + id: car + anchors.centerIn: parent + width: parent.width + height: parent.height + source: "qrc:/assets/images/car.png" + visible: true + fillMode: Image.PreserveAspectFit } } Row { anchors.verticalCenter: parent.verticalCenter - anchors.right: parent.right - anchors.rightMargin: 20 + anchors.left: parent.left + anchors.leftMargin: 120 spacing: 10 TurnSignalLeft {} @@ -55,6 +59,46 @@ ApplicationWindow { TurnSignalRight {} } + Row { + + anchors.right: parent.right + anchors.rightMargin: 105 + anchors.verticalCenter: parent.verticalCenter + spacing: 15 + CircularProgressBar { + id: batteryPercentage + lineWidth: 10 + value: 0.1 + size: 150 + secondaryColor: "#ffffff" + primaryColor: "#1b43c7" + + Text { + text: parseInt(batteryPercentage.value * 100) + "%" + anchors.centerIn: parent + font.pixelSize: 25 + color: "#ffffff" + } + } + + CircularProgressBar { + id: batteryAutonomy + lineWidth: 10 + value: 0.2 + size: 120 + secondaryColor: "#ffffff" + primaryColor: "#1ba5c7" + + Text { + text: parseInt(batteryAutonomy.value * 100) + "km" + anchors.centerIn: parent + font.pixelSize: 15 + color: "#ffffff" + } + } + + } + GearShiftInfo { anchors.bottom: parent.bottom anchors.horizontalCenter: parent.horizontalCenter @@ -69,16 +113,16 @@ ApplicationWindow { FootbarInfo { anchors.top: parent.top - anchors.topMargin: 0 + anchors.topMargin: 10 anchors.left: parent.left - anchors.leftMargin: 20 + anchors.leftMargin: 30 } TimeInfo { anchors.top: parent.top - anchors.topMargin: 5 + anchors.topMargin: 10 anchors.right: parent.right - anchors.rightMargin: 20 + anchors.rightMargin: 30 } } diff --git a/ui/SpeedDisplay.qml b/ui/SpeedDisplay.qml index 65ee66d..1f0cf1b 100644 --- a/ui/SpeedDisplay.qml +++ b/ui/SpeedDisplay.qml @@ -1,5 +1,6 @@ import QtQuick 2.15 + Column { spacing: 3 diff --git a/ui/TimeInfo.qml b/ui/TimeInfo.qml index 2ec32e4..06a95b7 100644 --- a/ui/TimeInfo.qml +++ b/ui/TimeInfo.qml @@ -2,6 +2,20 @@ import QtQuick 2.15 Row { spacing: 5 + Image { + id: clockIcon + source: "qrc:/assets/icons/watch.png" + width: app.iconWidth - 5 + height: app.iconHeight - 5 + visible: true + fillMode: Image.PreserveAspectFit + } + + Rectangle { + width: 7 // Adjust the width to set the desired space + height: 1 + color: "transparent" + } Text { font.family: "Open Sans" diff --git a/ui/resources.qrc b/ui/resources.qrc index 58fa973..e89189b 100644 --- a/ui/resources.qrc +++ b/ui/resources.qrc @@ -8,7 +8,7 @@ FootbarInfo.qml GearShiftInfo.qml TimeInfo.qml - + CircularProgressBar.qml @@ -27,6 +27,7 @@ ../assets/icons/battery-4.png ../assets/icons/battery-5.png ../assets/icons/cloud.png + ../assets/icons/watch.png ../assets/images/car.png From b7e8b4e2c1d27093dad8ca90bb3f3a56d85bd4d8 Mon Sep 17 00:00:00 2001 From: Rui Pires Date: Thu, 23 Jan 2025 15:24:25 +0000 Subject: [PATCH 20/23] Add publishers for lights and gear in main application; implement publishing logic for new data frames --- MiddleWare/src/main.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/MiddleWare/src/main.cpp b/MiddleWare/src/main.cpp index 2094401..9651f8e 100644 --- a/MiddleWare/src/main.cpp +++ b/MiddleWare/src/main.cpp @@ -50,6 +50,8 @@ int main(int argc, char** argv) session.declare_publisher(KeyExpr("seame/car/1/speedSensor")); auto pubBattery = session.declare_publisher(KeyExpr("seame/car/1/batterySensor")); + auto pubLights = session.declare_publisher(KeyExpr("seame/car/1/lights")); + auto pubGear = session.declare_publisher(KeyExpr("seame/car/1/gear")); while (1) { @@ -87,6 +89,24 @@ int main(int argc, char** argv) printf("Publishing battery: '%lf\n", battery); pubBattery.put(battery_str.c_str()); } + else if (frame.can_id == 0x03) + { + char lights; + + memcpy(&lights, frame.data, sizeof(char)); + + printf("Publishing lights: '%lf\n", lights); + pubLights.put(lights.c_str()); + } + else if (frame.can_id == 0x04) + { + char gear; + + memcpy(&gear, frame.data, sizeof(char)); + + printf("Publishing gear: '%lf\n", gear); + pubGear.put(gear.c_str()); + } usleep(10); } return 0; From 8af81e362ede71b6490efa1caf6227335ec1441d Mon Sep 17 00:00:00 2001 From: Rui Pires Date: Thu, 23 Jan 2025 15:48:45 +0000 Subject: [PATCH 21/23] Fix publishing logic for lights and gear to use std::to_string for proper string conversion --- MiddleWare/src/main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MiddleWare/src/main.cpp b/MiddleWare/src/main.cpp index 9651f8e..6da39c0 100644 --- a/MiddleWare/src/main.cpp +++ b/MiddleWare/src/main.cpp @@ -96,7 +96,7 @@ int main(int argc, char** argv) memcpy(&lights, frame.data, sizeof(char)); printf("Publishing lights: '%lf\n", lights); - pubLights.put(lights.c_str()); + pubLights.put(std::to_string(lights)); } else if (frame.can_id == 0x04) { @@ -105,7 +105,7 @@ int main(int argc, char** argv) memcpy(&gear, frame.data, sizeof(char)); printf("Publishing gear: '%lf\n", gear); - pubGear.put(gear.c_str()); + pubGear.put(std::to_string(gear)); } usleep(10); } From 66a68459a31c55c37e277ec886c89afcf40b028a Mon Sep 17 00:00:00 2001 From: Rui Pires Date: Thu, 23 Jan 2025 18:38:46 +0000 Subject: [PATCH 22/23] Refactor publishing logic to improve debug output and handle light and gear data more effectively --- MiddleWare/src/main.cpp | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/MiddleWare/src/main.cpp b/MiddleWare/src/main.cpp index 6da39c0..217ab81 100644 --- a/MiddleWare/src/main.cpp +++ b/MiddleWare/src/main.cpp @@ -73,7 +73,7 @@ int main(int argc, char** argv) speed = wheelDiame * 3.14 * speed * 10 / 60; std::string speed_str = std::to_string(speed); - printf("Publishing speed: '%d'\n", speed); + // printf("Publishing speed: '%d'\n", speed); pubSpeed.put(speed_str.c_str()); } else if (frame.can_id == 0x02) @@ -86,7 +86,7 @@ int main(int argc, char** argv) battery = std::min(100.0f, std::max(0.0f, percentage)); std::string battery_str = std::to_string(battery); - printf("Publishing battery: '%lf\n", battery); + // printf("Publishing battery: '%lf\n", battery); pubBattery.put(battery_str.c_str()); } else if (frame.can_id == 0x03) @@ -95,17 +95,25 @@ int main(int argc, char** argv) memcpy(&lights, frame.data, sizeof(char)); - printf("Publishing lights: '%lf\n", lights); - pubLights.put(std::to_string(lights)); + printf("Can received lights: "); + for (int i = 7; i >= 0; i--) + { + printf("%d", (lights >> i) & 0x01); + } + printf("\n"); + + // printf("Publishing lights: '%lf\n", lights[0]); + std::string light_str(1, lights); + pubLights.put(light_str); } else if (frame.can_id == 0x04) { - char gear; + uint8_t gear[1]; - memcpy(&gear, frame.data, sizeof(char)); + memcpy(gear, frame.data, sizeof(gear)); - printf("Publishing gear: '%lf\n", gear); - pubGear.put(std::to_string(gear)); + // printf("Publishing gear: '%lf\n", gear[0]); + pubGear.put(std::to_string(gear[0])); } usleep(10); } From 47a936e2738149900b7981da64c845d0689ccfeb Mon Sep 17 00:00:00 2001 From: Rui Pires Date: Fri, 24 Jan 2025 16:16:03 +0000 Subject: [PATCH 23/23] Fix gear data handling in publishing logic to use char type and correct string conversion --- MiddleWare/src/main.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/MiddleWare/src/main.cpp b/MiddleWare/src/main.cpp index 217ab81..5f1839a 100644 --- a/MiddleWare/src/main.cpp +++ b/MiddleWare/src/main.cpp @@ -108,12 +108,13 @@ int main(int argc, char** argv) } else if (frame.can_id == 0x04) { - uint8_t gear[1]; + char gear; - memcpy(gear, frame.data, sizeof(gear)); + memcpy(&gear, frame.data, sizeof(char)); // printf("Publishing gear: '%lf\n", gear[0]); - pubGear.put(std::to_string(gear[0])); + std::string gear_str(1, gear); + pubGear.put(std::to_string(gear_str)); } usleep(10); }