1005e50be0
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.
62 lines
1.3 KiB
C++
62 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include <array>
|
|
#include <cstddef>
|
|
#include <cstdint>
|
|
|
|
#include "track_core/model.hpp"
|
|
|
|
namespace track_core {
|
|
|
|
struct TrackRenderSpan {
|
|
std::uint16_t start_led{};
|
|
std::uint16_t led_count{};
|
|
Color color{};
|
|
};
|
|
|
|
struct TrackRenderPlan {
|
|
static constexpr std::size_t max_spans = 4;
|
|
|
|
void add_fill(std::uint16_t start_led, std::uint16_t led_count, Color color);
|
|
|
|
[[nodiscard]]
|
|
bool empty() const {
|
|
return span_count == 0;
|
|
}
|
|
|
|
std::array<TrackRenderSpan, max_spans> spans{};
|
|
std::size_t span_count{};
|
|
};
|
|
|
|
struct TrackRenderSink {
|
|
using ClearFn = TrackError (*)(void *context);
|
|
using FillFn = TrackError (*)(
|
|
void *context,
|
|
std::uint16_t start_led,
|
|
std::uint16_t led_count,
|
|
Color color);
|
|
using ShowFn = TrackError (*)(void *context);
|
|
|
|
void *context{};
|
|
ClearFn clear{};
|
|
FillFn fill{};
|
|
ShowFn show{};
|
|
};
|
|
|
|
[[nodiscard]]
|
|
TrackRenderPlan make_track_render_plan(
|
|
const TrackConfig &config,
|
|
const TrackInfo &info,
|
|
const TrackReport &report);
|
|
|
|
[[nodiscard]]
|
|
TrackError clear_render_sink(TrackRenderSink sink);
|
|
|
|
[[nodiscard]]
|
|
TrackError apply_render_plan(TrackRenderSink sink, const TrackRenderPlan &plan);
|
|
|
|
[[nodiscard]]
|
|
TrackError show_render_sink(TrackRenderSink sink);
|
|
|
|
} // namespace track_core
|