input_common: joycon: Remove Magic numbers from common protocol

This commit is contained in:
Narr the Reg 2023-01-27 22:30:44 -06:00 committed by german77
parent 11fea5deea
commit c318a4c80b
9 changed files with 216 additions and 149 deletions

View file

@ -57,22 +57,31 @@ public:
* Sends data to the joycon device
* @param buffer data to be send
*/
DriverResult SendData(std::span<const u8> buffer);
DriverResult SendRawData(std::span<const u8> buffer);
template <typename Output>
requires std::is_trivially_copyable_v<Output>
DriverResult SendData(const Output& output) {
std::array<u8, sizeof(Output)> buffer;
std::memcpy(buffer.data(), &output, sizeof(Output));
return SendRawData(buffer);
}
/**
* Waits for incoming data of the joycon device that matchs the subcommand
* @param sub_command type of data to be returned
* @returns a buffer containing the responce
* @returns a buffer containing the response
*/
DriverResult GetSubCommandResponse(SubCommand sub_command, std::vector<u8>& output);
DriverResult GetSubCommandResponse(SubCommand sub_command, SubCommandResponse& output);
/**
* Sends a sub command to the device and waits for it's reply
* @param sc sub command to be send
* @param buffer data to be send
* @returns output buffer containing the responce
* @returns output buffer containing the response
*/
DriverResult SendSubCommand(SubCommand sc, std::span<const u8> buffer, std::vector<u8>& output);
DriverResult SendSubCommand(SubCommand sc, std::span<const u8> buffer,
SubCommandResponse& output);
/**
* Sends a sub command to the device and waits for it's reply and ignores the output
@ -97,14 +106,14 @@ public:
/**
* Reads the SPI memory stored on the joycon
* @param Initial address location
* @returns output buffer containing the responce
* @returns output buffer containing the response
*/
DriverResult ReadRawSPI(SpiAddress addr, std::span<u8> output);
/**
* Reads the SPI memory stored on the joycon
* @param Initial address location
* @returns output object containing the responce
* @returns output object containing the response
*/
template <typename Output>
requires std::is_trivially_copyable_v<Output>
@ -136,19 +145,19 @@ public:
/**
* Waits until there's MCU data available. On timeout returns error
* @param report mode of the expected reply
* @returns a buffer containing the responce
* @returns a buffer containing the response
*/
DriverResult GetMCUDataResponse(ReportMode report_mode_, std::vector<u8>& output);
DriverResult GetMCUDataResponse(ReportMode report_mode_, MCUCommandResponse& output);
/**
* Sends data to the MCU chip and waits for it's reply
* @param report mode of the expected reply
* @param sub command to be send
* @param buffer data to be send
* @returns output buffer containing the responce
* @returns output buffer containing the response
*/
DriverResult SendMCUData(ReportMode report_mode, SubCommand sc, std::span<const u8> buffer,
std::vector<u8>& output);
MCUCommandResponse& output);
/**
* Wait's until the MCU chip is on the specified mode