Shared Catalog

This commit is contained in:
khodowany
2026-09-17 00:44:19 -05:00
parent aa1273b07d
commit 5941a4cd49
44 changed files with 3613 additions and 733 deletions
+2 -1
View File
@@ -23,11 +23,12 @@ public:
auto fill_rect(std::int32_t x, std::int32_t y, std::int32_t width, std::int32_t height, std::uint16_t color) -> void;
auto draw_text(std::int32_t x, std::int32_t y, std::char_t const *text, std::uint16_t color, std::int32_t scale = 2) -> void;
auto show_boot(std::char_t const *line1, std::char_t const *line2, std::uint16_t accent) -> void;
auto show_remote(vamp_style::color status, std::char_t const *title, std::char_t const *part, std::uint32_t page, std::uint32_t pages, std::bool_t active) -> void;
auto show_remote(vamp_style::color status, std::char_t const *title, std::char_t const *part, std::uint32_t page, std::uint32_t pages, std::bool_t active, std::bool_t busy = false) -> void;
private:
std::bool_t remote_valid_{};
vamp_style::color last_status_{};
std::bool_t last_active_{};
std::bool_t last_busy_{};
std::array<std::char_t, 96> last_title_{};
std::array<std::char_t, 48> last_part_{};
std::uint32_t last_page_{};
+51 -4
View File
@@ -1,12 +1,17 @@
#pragma once
#include <array>
#include <cstddef>
#include <cstdint>
#include <optional>
#include <string_view>
#include <vamp_protocol/page_control.hpp>
#include <vamp_pico/input.hpp>
#include <modulus/types.hpp>
struct tcp_pcb;
namespace vamp_pico {
struct remote_display_state {
@@ -19,8 +24,50 @@ struct remote_display_state {
};
auto parse_remote_display_body(std::string_view body, vamp_pico::remote_display_state &state) -> std::bool_t;
auto post_remote_command(vamp_protocol::page_command command, vamp_pico::remote_display_state &state) -> std::bool_t;
auto heartbeat() -> std::bool_t;
auto fetch_remote_display(vamp_pico::remote_display_state &state) -> std::bool_t;
enum class http_status {
IDLE,
IN_FLIGHT,
READY,
};
enum class http_start_result {
STARTED,
BUSY,
};
struct http_result {
remote_request request{};
std::bool_t success{};
remote_display_state display{};
};
class http_client {
public:
http_client() = default;
~http_client();
http_client(http_client const &) = delete;
auto operator=(http_client const &) -> http_client & = delete;
http_client(http_client &&) = delete;
auto operator=(http_client &&) -> http_client & = delete;
// Accepted requests, including immediate failures, produce exactly one result.
auto start(remote_request request, std::uint64_t now_ms) -> http_start_result;
auto poll(std::uint64_t now_ms) -> http_status;
auto take_result() -> std::optional<http_result>;
// Discards the request/result and returns to IDLE. Call before Wi-Fi deinit.
auto cancel() -> void;
private:
friend struct http_client_callbacks;
tcp_pcb *pcb_{};
http_status status_{http_status::IDLE};
remote_request request_{};
std::bool_t success_{};
std::uint64_t started_ms_{};
std::uint64_t timeout_ms_{};
std::array<std::char_t, 384> request_buffer_{};
std::size_t request_size_{};
std::array<std::char_t, 1024> response_buffer_{};
std::size_t response_size_{};
};
}
+56
View File
@@ -0,0 +1,56 @@
#pragma once
#include <array>
#include <cstddef>
#include <cstdint>
#include <optional>
#include <vamp_protocol/page_control.hpp>
namespace vamp_pico {
enum class request_kind {
DISPLAY,
COMMAND,
HEARTBEAT,
};
struct remote_request {
request_kind kind{request_kind::DISPLAY};
vamp_protocol::page_command command{vamp_protocol::page_command::NEXT};
};
class gesture_state {
public:
auto update(std::bool_t touching, std::uint64_t now_ms) -> std::optional<vamp_protocol::page_command>;
private:
std::bool_t touching_{};
std::bool_t hold_sent_{};
std::bool_t pending_tap_{};
std::uint64_t down_ms_{};
std::uint64_t last_up_ms_{};
};
enum class enqueue_result {
QUEUED,
BUSY,
};
class request_scheduler {
public:
static constexpr auto command_capacity = std::size_t{16};
auto enqueue(vamp_protocol::page_command command) -> enqueue_result;
auto next(std::uint64_t now_ms) -> std::optional<remote_request>;
auto complete(std::uint64_t now_ms) -> void;
auto queued() const -> std::size_t;
private:
std::array<vamp_protocol::page_command, command_capacity> commands_{};
std::size_t head_{};
std::size_t size_{};
std::bool_t in_flight_{};
std::bool_t completed_{};
std::uint64_t completed_ms_{};
};
}