From 7a988778f42e994f8ede0a458372bd9dfc200ada Mon Sep 17 00:00:00 2001 From: crosstyan Date: Wed, 17 Jun 2026 15:05:37 +0800 Subject: [PATCH] fix(track-core): sync track proto fields --- include/app_track_decoder.hpp | 7 +++++++ include/app_track_model.hpp | 12 +++++++++--- src/esp/app_track_decoder.cpp | 36 +++++++++++++++++++++++++++++++++++ src/esp/app_track_drawer.cpp | 2 +- src/esp/app_track_model.cpp | 4 ++-- 5 files changed, 55 insertions(+), 6 deletions(-) diff --git a/include/app_track_decoder.hpp b/include/app_track_decoder.hpp index 796832d..09894c1 100644 --- a/include/app_track_decoder.hpp +++ b/include/app_track_decoder.hpp @@ -17,6 +17,9 @@ struct TrackSchemeDecoder { [[nodiscard]] static TrackSchemeDecoder from_proto(const proto_type &proto); + [[nodiscard]] + proto_type to_proto() const; + [[nodiscard]] expected decode_core() const; @@ -37,6 +40,8 @@ struct TrackSchemeMgr { error_t err{ESP_OK}; static Add from_proto(const proto_type &proto); + [[nodiscard]] + proto_type to_proto() const; }; struct Clear {}; @@ -52,6 +57,8 @@ struct TrackSchemeMgr { explicit TrackSchemeMgr() = default; static TrackSchemeMgr from_proto(const proto_type &proto); + [[nodiscard]] + proto_type to_proto() const; std::variant choice{Unknown{}}; }; diff --git a/include/app_track_model.hpp b/include/app_track_model.hpp index 2ad42de..1d83af8 100644 --- a/include/app_track_model.hpp +++ b/include/app_track_model.hpp @@ -809,6 +809,7 @@ struct TrackTestParameters { uint16_t segment_led_start{0}; uint16_t segment_led_count{0}; uint16_t highlight_last_n_leds{0}; + uint8_t blink_palette_index{0}; static TrackTestParameters from_proto(const proto_type &proto) { TrackTestParameters params; @@ -821,6 +822,7 @@ struct TrackTestParameters { params.segment_led_start = proto.segment_led_start; params.segment_led_count = proto.segment_led_count; params.highlight_last_n_leds = proto.highlight_last_n_leds; + params.blink_palette_index = proto.blink_palette_index; return params; } @@ -835,10 +837,10 @@ struct TrackTestParameters { proto.segment_led_start = segment_led_start; proto.segment_led_count = segment_led_count; proto.highlight_last_n_leds = highlight_last_n_leds; + proto.blink_palette_index = blink_palette_index; return proto; } - void log(const char *tag, esp_log_level_t level) const { ESP_LOG_LEVEL(level, tag, "TrackTestParameters{" @@ -847,13 +849,17 @@ struct TrackTestParameters { ".blink_period_ms=%" PRIu32 ", " ".rainbow_move_speed_leds_per_sec=%" PRIu32 ", " ".segment_led_start=%" PRIu16 ", " - ".segment_led_count=%" PRIu16 "}", + ".segment_led_count=%" PRIu16 ", " + ".highlight_last_n_leds=%" PRIu16 ", " + ".blink_palette_index=%" PRIu8 "}", blink_color.string().c_str(), blink_duty_cycle_percent, blink_period_ms, rainbow_move_speed_leds_per_sec, segment_led_start, - segment_led_count); + segment_led_count, + highlight_last_n_leds, + blink_palette_index); } }; diff --git a/src/esp/app_track_decoder.cpp b/src/esp/app_track_decoder.cpp index cc80998..498e0a5 100644 --- a/src/esp/app_track_decoder.cpp +++ b/src/esp/app_track_decoder.cpp @@ -1,6 +1,7 @@ #include "app_track_decoder.hpp" #include +#include #include namespace app::track { @@ -47,6 +48,18 @@ TrackSchemeDecoder TrackSchemeDecoder::from_proto(const proto_type &proto) { return scheme; } +TrackSchemeDecoder::proto_type TrackSchemeDecoder::to_proto() const { + proto_type proto = track_app_TrackScheme_init_default; + proto.id = id; + proto.has_color = true; + proto.color = color.to_proto(); + const auto data = std::span(proto.data.bytes); + const auto count = std::min(data.size(), binary.size()); + std::ranges::copy(binary.begin(), binary.begin() + static_cast(count), data.begin()); + proto.data.size = count; + return proto; +} + expected TrackSchemeDecoder::decode_core() const { using ue = unexpected; if (binary.empty()) { @@ -67,6 +80,13 @@ TrackSchemeMgr::Add TrackSchemeMgr::Add::from_proto(const proto_type &proto) { return add; } +TrackSchemeMgr::Add::proto_type TrackSchemeMgr::Add::to_proto() const { + proto_type proto = track_app_TrackSchemeMgrAdd_init_default; + proto.has_scheme = true; + proto.scheme = scheme_decoder.to_proto(); + return proto; +} + TrackSchemeMgr TrackSchemeMgr::from_proto(const proto_type &proto) { TrackSchemeMgr mgmt; switch (proto.which_msg) { @@ -82,4 +102,20 @@ TrackSchemeMgr TrackSchemeMgr::from_proto(const proto_type &proto) { return mgmt; } +TrackSchemeMgr::proto_type TrackSchemeMgr::to_proto() const { + proto_type proto = track_app_TrackSchemeMgr_init_default; + std::visit(app::utils::overloads{ + [](Unknown) {}, + [&](const Add &add) { + proto.which_msg = track_app_TrackSchemeMgr_add_tag; + proto.msg.add = add.to_proto(); + }, + [&](Clear) { + proto.which_msg = track_app_TrackSchemeMgr_clear_tag; + proto.msg.clear = track_app_TrackSchemeMgrClear_init_default; + }}, + choice); + return proto; +} + } // namespace app::track diff --git a/src/esp/app_track_drawer.cpp b/src/esp/app_track_drawer.cpp index fd9744f..1dfd25d 100644 --- a/src/esp/app_track_drawer.cpp +++ b/src/esp/app_track_drawer.cpp @@ -53,7 +53,7 @@ track_core::TrackState to_core(app::track::TrackState state) { return track_core::TrackState::stop; case track_app_TrackState_RUN: return track_core::TrackState::run; - case track_app_TrackState_TEST_RAINBOW: + case track_app_TrackState_TEST_RAINBOW_CONTINUOUS: return track_core::TrackState::test_rainbow; case track_app_TrackState_TEST_BLINK: return track_core::TrackState::test_blink; diff --git a/src/esp/app_track_model.cpp b/src/esp/app_track_model.cpp index 7d395ba..edb9726 100644 --- a/src/esp/app_track_model.cpp +++ b/src/esp/app_track_model.cpp @@ -15,8 +15,8 @@ const char *to_str(TrackState status) { return "STOP"; case track_app_TrackState_RUN: return "RUN"; - case track_app_TrackState_TEST_RAINBOW: - return "TEST_RAINBOW"; + case track_app_TrackState_TEST_RAINBOW_CONTINUOUS: + return "TEST_RAINBOW_CONTINUOUS"; case track_app_TrackState_TEST_BLINK: return "TEST_BLINK"; }