57 lines
1.7 KiB
C++
57 lines
1.7 KiB
C++
#pragma once
|
|
#include <basalt/pipe_operator.hpp>
|
|
#include <cstdint>
|
|
|
|
namespace basalt::presenter::cmd_client {
|
|
|
|
// Protocol codes
|
|
enum class ProtocolCode : std::uint8_t {
|
|
HANDSHAKE_REQUEST = 0x61, ///< Trainer -> Presenter
|
|
HANDSHAKE_RESPONSE = 0x62, ///< Presenter -> Trainer
|
|
DATA_READY = 0x01, ///< Presenter -> Trainer
|
|
DATA_RECEIVED = 0x02, ///< Trainer -> Presenter
|
|
ACTIVELY_STOP = 0x21, ///< Presenter-->Trainer
|
|
STOP_REQUEST = 0X71, ///< Presenter<--Trainer
|
|
STOP_RESPONSE = 0x72, ///< Presenter-->Trainer
|
|
};
|
|
|
|
// Pixel kind values
|
|
enum class PixelKind : std::uint8_t {
|
|
GRAY_FLOAT32 = 0x01, ///< Grayscale represented by one float32
|
|
GRAY_U8 = 0x02, ///< Grayscale represented by one u8
|
|
RGB_FLOAT32 = 0x03, ///< RGB represented by three float32
|
|
RGB_U8 = 0x04 ///< RGB represented by three u8
|
|
};
|
|
|
|
#pragma pack(push, 1)
|
|
struct HandshakePayload {
|
|
PixelKind pixel_kind;
|
|
std::uint32_t width;
|
|
std::uint32_t height;
|
|
};
|
|
#pragma pack(pop)
|
|
|
|
// Status
|
|
enum class CmdClientStatus {
|
|
Ready,
|
|
Running,
|
|
Stop,
|
|
};
|
|
|
|
class CmdClient {
|
|
public:
|
|
CmdClient();
|
|
~CmdClient();
|
|
|
|
public:
|
|
// Wait for handshake from Trainer, send response with data properties
|
|
HandshakePayload wait_handshake();
|
|
// Tick function called every frame to send data ready and wait for response
|
|
bool tick(bool actively_stop = false);
|
|
|
|
private:
|
|
shared::pipe_operator::PipeOperator m_PipeOperator;
|
|
CmdClientStatus m_Status;
|
|
};
|
|
|
|
} // namespace basalt::presenter::cmd_client
|