From 6f726173714c1784f7fccd42c8a084aa396ba61e Mon Sep 17 00:00:00 2001 From: Sander Speetjens Date: Wed, 23 Oct 2024 10:01:54 +0200 Subject: [PATCH] CAN Move from src to tools --- src/CAN/CAN_interface.cpp | 1 - src/CAN/CAN_interface.hpp | 15 --------------- src/CAN/CMakeLists.txt | 16 ---------------- src/CMakeLists.txt | 3 +-- tools/CAN/CAN_interface.cpp | 37 +++++++++++++++++++++++++++++++++++++ tools/CAN/CAN_interface.hpp | 22 ++++++++++++++++++++++ tools/CMakeLists.txt | 7 +++++-- 7 files changed, 65 insertions(+), 36 deletions(-) delete mode 100644 src/CAN/CAN_interface.cpp delete mode 100644 src/CAN/CAN_interface.hpp delete mode 100644 src/CAN/CMakeLists.txt create mode 100644 tools/CAN/CAN_interface.cpp create mode 100644 tools/CAN/CAN_interface.hpp diff --git a/src/CAN/CAN_interface.cpp b/src/CAN/CAN_interface.cpp deleted file mode 100644 index 58c3971..0000000 --- a/src/CAN/CAN_interface.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "CAN_interface.hpp" \ No newline at end of file diff --git a/src/CAN/CAN_interface.hpp b/src/CAN/CAN_interface.hpp deleted file mode 100644 index 236ba5d..0000000 --- a/src/CAN/CAN_interface.hpp +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once -#include -#include - -typedef struct can_message_s -{ - time_t timestamp; - uint16_t id; - uint8_t dlc; - uint8_t data[8]; - - can_message_s() : timestamp(0), id(0), dlc(0), data{0} - { - } -} can_message_t; \ No newline at end of file diff --git a/src/CAN/CMakeLists.txt b/src/CAN/CMakeLists.txt deleted file mode 100644 index 7f2de22..0000000 --- a/src/CAN/CMakeLists.txt +++ /dev/null @@ -1,16 +0,0 @@ -add_library(CAN) - -target_sources(CAN PRIVATE - CAN_interface.cpp -) - -target_compile_options(CAN PRIVATE $<$: - -Wall -Wextra -pedantic-errors -Wconversion -Wsign-conversion - >) - -target_include_directories(CAN - PUBLIC - ${CMAKE_CURRENT_LIST_DIR} - PRIVATE -) - diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7d3911f..bc8dd8a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,2 +1 @@ -add_subdirectory(CAN) -add_subdirectory(UI) \ No newline at end of file +add_subdirectory(UI) diff --git a/tools/CAN/CAN_interface.cpp b/tools/CAN/CAN_interface.cpp new file mode 100644 index 0000000..47f2702 --- /dev/null +++ b/tools/CAN/CAN_interface.cpp @@ -0,0 +1,37 @@ +#include "CAN_interface.hpp" + +CAN_Interface::CAN_Interface(QString dev, QObject *parent) +: QObject(parent) +{ + if (!QCanBus::instance()->plugins().contains(QStringLiteral("socketcan"))) { + throw std::runtime_error("CAN Interface: socketcan plugin not found"); + } + QString errorString; + m_canDevice = QCanBus::instance()->createDevice(QStringLiteral("socketcan"), dev, &errorString); + if (!m_canDevice) + { + // Error handling goes here + throw std::runtime_error("CAN Interface: " + errorString.toStdString()); + } + + m_canDevice->connectDevice(); + connect(m_canDevice, &QCanBusDevice::framesReceived, this, [this] { + emit frames_received(); + }); +} + +CAN_Interface::~CAN_Interface() +{ + m_canDevice->disconnectDevice(); + delete m_canDevice; +} + +void CAN_Interface::send_frame(const QCanBusFrame &frame) +{ + m_canDevice->writeFrame(frame); +} + +QCanBusFrame CAN_Interface::read_frame() +{ + return m_canDevice->readFrame(); +} \ No newline at end of file diff --git a/tools/CAN/CAN_interface.hpp b/tools/CAN/CAN_interface.hpp new file mode 100644 index 0000000..3445ae9 --- /dev/null +++ b/tools/CAN/CAN_interface.hpp @@ -0,0 +1,22 @@ +#pragma once +#include +#include +#include +#include +#include +#include + +class CAN_Interface : public QObject +{ + Q_OBJECT + public: + CAN_Interface(QString dev, QObject *parent = nullptr); + ~CAN_Interface(); + + void send_frame(const QCanBusFrame &frame); + QCanBusFrame read_frame(); + signals: + void frames_received(); + private: + QCanBusDevice *m_canDevice; +}; diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index ede42a6..b26c605 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -4,8 +4,9 @@ endif() set(CMAKE_AUTOMOC ON) -find_package(Qt6 REQUIRED COMPONENTS WebSockets) +find_package(Qt6 REQUIRED COMPONENTS Core WebSockets SerialBus) +qt_standard_project_setup() qt_add_executable(server) include(FetchContent) @@ -14,6 +15,7 @@ FetchContent_Declare(magic_enum URL https://github.com/Neargye/magic_enum/releas FetchContent_MakeAvailable(magic_enum) file(GLOB_RECURSE SIM_SOURCES "simulators/*.[hc]pp") +file(GLOB_RECURSE CAN_SOURCES "CAN/*.[hc]pp") target_sources(server PRIVATE ${CMAKE_CURRENT_LIST_DIR}/main.cpp @@ -25,6 +27,7 @@ target_sources(server PRIVATE ${CMAKE_CURRENT_LIST_DIR}/websocket.cpp ${CMAKE_CURRENT_LIST_DIR}/websocket.hpp ${SIM_SOURCES} + ${CAN_SOURCES} ) target_compile_options(server PRIVATE $<$: @@ -40,8 +43,8 @@ target_include_directories(server target_link_libraries(server PRIVATE Qt::WebSockets + Qt::SerialBus magic_enum::magic_enum spdlog UI - CAN )