Added module base for task routing

This commit is contained in:
2026-03-24 00:01:36 +01:00
parent 5b774f485a
commit 25ad777247
6 changed files with 99 additions and 0 deletions

8
src/base/module_base.h Normal file
View File

@@ -0,0 +1,8 @@
#pragma once
#include "base/task.h"
class module_base
{
public:
virtual int push(const Task& task) = 0;
};

3
src/base/modules.cpp Normal file
View File

@@ -0,0 +1,3 @@
#include "base/modules.h"
module_base* modules[MOD_COUNT] = {nullptr};

6
src/base/modules.h Normal file
View File

@@ -0,0 +1,6 @@
#pragma once
#include "base/module_base.h"
#include "base/task.h"
extern module_base* modules[MOD_COUNT];

35
src/base/ring_buffer.h Normal file
View File

@@ -0,0 +1,35 @@
#pragma once
#include <inttypes.h>
template<typename T, uint8_t SIZE>
class ring_buffer {
private:
T _buffer[SIZE];
volatile uint8_t _head = 0;
volatile uint8_t _tail = 0;
volatile uint8_t _count = 0;
public:
int push(const T& item) {
if (_count == SIZE) {
return 1;
}
_buffer[_head] = item;
_head = (_head++) % SIZE;
_count++;
return 0;
}
int pop(T& item) {
if (_count == 0) {
return 1;
}
item = _buffer[_tail];
_tail = (_tail++) % SIZE;
_count--;
return 0;
}
bool is_empty() const { return _count == 0;}
bool is_full() const { return _count == SIZE;}
uint8_t size() const { return _count;}
};

24
src/base/router.h Normal file
View File

@@ -0,0 +1,24 @@
#pragma once
#include "base/task.h"
#include "base/module_base.h"
#include "base/modules.h"
namespace router {
int send(const Task& task) {
if (task.target >= MOD_COUNT) {
return 1;
}
module_base* mod = modules[task.target];
if (mod == nullptr) {
return 1;
}
return mod->push(task);
}
int send(module_id target, task_type type, uint32_t data=0) {
Task t{target, type, data};
return send(t);
}
}

23
src/base/task.h Normal file
View File

@@ -0,0 +1,23 @@
#pragma once
#include <inttypes.h>
#include <Arduino.h>
enum module_id : uint8_t {
MOD_CMD,
MOD_CFG,
MOD_GPS,
MOD_LCD,
MOD_COUNT
};
enum task_type : uint8_t {
TASK_NONE,
TASK_DISPLAY_GPS_DEBUG,
TASK_CONFIG_TRACK_DETECT,
};
struct Task {
module_id target;
task_type type;
uint32_t data;
};