3
0
Fork 0
forked from suyu/suyu

Address review comments

This commit is contained in:
FearlessTobi 2019-11-03 07:04:28 +01:00
parent ac3690f205
commit 0fe11746fc
4 changed files with 72 additions and 65 deletions

View file

@ -88,15 +88,15 @@ private:
void HandleSend(const boost::system::error_code& error) {
// Send a request for getting port info for the pad
Request::PortInfo port_info{1, {pad_index, 0, 0, 0}};
auto port_message = Request::Create(port_info, client_id);
const auto port_message = Request::Create(port_info, client_id);
std::memcpy(&send_buffer1, &port_message, PORT_INFO_SIZE);
std::size_t len = socket.send_to(boost::asio::buffer(send_buffer1), send_endpoint);
socket.send_to(boost::asio::buffer(send_buffer1), send_endpoint);
// Send a request for getting pad data for the pad
Request::PadData pad_data{Request::PadData::Flags::Id, pad_index, EMPTY_MAC_ADDRESS};
auto pad_message = Request::Create(pad_data, client_id);
const auto pad_message = Request::Create(pad_data, client_id);
std::memcpy(send_buffer2.data(), &pad_message, PAD_DATA_SIZE);
std::size_t len2 = socket.send_to(boost::asio::buffer(send_buffer2), send_endpoint);
socket.send_to(boost::asio::buffer(send_buffer2), send_endpoint);
StartSend(timer.expiry());
}
@ -105,8 +105,8 @@ private:
boost::asio::basic_waitable_timer<clock> timer;
udp::socket socket;
u32 client_id;
u8 pad_index;
u32 client_id{};
u8 pad_index{};
static constexpr std::size_t PORT_INFO_SIZE = sizeof(Message<Request::PortInfo>);
static constexpr std::size_t PAD_DATA_SIZE = sizeof(Message<Request::PadData>);
@ -170,16 +170,16 @@ void Client::OnPadData(Response::PadData data) {
// TODO: add a setting for "click" touch. Click touch refers to a device that differentiates
// between a simple "tap" and a hard press that causes the touch screen to click.
bool is_active = data.touch_1.is_active != 0;
const bool is_active = data.touch_1.is_active != 0;
float x = 0;
float y = 0;
if (is_active && status->touch_calibration) {
u16 min_x = status->touch_calibration->min_x;
u16 max_x = status->touch_calibration->max_x;
u16 min_y = status->touch_calibration->min_y;
u16 max_y = status->touch_calibration->max_y;
const u16 min_x = status->touch_calibration->min_x;
const u16 max_x = status->touch_calibration->max_x;
const u16 min_y = status->touch_calibration->min_y;
const u16 max_y = status->touch_calibration->max_y;
x = (std::clamp(static_cast<u16>(data.touch_1.x), min_x, max_x) - min_x) /
static_cast<float>(max_x - min_x);
@ -229,7 +229,7 @@ CalibrationConfigurationJob::CalibrationConfigurationJob(
constexpr u16 CALIBRATION_THRESHOLD = 100;
u16 min_x{UINT16_MAX}, min_y{UINT16_MAX};
u16 max_x, max_y;
u16 max_x{}, max_y{};
Status current_status{Status::Initialized};
SocketCallback callback{[](Response::Version version) {}, [](Response::PortInfo info) {},

View file

@ -36,10 +36,10 @@ struct DeviceStatus {
// calibration data for scaling the device's touch area to 3ds
struct CalibrationData {
u16 min_x;
u16 min_y;
u16 max_x;
u16 max_y;
u16 min_x{};
u16 min_y{};
u16 max_x{};
u16 max_y{};
};
std::optional<CalibrationData> touch_calibration;
};

View file

@ -9,7 +9,7 @@
namespace InputCommon::CemuhookUDP {
static const std::size_t GetSizeOfResponseType(Type t) {
static constexpr std::size_t GetSizeOfResponseType(Type t) {
switch (t) {
case Type::Version:
return sizeof(Response::Version);
@ -34,7 +34,7 @@ std::optional<Type> Validate(u8* data, std::size_t size) {
LOG_DEBUG(Input, "Invalid UDP packet received");
return {};
}
Header header;
Header header{};
std::memcpy(&header, data, sizeof(Header));
if (header.magic != SERVER_MAGIC) {
LOG_ERROR(Input, "UDP Packet has an unexpected magic value");

View file

@ -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