nppilot/roverif/protocol.h

95 lines
1.3 KiB
C++

#pragma once
namespace Protocol {
enum class Code : uint8_t {
Heartbeat = 'h',
Pong = 'p',
Inputs = 'i',
Request = 'R',
Version = 'v',
Demand = 'd',
State = 's',
Counters = 'c',
IMU = 'm',
};
struct Generic {
};
struct Heartbeat {
Code code;
uint8_t version;
uint8_t device_id;
};
struct State {
enum class Flags : uint8_t {
None = 0,
RemoteOK = 1,
InControl = 2,
InShutdown = 4,
PilotAllowed = 8,
};
Code code;
Flags flags;
};
struct Counters {
Code code;
uint8_t demands;
uint8_t sent;
uint8_t received;
uint8_t rx_errors;
};
struct Pong {
Code code;
};
struct Input {
static const int8_t Missing = -128;
static const uint8_t Reference12MHz = 2;
Code code;
uint8_t reference;
int8_t channels[6];
};
struct Demand {
static const int8_t PassThrough = -127;
static const int8_t Reserved = -120;
enum class Flags : uint8_t {
None = 0,
TakeControl = 1,
};
Code code;
Flags flags;
int8_t channels[6];
};
struct IMU {
Code code;
uint8_t id;
int16_t accels[3];
int16_t gyros[3];
};
struct Request {
Code code;
Code requested;
};
struct Version {
Code code;
char version[18];
};
} // namespace Protocol