summaryrefslogtreecommitdiffstats
path: root/src/input_common/udp/protocol.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/input_common/udp/protocol.h101
1 files changed, 54 insertions, 47 deletions
diff --git a/src/input_common/udp/protocol.h b/src/input_common/udp/protocol.h
index d31bbeb89..1b521860a 100644
--- a/src/input_common/udp/protocol.h
+++ b/src/input_common/udp/protocol.h
@@ -26,15 +26,15 @@ enum class Type : u32 {
};
struct Header {
- u32_le magic;
- u16_le protocol_version;
- u16_le payload_length;
- u32_le crc;
- u32_le id;
+ u32_le magic{};
+ u16_le protocol_version{};
+ u16_le payload_length{};
+ u32_le crc{};
+ u32_le id{};
///> In the protocol, the type of the packet is not part of the header, but its convenient to
///> include in the header so the callee doesn't have to duplicate the type twice when building
///> the data
- Type type;
+ Type type{};
};
static_assert(sizeof(Header) == 20, "UDP Message Header struct has wrong size");
static_assert(std::is_trivially_copyable_v<Header>, "UDP Message Header is not trivially copyable");
@@ -45,7 +45,7 @@ constexpr MacAddress EMPTY_MAC_ADDRESS = {0, 0, 0, 0, 0, 0};
#pragma pack(push, 1)
template <typename T>
struct Message {
- Header header;
+ Header header{};
T data;
};
#pragma pack(pop)
@@ -64,7 +64,7 @@ struct Version {};
*/
constexpr u32 MAX_PORTS = 4;
struct PortInfo {
- u32_le pad_count; ///> Number of ports to request data for
+ u32_le pad_count{}; ///> Number of ports to request data for
std::array<u8, MAX_PORTS> port;
};
static_assert(std::is_trivially_copyable_v<PortInfo>,
@@ -82,9 +82,9 @@ struct PadData {
Mac,
};
/// Determines which method will be used as a look up for the controller
- Flags flags;
+ Flags flags{};
/// Index of the port of the controller to retrieve data about
- u8 port_id;
+ u8 port_id{};
/// Mac address of the controller to retrieve data about
MacAddress mac;
};
@@ -113,20 +113,20 @@ Message<T> Create(const T data, const u32 client_id = 0) {
namespace Response {
struct Version {
- u16_le version;
+ u16_le version{};
};
static_assert(sizeof(Version) == 2, "UDP Response Version struct has wrong size");
static_assert(std::is_trivially_copyable_v<Version>,
"UDP Response Version is not trivially copyable");
struct PortInfo {
- u8 id;
- u8 state;
- u8 model;
- u8 connection_type;
+ u8 id{};
+ u8 state{};
+ u8 model{};
+ u8 connection_type{};
MacAddress mac;
- u8 battery;
- u8 is_pad_active;
+ u8 battery{};
+ u8 is_pad_active{};
};
static_assert(sizeof(PortInfo) == 12, "UDP Response PortInfo struct has wrong size");
static_assert(std::is_trivially_copyable_v<PortInfo>,
@@ -134,10 +134,10 @@ static_assert(std::is_trivially_copyable_v<PortInfo>,
#pragma pack(push, 1)
struct PadData {
- PortInfo info;
- u32_le packet_counter;
+ PortInfo info{};
+ u32_le packet_counter{};
- u16_le digital_button;
+ u16_le digital_button{};
// The following union isn't trivially copyable but we don't use this input anyway.
// union DigitalButton {
// u16_le button;
@@ -161,46 +161,46 @@ struct PadData {
u8 home;
/// If the device supports a "click" on the touchpad, this will change to 1 when a click happens
- u8 touch_hard_press;
- u8 left_stick_x;
- u8 left_stick_y;
- u8 right_stick_x;
- u8 right_stick_y;
+ u8 touch_hard_press{};
+ u8 left_stick_x{};
+ u8 left_stick_y{};
+ u8 right_stick_x{};
+ u8 right_stick_y{};
struct AnalogButton {
- u8 button_8;
- u8 button_7;
- u8 button_6;
- u8 button_5;
- u8 button_12;
- u8 button_11;
- u8 button_10;
- u8 button_9;
- u8 button_16;
- u8 button_15;
- u8 button_14;
- u8 button_13;
+ u8 button_8{};
+ u8 button_7{};
+ u8 button_6{};
+ u8 button_5{};
+ u8 button_12{};
+ u8 button_11{};
+ u8 button_10{};
+ u8 button_9{};
+ u8 button_16{};
+ u8 button_15{};
+ u8 button_14{};
+ u8 button_13{};
} analog_button;
struct TouchPad {
- u8 is_active;
- u8 id;
- u16_le x;
- u16_le y;
+ u8 is_active{};
+ u8 id{};
+ u16_le x{};
+ u16_le y{};
} touch_1, touch_2;
u64_le motion_timestamp;
struct Accelerometer {
- float x;
- float y;
- float z;
+ float x{};
+ float y{};
+ float z{};
} accel;
struct Gyroscope {
- float pitch;
- float yaw;
- float roll;
+ float pitch{};
+ float yaw{};
+ float roll{};
} gyro;
};
#pragma pack(pop)
@@ -212,6 +212,13 @@ static_assert(std::is_trivially_copyable_v<PadData>,
static_assert(sizeof(Message<PadData>) == MAX_PACKET_SIZE,
"UDP MAX_PACKET_SIZE is no longer larger than Message<PadData>");
+static_assert(sizeof(PadData::AnalogButton) == 12,
+ "UDP Response AnalogButton struct has wrong size ");
+static_assert(sizeof(PadData::TouchPad) == 6, "UDP Response TouchPad struct has wrong size ");
+static_assert(sizeof(PadData::Accelerometer) == 12,
+ "UDP Response Accelerometer struct has wrong size ");
+static_assert(sizeof(PadData::Gyroscope) == 12, "UDP Response Gyroscope struct has wrong size ");
+
/**
* Create a Response Message from the data
* @param data array of bytes sent from the server