diff --git a/include/sta/tacos.hpp b/include/sta/tacos.hpp index bec1616..747c6a5 100644 --- a/include/sta/tacos.hpp +++ b/include/sta/tacos.hpp @@ -52,11 +52,17 @@ namespace sta * @tparam T The class of the thread to be created. A subclass of TacosThread. * @param states A list of states in which the thread should run. * @param args The constructor arguments for the provided class. + * + * @return uint16_t A shared pointer to the created thread. */ template - void addThread(std::list states, Args ... args) + std::shared_ptr addThread(std::list states, Args ... args) { - Manager::instance()->registerThread(std::make_shared(args...), states); + std::shared_ptr thread_ptr = std::make_shared(args...); + + Manager::instance()->registerThread(thread_ptr, states); + + return thread_ptr; } } // namespace tacos } diff --git a/src/startup.cpp b/src/startup.cpp index 6550cc1..2130bc6 100644 --- a/src/startup.cpp +++ b/src/startup.cpp @@ -26,6 +26,7 @@ // Tacos-specific includes. #include #include +#include // The UART mutex defined in freertos.c @@ -49,8 +50,6 @@ namespace sta UARTSettings settings = { .mode = UARTMode::RX_TX }; STM32UART * intf_ptr = new STM32UART(&huart2, settings, mutex); Debug = new PrintableUART(intf_ptr); - - STA_DEBUG_PRINTLN("UART SUCCESSFULLY INITIALIZED"); } } #endif // STA_DEBUGGING_ENABLED @@ -86,6 +85,19 @@ namespace sta Manager::instance()->start(); } + +#ifdef STA_TACOS_WATCHDOG_ENABLED + STA_WEAK + void onWatchdogInit() + {} + + void initWatchdog() + { + onWatchdogInit(); + + Watchdog::instance()->start(); + } +#endif // STA_TACOS_WATCHDOG_ENABLED } // namespace tacos @@ -101,6 +113,10 @@ namespace sta tacos::initStatemachine(); tacos::initManager(); + +#ifdef STA_TACOS_WATCHDOG_ENABLED + tacos::initWatchdog(); +#endif // STA_TACOS_WATCHDOG_ENABLED } } // namespace rtos } // namespace sta diff --git a/src/watchdog.cpp b/src/watchdog.cpp index 63ff4fe..f82fa89 100644 --- a/src/watchdog.cpp +++ b/src/watchdog.cpp @@ -32,9 +32,7 @@ namespace sta Watchdog::Watchdog() : TacosThread{"Watchdog", STA_TACOS_WATCHDOG_PRIORITY} - { - - } + {} Watchdog* Watchdog::_instance = nullptr; } // namespace tacos