#pragma once #include #include #include #include #include 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}; }; 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; auto complete(std::uint64_t now_ms) -> void; auto queued() const -> std::size_t; private: std::array commands_{}; std::size_t head_{}; std::size_t size_{}; std::bool_t in_flight_{}; std::bool_t completed_{}; std::uint64_t completed_ms_{}; }; }