Shared Catalog
This commit is contained in:
@@ -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_{};
|
||||
};
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user