feat(track-core): add portable training runtimes
Move scheme and PID training runtime behavior into the pure track_core layer and expose render sinks for injected strip application. Add ESP compatibility adapters, Python bindings/test scaffolding, and in-memory render support so app_track_bt can consume core render and runtime logic without duplicating it. Cover circular/linear rendering boundaries, all scheme runtime types, scheme render_to parity, PID sample de-duplication, speed suppression, and live tuning in track-core tests.
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
#pragma once
|
||||
|
||||
#include <variant>
|
||||
#include <vector>
|
||||
|
||||
#include "app_track_model.hpp"
|
||||
#include "track_core/scheme_decoder.hpp"
|
||||
|
||||
namespace app::track {
|
||||
|
||||
struct TrackSchemeDecoder {
|
||||
using proto_type = track_app_TrackScheme;
|
||||
static inline const pb_msgdesc_t *pb_fields = &track_app_TrackScheme_msg;
|
||||
|
||||
TrackSchemeDecoder() = default;
|
||||
|
||||
[[nodiscard]]
|
||||
static TrackSchemeDecoder from_proto(const proto_type &proto);
|
||||
|
||||
[[nodiscard]]
|
||||
expected<track_core::DecodedScheme, error_t> decode_core() const;
|
||||
|
||||
uint8_t id = 0;
|
||||
std::vector<uint8_t> binary;
|
||||
Color color;
|
||||
};
|
||||
|
||||
struct TrackSchemeMgr {
|
||||
using proto_type = track_app_TrackSchemeMgr;
|
||||
static inline const pb_msgdesc_t *pb_fields = &track_app_TrackSchemeMgr_msg;
|
||||
|
||||
struct Add {
|
||||
using proto_type = track_app_TrackSchemeMgrAdd;
|
||||
static inline const pb_msgdesc_t *pb_fields = &track_app_TrackSchemeMgrAdd_msg;
|
||||
|
||||
TrackSchemeDecoder scheme_decoder;
|
||||
error_t err{ESP_OK};
|
||||
|
||||
static Add from_proto(const proto_type &proto);
|
||||
};
|
||||
|
||||
struct Clear {};
|
||||
|
||||
using Unknown = std::monostate;
|
||||
|
||||
enum class MessageType : uint8_t {
|
||||
NONE = 0,
|
||||
ADD = 1,
|
||||
CLEAR = 2
|
||||
};
|
||||
|
||||
explicit TrackSchemeMgr() = default;
|
||||
|
||||
static TrackSchemeMgr from_proto(const proto_type &proto);
|
||||
|
||||
std::variant<Unknown, Add, Clear> choice{Unknown{}};
|
||||
};
|
||||
|
||||
} // namespace app::track
|
||||
Reference in New Issue
Block a user