Add thread wrapper
This commit is contained in:
@@ -18,6 +18,7 @@ target_sources(app
|
||||
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
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
#include "FirmwareManager.hpp"
|
||||
#include <zephyr/kernel.h>
|
||||
|
||||
void app::FirmwareManager::entryPoint(void *, void *, void *) {
|
||||
while (true) {
|
||||
printk("app::FirmwareManager::entryPoint - Running...\n");
|
||||
void app::FirmwareManager::init() {}
|
||||
|
||||
void app::FirmwareManager::run() {
|
||||
printk("app::FirmwareManager::run - Running...\n");
|
||||
k_sleep(K_SECONDS(5));
|
||||
}
|
||||
}
|
||||
|
||||
void app::FirmwareManager::finalize() {}
|
||||
|
||||
@@ -1,14 +1,20 @@
|
||||
#ifndef FIRMWARE_MANAGER_HPP
|
||||
#define FIRMWARE_MANAGER_HPP
|
||||
|
||||
#include "ThreadWrapper.hpp"
|
||||
|
||||
namespace app {
|
||||
|
||||
class FirmwareManager {
|
||||
class FirmwareManager : public ThreadWrapper<FirmwareManager> {
|
||||
public:
|
||||
FirmwareManager() = default;
|
||||
~FirmwareManager() = default;
|
||||
|
||||
static void entryPoint(void *, void *, void *);
|
||||
void init();
|
||||
|
||||
void run();
|
||||
|
||||
void finalize();
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
@@ -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() {}
|
||||
|
||||
@@ -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:
|
||||
};
|
||||
|
||||
@@ -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() {}
|
||||
|
||||
@@ -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:
|
||||
};
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user