From 16b2ed5a20df1c04b9bbcf5e12101d5e822e45d2 Mon Sep 17 00:00:00 2001 From: "@CarlWachter" Date: Fri, 16 Feb 2024 17:43:28 +0100 Subject: [PATCH] Can bus start without handle --- include/sta/tacos.hpp | 3 +++ include/sta/tacos/can_bus.hpp | 8 ++++---- src/can_bus.cpp | 28 +++++++++++++++++----------- src/startup.cpp | 2 +- src/tacos.cpp | 6 +++++- 5 files changed, 30 insertions(+), 17 deletions(-) diff --git a/include/sta/tacos.hpp b/include/sta/tacos.hpp index c5d6edc..74f1593 100644 --- a/include/sta/tacos.hpp +++ b/include/sta/tacos.hpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -76,6 +77,8 @@ namespace sta return thread_ptr; } + + //bool queueCanBusMsg(const CanDataMsg & msg, uint32_t timeout); } // namespace tacos } diff --git a/include/sta/tacos/can_bus.hpp b/include/sta/tacos/can_bus.hpp index 82a9cd8..4762098 100644 --- a/include/sta/tacos/can_bus.hpp +++ b/include/sta/tacos/can_bus.hpp @@ -32,19 +32,19 @@ namespace sta { public: - CanBus(CAN_HandleTypeDef * controller); + CanBus(); /** * @brief Getter function for the singleton instance. */ - static CanBus* instance(CAN_HandleTypeDef * handle) + static CanBus* instance() { static CGuard g; if (!_instance) { // Create the can bus singleton instance. - CanBus::_instance = new CanBus(handle); + CanBus::_instance = new CanBus(); } return _instance; @@ -115,7 +115,7 @@ namespace sta AlpakaCanBus canBus_; - + static RtosEvent messageEvent; }; diff --git a/src/can_bus.cpp b/src/can_bus.cpp index c06a947..acbcff0 100644 --- a/src/can_bus.cpp +++ b/src/can_bus.cpp @@ -2,17 +2,16 @@ #ifdef STA_CAN_BUS_ENABLE #include -#include -#include #include - +// TODO fix this shit +extern CAN_HandleTypeDef hcan1; namespace sta { namespace tacos { - CanBus::CanBus(CAN_HandleTypeDef * controller) + CanBus::CanBus() : TacosThread{"Can Bus", STA_TACOS_CAN_BUS_PRIORITY}, - canBusController_(new STM32CanController(controller)), + canBusController_(new STM32CanController(&STA_STM32_CAN_HANDLE)), canBusSysQueue_(STA_RTOS_CAN_BUS_QUEUE_LENGTH), canBusDataQueue_(STA_RTOS_CAN_BUS_QUEUE_LENGTH), canBus_{canBusController_, HAL_GetTick, sta::tacos::handleSysMessage, sta::tacos::handleDataMessage} @@ -26,8 +25,10 @@ namespace sta void CanBus::func() { - uint32_t flags = osThreadFlagsWait(STA_RTOS_THREAD_FLAGS_VALID_BITS, osFlagsWaitAny, 50); + messageEvent.clear(STA_RTOS_CAN_ANY); + uint32_t flags = messageEvent.wait(STA_RTOS_CAN_ANY, osWaitForever); + STA_DEBUG_PRINTLN("CanBus received Flag"); if (flags != static_cast(osErrorTimeout)) { STA_ASSERT_MSG((flags & osStatusReserved) == flags, "Unexpected error occurred in wait"); @@ -38,6 +39,7 @@ namespace sta CanSysMsg msg; while (CanBus::_instance->getCanBusMsg(&msg, 0)) { + STA_DEBUG_PRINTLN("CanBus about to send"); canBus_.send(msg); } } @@ -76,8 +78,9 @@ namespace sta if (canBusDataQueue_.put(msg, timeout)) { - // Signal thread - notify(STA_RTOS_CAN_FLAG_DATA_QUEUED); + // Signal task + messageEvent.set(STA_RTOS_CAN_FLAG_DATA_QUEUED); + messageEvent.clear(STA_RTOS_CAN_ANY); return true; } else @@ -92,8 +95,9 @@ namespace sta if (canBusSysQueue_.put(msg, timeout)) { - // Signal thread - notify(STA_RTOS_CAN_FLAG_SYS_QUEUED); + // Signal tasek + messageEvent.set(STA_RTOS_CAN_FLAG_SYS_QUEUED); + messageEvent.clear(STA_RTOS_CAN_ANY); return true; } else @@ -115,6 +119,8 @@ namespace sta CanBus* CanBus::_instance = nullptr; + RtosEvent CanBus::messageEvent; + } /* namespace tacos */ } /* namespace sta */ @@ -193,4 +199,4 @@ namespace sta { } // namespace tacos } // namespace sta -#endif // STA_CAN_BUS_ENABLE \ No newline at end of file +#endif // STA_CAN_BUS_ENABLE diff --git a/src/startup.cpp b/src/startup.cpp index 3531b63..8acfc29 100644 --- a/src/startup.cpp +++ b/src/startup.cpp @@ -154,7 +154,7 @@ namespace sta { onCanBusInit(); - CanBus::instance(getCanController())->start(); + CanBus::instance()->start(); } #endif //STA_CAN_BUS_ENABLE } // namespace tacos diff --git a/src/tacos.cpp b/src/tacos.cpp index 45aa708..8cc7d1b 100644 --- a/src/tacos.cpp +++ b/src/tacos.cpp @@ -7,7 +7,6 @@ #include - namespace sta { namespace tacos @@ -26,6 +25,11 @@ namespace sta { Statemachine::instance()->requestTimedStateTransition(from, to, millis, lockout); } + /*bool queueCanBusMsg(const CanDataMsg & msg, uint32_t timeout){ + //extern CAN_HandleTypeDef hcan1; + //return CanBus::instance(STA_STM32_CAN_HANDLE)->queueCanBusMsg(msg, timeout); + return false; + }*/ } // namespace tacos } // namespace sta