Files
khodowany 9fd5abd075
ci / checks (push) Successful in 1h16m10s
Rhythm Selection & Cleanup
2026-09-26 02:50:22 -05:00

53 lines
1.3 KiB
C++

#pragma once
#include <array>
#include <cstddef>
#include <cstdint>
#include <optional>
#include <vamp_protocol/gesture.hpp>
namespace vamp_pico {
enum class request_kind {
DISPLAY,
COMMAND,
HEARTBEAT,
TITLE,
};
struct remote_request {
request_kind kind{request_kind::DISPLAY};
vamp_protocol::page_command command{vamp_protocol::page_command::NEXT};
std::array<std::char_t, vamp_protocol::title_id_size + 1U> title_id{};
};
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;
auto want_title(std::string_view identifier) -> void;
auto cancel_title() -> void;
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_{};
std::array<std::char_t, vamp_protocol::title_id_size + 1U> title_id_{};
std::bool_t title_pending_{};
request_kind active_kind_{request_kind::DISPLAY};
};
}