Compare commits

...

3 Commits

Author SHA1 Message Date
dragonfly2046 b727d170c7 Add support for UNO R4 WiFi
Build / Build app and tests (ubuntu-24.04) (push) Failing after 2m36s
Documentation / Build (1.14.0) (push) Failing after 14s
Documentation / Build (1.9.6) (push) Successful in 14s
Documentation / Deploy (push) Has been skipped
2026-04-25 17:19:41 -07:00
dragonfly2046 7f17e56e34 Add thread wrapper
Build / Build app and tests (ubuntu-24.04) (push) Failing after 2m32s
Documentation / Build (1.14.0) (push) Failing after 15s
Documentation / Build (1.9.6) (push) Successful in 12s
Documentation / Deploy (push) Has been skipped
2026-04-23 21:37:09 -07:00
dragonfly2046 ae53d7f7f3 Added firmware manager skeleton 2026-04-23 21:08:56 -07:00
10 changed files with 113 additions and 21 deletions
+3
View File
@@ -11,11 +11,14 @@ project(app LANGUAGES C)
target_sources(app
PRIVATE
src/FirmwareManager.cpp
src/FirmwareManager.hpp
src/main.cpp
src/SensorDataProcessor.cpp
src/SensorDataProcessor.hpp
src/SensorSampler.cpp
src/SensorSampler.hpp
src/ThreadWrapper.hpp
)
# The code below locates the git index file for this repository and adds it as a dependency for
+11
View File
@@ -0,0 +1,11 @@
#include "FirmwareManager.hpp"
#include <zephyr/kernel.h>
void app::FirmwareManager::init() {}
void app::FirmwareManager::run() {
printk("app::FirmwareManager::run - Running...\n");
k_sleep(K_SECONDS(5));
}
void app::FirmwareManager::finalize() {}
+24
View File
@@ -0,0 +1,24 @@
#ifndef FIRMWARE_MANAGER_HPP
#define FIRMWARE_MANAGER_HPP
#include "ThreadWrapper.hpp"
namespace app {
class FirmwareManager : public ThreadWrapper<FirmwareManager> {
public:
FirmwareManager() = default;
~FirmwareManager() = default;
void init();
void run();
void finalize();
private:
};
} // namespace app
#endif
+6 -4
View File
@@ -1,9 +1,11 @@
#include "SensorDataProcessor.hpp"
#include <zephyr/kernel.h>
void app::SensorDataProcessor::entryPoint(void *, void *, void *) {
while (true) {
printk("app::SensorDataProcessor::entryPoint - Running...\n");
void app::SensorDataProcessor::init() {}
void app::SensorDataProcessor::run() {
printk("app::SensorDataProcessor::run - Running...\n");
k_sleep(K_SECONDS(5));
}
}
void app::SensorDataProcessor::finalize() {}
+8 -3
View File
@@ -1,15 +1,20 @@
#ifndef SENSOR_DATA_PROCESSOR_HPP
#define SENSOR_DATA_PROCESSOR_HPP
#include "ThreadWrapper.hpp"
namespace app {
class SensorDataProcessor {
class SensorDataProcessor : public ThreadWrapper<SensorDataProcessor> {
public:
SensorDataProcessor() = default;
~SensorDataProcessor() = default;
// Thread entry
static void entryPoint(void *, void *, void *);
void init();
void run();
void finalize();
private:
};
+6 -4
View File
@@ -1,9 +1,11 @@
#include "SensorSampler.hpp"
#include <zephyr/kernel.h>
void app::SensorSampler::entryPoint(void *, void *, void *) {
while (true) {
printk("app::SensorSampler::entryPoint - Running...\n");
void app::SensorSampler::init() {}
void app::SensorSampler::run() {
printk("app::SensorSampler::run - Running...\n");
k_sleep(K_SECONDS(5));
}
}
void app::SensorSampler::finalize() {}
+8 -3
View File
@@ -1,15 +1,20 @@
#ifndef SENSOR_SAMPLER_HPP
#define SENSOR_SAMPLER_HPP
#include "ThreadWrapper.hpp"
namespace app {
class SensorSampler {
class SensorSampler : public ThreadWrapper<SensorSampler> {
public:
SensorSampler() = default;
~SensorSampler() = default;
// Thread entry
static void entryPoint(void *, void *, void *);
void init();
void run();
void finalize();
private:
};
+36
View File
@@ -0,0 +1,36 @@
#ifndef THREAD_WRAPPER_HPP
#define THREAD_WRAPPER_HPP
#include <cstddef>
namespace app {
template <typename ThreadType> class ThreadWrapper {
public:
/**
* @brief Entry point to thread. Must define init(), run(), and finalize() for
* thread type.
*
*/
inline static void entryPoint(void *, void *, void *) {
auto thread = ThreadType();
thread.init();
while (true) {
thread.run();
thread.incrementRunCount();
}
// NOTE: Maybe one day I'll add logic to be able to finalize a thread...
thread.finalize();
}
private:
inline void incrementRunCount() { ++runCounter_; }
std::size_t runCounter_ = 0;
};
} // namespace app
#endif
+8 -5
View File
@@ -1,8 +1,4 @@
/*
* Copyright (c) 2021 Nordic Semiconductor ASA
* SPDX-License-Identifier: Apache-2.0
*/
#include "FirmwareManager.hpp"
#include "SensorDataProcessor.hpp"
#include "SensorSampler.hpp"
#include <app_version.h>
@@ -11,6 +7,13 @@
LOG_MODULE_REGISTER(main, CONFIG_APP_LOG_LEVEL);
// Firmware Manager
static constexpr size_t FirmwareManagerStackSize = 1024;
static constexpr size_t FirmwareManagerPriority = 5;
K_THREAD_DEFINE(FirmwareManagerThreadId, FirmwareManagerStackSize,
app::FirmwareManager::entryPoint, NULL, NULL, NULL,
FirmwareManagerPriority, 0, 0);
// Sensor Data Processor
static constexpr size_t SensorDataProcessorStackSize = 1024;
static constexpr size_t SensorDataProcessorPriority = 5;
+1
View File
@@ -18,4 +18,5 @@ manifest:
# strictly needed by the application.
name-allowlist:
- cmsis_6 # required by the ARM port for Cortex-M
- hal_renesas # required by the Arduino UNO R4 WiFi
- hal_stm32 # required by the nucleo_f446re board (STM32 based)