input_common: Remove duplicated DriverResult enum
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "common/input.h"
|
||||
#include "common/logging/log.h"
|
||||
#include "input_common/helpers/joycon_protocol/common_protocol.h"
|
||||
|
||||
@ -21,10 +22,10 @@ void JoyconCommonProtocol::SetNonBlocking() {
|
||||
SDL_hid_set_nonblocking(hidapi_handle->handle, 1);
|
||||
}
|
||||
|
||||
DriverResult JoyconCommonProtocol::GetDeviceType(ControllerType& controller_type) {
|
||||
Common::Input::DriverResult JoyconCommonProtocol::GetDeviceType(ControllerType& controller_type) {
|
||||
const auto result = ReadSPI(SpiAddress::DEVICE_TYPE, controller_type);
|
||||
|
||||
if (result == DriverResult::Success) {
|
||||
if (result == Common::Input::DriverResult::Success) {
|
||||
// Fallback to 3rd party pro controllers
|
||||
if (controller_type == ControllerType::None) {
|
||||
controller_type = ControllerType::Pro;
|
||||
@ -34,12 +35,13 @@ DriverResult JoyconCommonProtocol::GetDeviceType(ControllerType& controller_type
|
||||
return result;
|
||||
}
|
||||
|
||||
DriverResult JoyconCommonProtocol::CheckDeviceAccess(SDL_hid_device_info* device_info) {
|
||||
Common::Input::DriverResult JoyconCommonProtocol::CheckDeviceAccess(
|
||||
SDL_hid_device_info* device_info) {
|
||||
ControllerType controller_type{ControllerType::None};
|
||||
const auto result = GetDeviceType(controller_type);
|
||||
|
||||
if (result != DriverResult::Success || controller_type == ControllerType::None) {
|
||||
return DriverResult::UnsupportedControllerType;
|
||||
if (result != Common::Input::DriverResult::Success || controller_type == ControllerType::None) {
|
||||
return Common::Input::DriverResult::UnsupportedControllerType;
|
||||
}
|
||||
|
||||
hidapi_handle->handle =
|
||||
@ -48,30 +50,30 @@ DriverResult JoyconCommonProtocol::CheckDeviceAccess(SDL_hid_device_info* device
|
||||
if (!hidapi_handle->handle) {
|
||||
LOG_ERROR(Input, "Yuzu can't gain access to this device: ID {:04X}:{:04X}.",
|
||||
device_info->vendor_id, device_info->product_id);
|
||||
return DriverResult::HandleInUse;
|
||||
return Common::Input::DriverResult::HandleInUse;
|
||||
}
|
||||
|
||||
SetNonBlocking();
|
||||
return DriverResult::Success;
|
||||
return Common::Input::DriverResult::Success;
|
||||
}
|
||||
|
||||
DriverResult JoyconCommonProtocol::SetReportMode(ReportMode report_mode) {
|
||||
Common::Input::DriverResult JoyconCommonProtocol::SetReportMode(ReportMode report_mode) {
|
||||
const std::array<u8, 1> buffer{static_cast<u8>(report_mode)};
|
||||
return SendSubCommand(SubCommand::SET_REPORT_MODE, buffer);
|
||||
}
|
||||
|
||||
DriverResult JoyconCommonProtocol::SendRawData(std::span<const u8> buffer) {
|
||||
Common::Input::DriverResult JoyconCommonProtocol::SendRawData(std::span<const u8> buffer) {
|
||||
const auto result = SDL_hid_write(hidapi_handle->handle, buffer.data(), buffer.size());
|
||||
|
||||
if (result == -1) {
|
||||
return DriverResult::ErrorWritingData;
|
||||
return Common::Input::DriverResult::ErrorWritingData;
|
||||
}
|
||||
|
||||
return DriverResult::Success;
|
||||
return Common::Input::DriverResult::Success;
|
||||
}
|
||||
|
||||
DriverResult JoyconCommonProtocol::GetSubCommandResponse(SubCommand sc,
|
||||
SubCommandResponse& output) {
|
||||
Common::Input::DriverResult JoyconCommonProtocol::GetSubCommandResponse(
|
||||
SubCommand sc, SubCommandResponse& output) {
|
||||
constexpr int timeout_mili = 66;
|
||||
constexpr int MaxTries = 3;
|
||||
int tries = 0;
|
||||
@ -84,16 +86,17 @@ DriverResult JoyconCommonProtocol::GetSubCommandResponse(SubCommand sc,
|
||||
LOG_ERROR(Input, "No response from joycon");
|
||||
}
|
||||
if (tries++ > MaxTries) {
|
||||
return DriverResult::Timeout;
|
||||
return Common::Input::DriverResult::Timeout;
|
||||
}
|
||||
} while (output.input_report.report_mode != ReportMode::SUBCMD_REPLY &&
|
||||
output.sub_command != sc);
|
||||
|
||||
return DriverResult::Success;
|
||||
return Common::Input::DriverResult::Success;
|
||||
}
|
||||
|
||||
DriverResult JoyconCommonProtocol::SendSubCommand(SubCommand sc, std::span<const u8> buffer,
|
||||
SubCommandResponse& output) {
|
||||
Common::Input::DriverResult JoyconCommonProtocol::SendSubCommand(SubCommand sc,
|
||||
std::span<const u8> buffer,
|
||||
SubCommandResponse& output) {
|
||||
SubCommandPacket packet{
|
||||
.output_report = OutputReport::RUMBLE_AND_SUBCMD,
|
||||
.packet_counter = GetCounter(),
|
||||
@ -102,26 +105,28 @@ DriverResult JoyconCommonProtocol::SendSubCommand(SubCommand sc, std::span<const
|
||||
};
|
||||
|
||||
if (buffer.size() > packet.command_data.size()) {
|
||||
return DriverResult::InvalidParameters;
|
||||
return Common::Input::DriverResult::InvalidParameters;
|
||||
}
|
||||
|
||||
memcpy(packet.command_data.data(), buffer.data(), buffer.size());
|
||||
|
||||
auto result = SendData(packet);
|
||||
|
||||
if (result != DriverResult::Success) {
|
||||
if (result != Common::Input::DriverResult::Success) {
|
||||
return result;
|
||||
}
|
||||
|
||||
return GetSubCommandResponse(sc, output);
|
||||
}
|
||||
|
||||
DriverResult JoyconCommonProtocol::SendSubCommand(SubCommand sc, std::span<const u8> buffer) {
|
||||
Common::Input::DriverResult JoyconCommonProtocol::SendSubCommand(SubCommand sc,
|
||||
std::span<const u8> buffer) {
|
||||
SubCommandResponse output{};
|
||||
return SendSubCommand(sc, buffer, output);
|
||||
}
|
||||
|
||||
DriverResult JoyconCommonProtocol::SendMCUCommand(SubCommand sc, std::span<const u8> buffer) {
|
||||
Common::Input::DriverResult JoyconCommonProtocol::SendMCUCommand(SubCommand sc,
|
||||
std::span<const u8> buffer) {
|
||||
SubCommandPacket packet{
|
||||
.output_report = OutputReport::MCU_DATA,
|
||||
.packet_counter = GetCounter(),
|
||||
@ -130,7 +135,7 @@ DriverResult JoyconCommonProtocol::SendMCUCommand(SubCommand sc, std::span<const
|
||||
};
|
||||
|
||||
if (buffer.size() > packet.command_data.size()) {
|
||||
return DriverResult::InvalidParameters;
|
||||
return Common::Input::DriverResult::InvalidParameters;
|
||||
}
|
||||
|
||||
memcpy(packet.command_data.data(), buffer.data(), buffer.size());
|
||||
@ -138,7 +143,7 @@ DriverResult JoyconCommonProtocol::SendMCUCommand(SubCommand sc, std::span<const
|
||||
return SendData(packet);
|
||||
}
|
||||
|
||||
DriverResult JoyconCommonProtocol::SendVibrationReport(std::span<const u8> buffer) {
|
||||
Common::Input::DriverResult JoyconCommonProtocol::SendVibrationReport(std::span<const u8> buffer) {
|
||||
VibrationPacket packet{
|
||||
.output_report = OutputReport::RUMBLE_ONLY,
|
||||
.packet_counter = GetCounter(),
|
||||
@ -146,7 +151,7 @@ DriverResult JoyconCommonProtocol::SendVibrationReport(std::span<const u8> buffe
|
||||
};
|
||||
|
||||
if (buffer.size() > packet.vibration_data.size()) {
|
||||
return DriverResult::InvalidParameters;
|
||||
return Common::Input::DriverResult::InvalidParameters;
|
||||
}
|
||||
|
||||
memcpy(packet.vibration_data.data(), buffer.data(), buffer.size());
|
||||
@ -154,7 +159,8 @@ DriverResult JoyconCommonProtocol::SendVibrationReport(std::span<const u8> buffe
|
||||
return SendData(packet);
|
||||
}
|
||||
|
||||
DriverResult JoyconCommonProtocol::ReadRawSPI(SpiAddress addr, std::span<u8> output) {
|
||||
Common::Input::DriverResult JoyconCommonProtocol::ReadRawSPI(SpiAddress addr,
|
||||
std::span<u8> output) {
|
||||
constexpr std::size_t HeaderSize = 5;
|
||||
constexpr std::size_t MaxTries = 5;
|
||||
std::size_t tries = 0;
|
||||
@ -168,36 +174,36 @@ DriverResult JoyconCommonProtocol::ReadRawSPI(SpiAddress addr, std::span<u8> out
|
||||
memcpy(buffer.data(), &packet_data, sizeof(ReadSpiPacket));
|
||||
do {
|
||||
const auto result = SendSubCommand(SubCommand::SPI_FLASH_READ, buffer, response);
|
||||
if (result != DriverResult::Success) {
|
||||
if (result != Common::Input::DriverResult::Success) {
|
||||
return result;
|
||||
}
|
||||
|
||||
if (tries++ > MaxTries) {
|
||||
return DriverResult::Timeout;
|
||||
return Common::Input::DriverResult::Timeout;
|
||||
}
|
||||
} while (response.spi_address != addr);
|
||||
|
||||
if (response.command_data.size() < packet_data.size + HeaderSize) {
|
||||
return DriverResult::WrongReply;
|
||||
return Common::Input::DriverResult::WrongReply;
|
||||
}
|
||||
|
||||
// Remove header from output
|
||||
memcpy(output.data(), response.command_data.data() + HeaderSize, packet_data.size);
|
||||
return DriverResult::Success;
|
||||
return Common::Input::DriverResult::Success;
|
||||
}
|
||||
|
||||
DriverResult JoyconCommonProtocol::EnableMCU(bool enable) {
|
||||
Common::Input::DriverResult JoyconCommonProtocol::EnableMCU(bool enable) {
|
||||
const std::array<u8, 1> mcu_state{static_cast<u8>(enable ? 1 : 0)};
|
||||
const auto result = SendSubCommand(SubCommand::SET_MCU_STATE, mcu_state);
|
||||
|
||||
if (result != DriverResult::Success) {
|
||||
if (result != Common::Input::DriverResult::Success) {
|
||||
LOG_ERROR(Input, "Failed with error {}", result);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
DriverResult JoyconCommonProtocol::ConfigureMCU(const MCUConfig& config) {
|
||||
Common::Input::DriverResult JoyconCommonProtocol::ConfigureMCU(const MCUConfig& config) {
|
||||
LOG_DEBUG(Input, "ConfigureMCU");
|
||||
std::array<u8, sizeof(MCUConfig)> config_buffer;
|
||||
memcpy(config_buffer.data(), &config, sizeof(MCUConfig));
|
||||
@ -205,15 +211,15 @@ DriverResult JoyconCommonProtocol::ConfigureMCU(const MCUConfig& config) {
|
||||
|
||||
const auto result = SendSubCommand(SubCommand::SET_MCU_CONFIG, config_buffer);
|
||||
|
||||
if (result != DriverResult::Success) {
|
||||
if (result != Common::Input::DriverResult::Success) {
|
||||
LOG_ERROR(Input, "Failed with error {}", result);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
DriverResult JoyconCommonProtocol::GetMCUDataResponse(ReportMode report_mode,
|
||||
MCUCommandResponse& output) {
|
||||
Common::Input::DriverResult JoyconCommonProtocol::GetMCUDataResponse(ReportMode report_mode,
|
||||
MCUCommandResponse& output) {
|
||||
constexpr int TimeoutMili = 200;
|
||||
constexpr int MaxTries = 9;
|
||||
int tries = 0;
|
||||
@ -226,17 +232,18 @@ DriverResult JoyconCommonProtocol::GetMCUDataResponse(ReportMode report_mode,
|
||||
LOG_ERROR(Input, "No response from joycon attempt {}", tries);
|
||||
}
|
||||
if (tries++ > MaxTries) {
|
||||
return DriverResult::Timeout;
|
||||
return Common::Input::DriverResult::Timeout;
|
||||
}
|
||||
} while (output.input_report.report_mode != report_mode ||
|
||||
output.mcu_report == MCUReport::EmptyAwaitingCmd);
|
||||
|
||||
return DriverResult::Success;
|
||||
return Common::Input::DriverResult::Success;
|
||||
}
|
||||
|
||||
DriverResult JoyconCommonProtocol::SendMCUData(ReportMode report_mode, MCUSubCommand sc,
|
||||
std::span<const u8> buffer,
|
||||
MCUCommandResponse& output) {
|
||||
Common::Input::DriverResult JoyconCommonProtocol::SendMCUData(ReportMode report_mode,
|
||||
MCUSubCommand sc,
|
||||
std::span<const u8> buffer,
|
||||
MCUCommandResponse& output) {
|
||||
SubCommandPacket packet{
|
||||
.output_report = OutputReport::MCU_DATA,
|
||||
.packet_counter = GetCounter(),
|
||||
@ -245,23 +252,24 @@ DriverResult JoyconCommonProtocol::SendMCUData(ReportMode report_mode, MCUSubCom
|
||||
};
|
||||
|
||||
if (buffer.size() > packet.command_data.size()) {
|
||||
return DriverResult::InvalidParameters;
|
||||
return Common::Input::DriverResult::InvalidParameters;
|
||||
}
|
||||
|
||||
memcpy(packet.command_data.data(), buffer.data(), buffer.size());
|
||||
|
||||
auto result = SendData(packet);
|
||||
|
||||
if (result != DriverResult::Success) {
|
||||
if (result != Common::Input::DriverResult::Success) {
|
||||
return result;
|
||||
}
|
||||
|
||||
result = GetMCUDataResponse(report_mode, output);
|
||||
|
||||
return DriverResult::Success;
|
||||
return Common::Input::DriverResult::Success;
|
||||
}
|
||||
|
||||
DriverResult JoyconCommonProtocol::WaitSetMCUMode(ReportMode report_mode, MCUMode mode) {
|
||||
Common::Input::DriverResult JoyconCommonProtocol::WaitSetMCUMode(ReportMode report_mode,
|
||||
MCUMode mode) {
|
||||
MCUCommandResponse output{};
|
||||
constexpr std::size_t MaxTries{16};
|
||||
std::size_t tries{};
|
||||
@ -269,17 +277,17 @@ DriverResult JoyconCommonProtocol::WaitSetMCUMode(ReportMode report_mode, MCUMod
|
||||
do {
|
||||
const auto result = SendMCUData(report_mode, MCUSubCommand::SetDeviceMode, {}, output);
|
||||
|
||||
if (result != DriverResult::Success) {
|
||||
if (result != Common::Input::DriverResult::Success) {
|
||||
return result;
|
||||
}
|
||||
|
||||
if (tries++ > MaxTries) {
|
||||
return DriverResult::WrongReply;
|
||||
return Common::Input::DriverResult::WrongReply;
|
||||
}
|
||||
} while (output.mcu_report != MCUReport::StateReport ||
|
||||
output.mcu_data[6] != static_cast<u8>(mode));
|
||||
|
||||
return DriverResult::Success;
|
||||
return Common::Input::DriverResult::Success;
|
||||
}
|
||||
|
||||
// crc-8-ccitt / polynomial 0x07 look up table
|
||||
|
Reference in New Issue
Block a user