1
0
mirror of https://github.com/cathery/sys-con.git synced 2024-07-05 10:48:46 +00:00

Use Result type instead of Status

This commit is contained in:
cathery 2019-11-13 14:16:13 +03:00
parent 76baf30713
commit c2c58971a7
25 changed files with 195 additions and 194 deletions

View File

@ -132,13 +132,13 @@ public:
Dualshock3Controller(std::unique_ptr<IUSBDevice> &&interface);
virtual ~Dualshock3Controller();
virtual Status Initialize();
virtual Result Initialize();
virtual void Exit();
Status OpenInterfaces();
Result OpenInterfaces();
void CloseInterfaces();
virtual Status GetInput();
virtual Result GetInput();
virtual NormalizedButtonData GetNormalizedButtonData();
@ -149,12 +149,12 @@ public:
float NormalizeTrigger(uint8_t value);
void NormalizeAxis(uint8_t x, uint8_t y, uint8_t deadzonePercent, float *x_out, float *y_out);
Status SendInitBytes();
Status SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude);
Result SendInitBytes();
Result SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude);
static Status SendCommand(IUSBInterface *interface, Dualshock3FeatureValue feature, void *buffer, uint16_t size);
static Result SendCommand(IUSBInterface *interface, Dualshock3FeatureValue feature, void *buffer, uint16_t size);
Status SetLED(Dualshock3LEDValue value);
Result SetLED(Dualshock3LEDValue value);
static void LoadConfig(const ControllerConfig *config);
virtual ControllerConfig *GetConfig();

View File

@ -113,13 +113,13 @@ public:
Dualshock4Controller(std::unique_ptr<IUSBDevice> &&interface);
virtual ~Dualshock4Controller();
virtual Status Initialize();
virtual Result Initialize();
virtual void Exit();
Status OpenInterfaces();
Result OpenInterfaces();
void CloseInterfaces();
virtual Status GetInput();
virtual Result GetInput();
virtual NormalizedButtonData GetNormalizedButtonData();
@ -130,8 +130,8 @@ public:
float NormalizeTrigger(uint8_t value);
void NormalizeAxis(uint8_t x, uint8_t y, uint8_t deadzonePercent, float *x_out, float *y_out);
Status SendInitBytes();
Status SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude);
Result SendInitBytes();
Result SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude);
static void LoadConfig(const ControllerConfig *config);
virtual ControllerConfig *GetConfig();

View File

@ -92,13 +92,13 @@ public:
Xbox360Controller(std::unique_ptr<IUSBDevice> &&interface);
virtual ~Xbox360Controller();
virtual Status Initialize();
virtual Result Initialize();
virtual void Exit();
Status OpenInterfaces();
Result OpenInterfaces();
void CloseInterfaces();
virtual Status GetInput();
virtual Result GetInput();
virtual NormalizedButtonData GetNormalizedButtonData();
@ -109,10 +109,10 @@ public:
float NormalizeTrigger(uint8_t value);
void NormalizeAxis(int16_t x, int16_t y, uint8_t deadzonePercent, float *x_out, float *y_out);
Status SendInitBytes();
Status SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude);
Result SendInitBytes();
Result SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude);
Status SetLED(Xbox360LEDValue value);
Result SetLED(Xbox360LEDValue value);
static void LoadConfig(const ControllerConfig *config);
virtual ControllerConfig *GetConfig();

View File

@ -28,13 +28,13 @@ public:
Xbox360WirelessController(std::unique_ptr<IUSBDevice> &&interface);
virtual ~Xbox360WirelessController();
virtual Status Initialize();
virtual Result Initialize();
virtual void Exit();
Status OpenInterfaces();
Result OpenInterfaces();
void CloseInterfaces();
virtual Status GetInput();
virtual Result GetInput();
virtual NormalizedButtonData GetNormalizedButtonData();
@ -45,18 +45,18 @@ public:
float NormalizeTrigger(uint8_t value);
void NormalizeAxis(int16_t x, int16_t y, uint8_t deadzonePercent, float *x_out, float *y_out);
Status SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude);
Status SetLED(Xbox360LEDValue value);
Result SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude);
Result SetLED(Xbox360LEDValue value);
Status OnControllerConnect();
Status OnControllerDisconnect();
Result OnControllerConnect();
Result OnControllerDisconnect();
static void LoadConfig(const ControllerConfig *config);
virtual ControllerConfig *GetConfig();
Status WriteToEndpoint(const uint8_t *buffer, size_t size);
Result WriteToEndpoint(const uint8_t *buffer, size_t size);
virtual Status OutputBuffer();
virtual Result OutputBuffer();
bool IsControllerActive() override { return m_presence; }
};

View File

@ -62,13 +62,13 @@ public:
XboxController(std::unique_ptr<IUSBDevice> &&interface);
virtual ~XboxController();
virtual Status Initialize();
virtual Result Initialize();
virtual void Exit();
Status OpenInterfaces();
Result OpenInterfaces();
void CloseInterfaces();
virtual Status GetInput();
virtual Result GetInput();
virtual NormalizedButtonData GetNormalizedButtonData();
@ -79,7 +79,7 @@ public:
float NormalizeTrigger(uint8_t value);
void NormalizeAxis(int16_t x, int16_t y, uint8_t deadzonePercent, float *x_out, float *y_out);
Status SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude);
Result SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude);
static void LoadConfig(const ControllerConfig *config);
virtual ControllerConfig *GetConfig();

View File

@ -31,17 +31,17 @@ public:
XboxOneAdapter(std::unique_ptr<IUSBDevice> &&interface);
virtual ~XboxOneAdapter();
virtual Status Initialize();
virtual Result Initialize();
virtual void Exit();
Status OpenInterfaces();
Result OpenInterfaces();
void CloseInterfaces();
virtual ControllerType GetType() { return CONTROLLER_XBOXONEW; }
Status LoadFirmwarePart(uint32_t offset, uint8_t *start, uint8_t *end);
Status SendInitBytes();
Status ControlWrite(IUSBInterface *interface, uint16_t address, uint32_t value, VendorRequest request = MT_VEND_MULTI_WRITE);
Result LoadFirmwarePart(uint32_t offset, uint8_t *start, uint8_t *end);
Result SendInitBytes();
Result ControlWrite(IUSBInterface *interface, uint16_t address, uint32_t value, VendorRequest request = MT_VEND_MULTI_WRITE);
static void LoadConfig(const ControllerConfig *config, const char *path);
virtual ControllerConfig *GetConfig();

View File

@ -85,13 +85,13 @@ public:
XboxOneController(std::unique_ptr<IUSBDevice> &&interface);
virtual ~XboxOneController();
virtual Status Initialize();
virtual Result Initialize();
virtual void Exit();
Status OpenInterfaces();
Result OpenInterfaces();
void CloseInterfaces();
virtual Status GetInput();
virtual Result GetInput();
virtual NormalizedButtonData GetNormalizedButtonData();
@ -102,9 +102,9 @@ public:
float NormalizeTrigger(uint16_t value);
void NormalizeAxis(int16_t x, int16_t y, uint8_t deadzonePercent, float *x_out, float *y_out);
Status SendInitBytes();
Status WriteAckGuideReport(uint8_t sequence);
Status SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude);
Result SendInitBytes();
Result WriteAckGuideReport(uint8_t sequence);
Result SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude);
static void LoadConfig(const ControllerConfig *config);
virtual ControllerConfig *GetConfig();

View File

@ -23,21 +23,21 @@ public:
IController(std::unique_ptr<IUSBDevice> &&interface) : m_device(std::move(interface)) {}
virtual ~IController() = default;
virtual Status Initialize() = 0;
virtual Result Initialize() = 0;
//Since Exit is used to clean up resources, no status report should be needed
//Since Exit is used to clean up resources, no Result report should be needed
virtual void Exit() = 0;
virtual Status GetInput() { return 1; }
virtual Result GetInput() { return 1; }
virtual NormalizedButtonData GetNormalizedButtonData() { return NormalizedButtonData(); }
inline IUSBDevice *GetDevice() { return m_device.get(); }
virtual ControllerType GetType() = 0;
virtual Status SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude) { return 1; }
virtual Result SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude) { return 1; }
virtual bool IsControllerActive() { return true; }
virtual Status OutputBuffer() { return 1; };
virtual Result OutputBuffer() { return 1; };
virtual ControllerConfig *GetConfig() { return nullptr; }
};

View File

@ -1,6 +1,6 @@
#pragma once
#include <cstdio>
#include "Status.h"
#include "Result.h"
#include "IUSBInterface.h"
#include <memory>
#include <vector>
@ -17,7 +17,7 @@ public:
virtual ~IUSBDevice() = default;
//Open and close the device.
virtual Status Open() = 0;
virtual Result Open() = 0;
virtual void Close() = 0;
//Reset the device.

View File

@ -1,5 +1,5 @@
#pragma once
#include "Status.h"
#include "Result.h"
#include <cstddef>
class IUSBEndpoint
@ -24,14 +24,14 @@ public:
virtual ~IUSBEndpoint() = default;
//Open and close the endpoint. if maxPacketSize is not set, it uses wMaxPacketSize from the descriptor.
virtual Status Open(int maxPacketSize = 0) = 0;
virtual Result Open(int maxPacketSize = 0) = 0;
virtual void Close() = 0;
//This will read from the inBuffer pointer for the specified size and write it to the endpoint.
virtual Status Write(const void *inBuffer, size_t bufferSize) = 0;
virtual Result Write(const void *inBuffer, size_t bufferSize) = 0;
//This will read from the endpoint and put the data in the outBuffer pointer for the specified size.
virtual Status Read(void *outBuffer, size_t bufferSize) = 0;
virtual Result Read(void *outBuffer, size_t bufferSize) = 0;
//Get endpoint's direction. (IN or OUT)
virtual IUSBEndpoint::Direction GetDirection() = 0;

View File

@ -1,5 +1,5 @@
#pragma once
#include "Status.h"
#include "Result.h"
#include "IUSBEndpoint.h"
#include <memory>
@ -21,13 +21,13 @@ public:
};
virtual ~IUSBInterface() = default;
virtual Status Open() = 0;
virtual Result Open() = 0;
virtual void Close() = 0;
virtual Status ControlTransfer(uint8_t bmRequestType, uint8_t bmRequest, uint16_t wValue, uint16_t wIndex, uint16_t wLength, void *buffer) = 0;
virtual Result ControlTransfer(uint8_t bmRequestType, uint8_t bmRequest, uint16_t wValue, uint16_t wIndex, uint16_t wLength, void *buffer) = 0;
virtual IUSBEndpoint *GetEndpoint(IUSBEndpoint::Direction direction, uint8_t index);
virtual InterfaceDescriptor *GetDescriptor();
virtual Status Reset() = 0;
virtual Result Reset() = 0;
};

View File

@ -0,0 +1,14 @@
#pragma once
#include <cstdint>
//Function error code Result type
typedef uint32_t Result;
//Checks whether a Result code indicates success
#ifndef R_SUCCEEDED
#define R_SUCCEEDED(Result) ((Result) == 0)
#endif
//Checks whether a Result code indicates failure
#ifndef R_FAILED
#define R_FAILED(Result) ((Result) != 0)
#endif

View File

@ -1,10 +0,0 @@
#pragma once
#include <cstdint>
//Function error code status type
typedef uint32_t Status;
//Checks whether a status code indicates success
#define S_SUCCEEDED(status) ((status) == 0)
//Checks whether a status code indicates failure
#define S_FAILED(status) ((status) != 0)

View File

@ -13,12 +13,12 @@ Dualshock3Controller::~Dualshock3Controller()
Exit();
}
Status Dualshock3Controller::Initialize()
Result Dualshock3Controller::Initialize()
{
Status rc;
Result rc;
rc = OpenInterfaces();
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
SetLED(DS3LED_1);
@ -29,11 +29,11 @@ void Dualshock3Controller::Exit()
CloseInterfaces();
}
Status Dualshock3Controller::OpenInterfaces()
Result Dualshock3Controller::OpenInterfaces()
{
Status rc;
Result rc;
rc = m_device->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
//Open each interface, send it a setup packet and get the endpoints if it succeeds
@ -41,7 +41,7 @@ Status Dualshock3Controller::OpenInterfaces()
for (auto &&interface : interfaces)
{
rc = interface->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
if (interface->GetDescriptor()->bNumEndpoints < 2)
@ -50,7 +50,7 @@ Status Dualshock3Controller::OpenInterfaces()
//Send an initial control packet
uint8_t initBytes[] = {0x42, 0x0C, 0x00, 0x00};
rc = SendCommand(interface.get(), Ds3FeatureStartDevice, initBytes, sizeof(initBytes));
if (S_FAILED(rc))
if (R_FAILED(rc))
return 60;
m_interface = interface.get();
@ -63,7 +63,7 @@ Status Dualshock3Controller::OpenInterfaces()
if (inEndpoint)
{
rc = inEndpoint->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return 61;
m_inPipe = inEndpoint;
@ -80,7 +80,7 @@ Status Dualshock3Controller::OpenInterfaces()
if (outEndpoint)
{
rc = outEndpoint->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return 62;
m_outPipe = outEndpoint;
@ -101,13 +101,13 @@ void Dualshock3Controller::CloseInterfaces()
m_device->Close();
}
Status Dualshock3Controller::GetInput()
Result Dualshock3Controller::GetInput()
{
uint8_t input_bytes[49];
Status rc = m_inPipe->Read(input_bytes, sizeof(input_bytes));
if (S_FAILED(rc))
Result rc = m_inPipe->Read(input_bytes, sizeof(input_bytes));
if (R_FAILED(rc))
return rc;
if (input_bytes[0] == Ds3InputPacket_Button)
@ -203,18 +203,18 @@ NormalizedButtonData Dualshock3Controller::GetNormalizedButtonData()
return normalData;
}
Status Dualshock3Controller::SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude)
Result Dualshock3Controller::SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude)
{
//Not implemented yet
return 9;
}
Status Dualshock3Controller::SendCommand(IUSBInterface *interface, Dualshock3FeatureValue feature, void *buffer, uint16_t size)
Result Dualshock3Controller::SendCommand(IUSBInterface *interface, Dualshock3FeatureValue feature, void *buffer, uint16_t size)
{
return interface->ControlTransfer(0x21, 0x09, static_cast<uint16_t>(feature), 0, size, buffer);
}
Status Dualshock3Controller::SetLED(Dualshock3LEDValue value)
Result Dualshock3Controller::SetLED(Dualshock3LEDValue value)
{
uint8_t ledPacket[]{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

View File

@ -22,7 +22,7 @@ uint32_t ComputeDualshock4Checksum(const uint8_t *report_data, uint16_t length)
}
*/
Status Dualshock4Controller::SendInitBytes()
Result Dualshock4Controller::SendInitBytes()
{
constexpr uint8_t init_bytes[32] = {
@ -34,16 +34,16 @@ Status Dualshock4Controller::SendInitBytes()
return m_outPipe->Write(init_bytes, sizeof(init_bytes));
}
Status Dualshock4Controller::Initialize()
Result Dualshock4Controller::Initialize()
{
Status rc;
Result rc;
rc = OpenInterfaces();
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
rc = SendInitBytes();
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
WriteToLog("Max IN packet size: ", m_inPipe->GetDescriptor()->wMaxPacketSize);
@ -58,11 +58,11 @@ void Dualshock4Controller::Exit()
CloseInterfaces();
}
Status Dualshock4Controller::OpenInterfaces()
Result Dualshock4Controller::OpenInterfaces()
{
Status rc;
Result rc;
rc = m_device->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
//This will open each interface and try to acquire Dualshock 4 controller's in and out endpoints, if it hasn't already
@ -70,7 +70,7 @@ Status Dualshock4Controller::OpenInterfaces()
for (auto &&interface : interfaces)
{
rc = interface->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
if (interface->GetDescriptor()->bInterfaceProtocol != 0)
@ -89,7 +89,7 @@ Status Dualshock4Controller::OpenInterfaces()
if (inEndpoint)
{
rc = inEndpoint->Open(100);
if (S_FAILED(rc))
if (R_FAILED(rc))
return 61;
m_inPipe = inEndpoint;
@ -106,7 +106,7 @@ Status Dualshock4Controller::OpenInterfaces()
if (outEndpoint)
{
rc = outEndpoint->Open(100);
if (S_FAILED(rc))
if (R_FAILED(rc))
return 62;
m_outPipe = outEndpoint;
@ -127,11 +127,11 @@ void Dualshock4Controller::CloseInterfaces()
m_device->Close();
}
Status Dualshock4Controller::GetInput()
Result Dualshock4Controller::GetInput()
{
uint8_t input_bytes[64];
Status rc = m_inPipe->Read(input_bytes, sizeof(input_bytes));
if (S_FAILED(rc))
Result rc = m_inPipe->Read(input_bytes, sizeof(input_bytes));
if (R_FAILED(rc))
{
m_inputData[0] = static_cast<uint8_t>(rc);
return rc;
@ -232,7 +232,7 @@ NormalizedButtonData Dualshock4Controller::GetNormalizedButtonData()
return normalData;
}
Status Dualshock4Controller::SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude)
Result Dualshock4Controller::SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude)
{
return 9;
/*

View File

@ -13,12 +13,12 @@ Xbox360Controller::~Xbox360Controller()
Exit();
}
Status Xbox360Controller::Initialize()
Result Xbox360Controller::Initialize()
{
Status rc;
Result rc;
rc = OpenInterfaces();
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
SetLED(XBOX360LED_TOPLEFT);
@ -29,11 +29,11 @@ void Xbox360Controller::Exit()
CloseInterfaces();
}
Status Xbox360Controller::OpenInterfaces()
Result Xbox360Controller::OpenInterfaces()
{
Status rc;
Result rc;
rc = m_device->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
//This will open each interface and try to acquire Xbox One controller's in and out endpoints, if it hasn't already
@ -41,7 +41,7 @@ Status Xbox360Controller::OpenInterfaces()
for (auto &&interface : interfaces)
{
rc = interface->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
if (interface->GetDescriptor()->bInterfaceProtocol != 1)
@ -58,7 +58,7 @@ Status Xbox360Controller::OpenInterfaces()
if (inEndpoint)
{
rc = inEndpoint->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return 55555;
m_inPipe = inEndpoint;
@ -75,7 +75,7 @@ Status Xbox360Controller::OpenInterfaces()
if (outEndpoint)
{
rc = outEndpoint->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return 66666;
m_outPipe = outEndpoint;
@ -96,11 +96,11 @@ void Xbox360Controller::CloseInterfaces()
m_device->Close();
}
Status Xbox360Controller::GetInput()
Result Xbox360Controller::GetInput()
{
uint8_t input_bytes[64];
Status rc = m_inPipe->Read(input_bytes, sizeof(input_bytes));
Result rc = m_inPipe->Read(input_bytes, sizeof(input_bytes));
uint8_t type = input_bytes[0];
@ -112,13 +112,13 @@ Status Xbox360Controller::GetInput()
return rc;
}
Status Xbox360Controller::SendInitBytes()
Result Xbox360Controller::SendInitBytes()
{
uint8_t init_bytes[]{
0x05,
0x20, 0x00, 0x01, 0x00};
Status rc = m_outPipe->Write(init_bytes, sizeof(init_bytes));
Result rc = m_outPipe->Write(init_bytes, sizeof(init_bytes));
return rc;
}
@ -209,13 +209,13 @@ NormalizedButtonData Xbox360Controller::GetNormalizedButtonData()
return normalData;
}
Status Xbox360Controller::SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude)
Result Xbox360Controller::SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude)
{
uint8_t rumbleData[]{0x00, sizeof(Xbox360RumbleData), 0x00, strong_magnitude, weak_magnitude, 0x00, 0x00, 0x00};
return m_outPipe->Write(rumbleData, sizeof(rumbleData));
}
Status Xbox360Controller::SetLED(Xbox360LEDValue value)
Result Xbox360Controller::SetLED(Xbox360LEDValue value)
{
uint8_t ledPacket[]{0x01, 0x03, static_cast<uint8_t>(value)};
return m_outPipe->Write(ledPacket, sizeof(ledPacket));

View File

@ -17,18 +17,18 @@ Xbox360WirelessController::~Xbox360WirelessController()
Exit();
}
Status Xbox360WirelessController::Initialize()
Result Xbox360WirelessController::Initialize()
{
Status rc;
Result rc;
m_outputBuffer.clear();
m_outputBuffer.reserve(4);
rc = OpenInterfaces();
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
rc = WriteToEndpoint(reconnectPacket, sizeof(reconnectPacket));
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
SetLED(XBOX360LED_TOPLEFT);
@ -39,11 +39,11 @@ void Xbox360WirelessController::Exit()
CloseInterfaces();
}
Status Xbox360WirelessController::OpenInterfaces()
Result Xbox360WirelessController::OpenInterfaces()
{
Status rc;
Result rc;
rc = m_device->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
//This will open each interface and try to acquire Xbox 360 controller's in and out endpoints, if it hasn't already
@ -51,7 +51,7 @@ Status Xbox360WirelessController::OpenInterfaces()
for (auto &&interface : interfaces)
{
rc = interface->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
if (interface->GetDescriptor()->bInterfaceProtocol != 129)
@ -68,7 +68,7 @@ Status Xbox360WirelessController::OpenInterfaces()
if (inEndpoint)
{
rc = inEndpoint->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return 55555;
m_inPipe = inEndpoint;
@ -85,7 +85,7 @@ Status Xbox360WirelessController::OpenInterfaces()
if (outEndpoint)
{
rc = outEndpoint->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return 66666;
m_outPipe = outEndpoint;
@ -109,11 +109,11 @@ void Xbox360WirelessController::CloseInterfaces()
m_device->Close();
}
Status Xbox360WirelessController::GetInput()
Result Xbox360WirelessController::GetInput()
{
uint8_t input_bytes[64];
Status rc = m_inPipe->Read(input_bytes, sizeof(input_bytes));
Result rc = m_inPipe->Read(input_bytes, sizeof(input_bytes));
uint8_t type = input_bytes[0];
@ -230,13 +230,13 @@ NormalizedButtonData Xbox360WirelessController::GetNormalizedButtonData()
return normalData;
}
Status Xbox360WirelessController::SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude)
Result Xbox360WirelessController::SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude)
{
uint8_t rumbleData[]{0x00, 0x01, 0x0F, 0xC0, 0x00, strong_magnitude, weak_magnitude, 0x00, 0x00, 0x00, 0x00, 0x00};
return WriteToEndpoint(rumbleData, sizeof(rumbleData));
}
Status Xbox360WirelessController::SetLED(Xbox360LEDValue value)
Result Xbox360WirelessController::SetLED(Xbox360LEDValue value)
{
uint8_t customLEDPacket[]{0x00, 0x00, 0x08, static_cast<uint8_t>(value | 0x40), 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
return WriteToEndpoint(customLEDPacket, sizeof(customLEDPacket));
@ -252,7 +252,7 @@ ControllerConfig *Xbox360WirelessController::GetConfig()
return &_xbox360WControllerConfig;
}
Status Xbox360WirelessController::OnControllerConnect()
Result Xbox360WirelessController::OnControllerConnect()
{
m_outputBuffer.push_back(OutputPacket{reconnectPacket, sizeof(reconnectPacket)});
m_outputBuffer.push_back(OutputPacket{initDriverPacket, sizeof(initDriverPacket)});
@ -260,23 +260,23 @@ Status Xbox360WirelessController::OnControllerConnect()
return 0;
}
Status Xbox360WirelessController::OnControllerDisconnect()
Result Xbox360WirelessController::OnControllerDisconnect()
{
m_outputBuffer.push_back(OutputPacket{poweroffPacket, sizeof(poweroffPacket)});
return 0;
}
Status Xbox360WirelessController::WriteToEndpoint(const uint8_t *buffer, size_t size)
Result Xbox360WirelessController::WriteToEndpoint(const uint8_t *buffer, size_t size)
{
return m_outPipe->Write(buffer, size);
}
Status Xbox360WirelessController::OutputBuffer()
Result Xbox360WirelessController::OutputBuffer()
{
if (m_outputBuffer.empty())
return 1;
Status rc;
Result rc;
auto it = m_outputBuffer.begin();
rc = WriteToEndpoint(it->packet, it->length);
m_outputBuffer.erase(it);

View File

@ -13,12 +13,12 @@ XboxController::~XboxController()
Exit();
}
Status XboxController::Initialize()
Result XboxController::Initialize()
{
Status rc;
Result rc;
rc = OpenInterfaces();
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
return rc;
@ -28,11 +28,11 @@ void XboxController::Exit()
CloseInterfaces();
}
Status XboxController::OpenInterfaces()
Result XboxController::OpenInterfaces()
{
Status rc;
Result rc;
rc = m_device->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
//This will open each interface and try to acquire Xbox controller's in and out endpoints, if it hasn't already
@ -40,7 +40,7 @@ Status XboxController::OpenInterfaces()
for (auto &&interface : interfaces)
{
rc = interface->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
if (interface->GetDescriptor()->bInterfaceProtocol != 0)
@ -57,7 +57,7 @@ Status XboxController::OpenInterfaces()
if (inEndpoint)
{
rc = inEndpoint->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return 55555;
m_inPipe = inEndpoint;
@ -74,7 +74,7 @@ Status XboxController::OpenInterfaces()
if (outEndpoint)
{
rc = outEndpoint->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return 66666;
m_outPipe = outEndpoint;
@ -95,13 +95,13 @@ void XboxController::CloseInterfaces()
m_device->Close();
}
Status XboxController::GetInput()
Result XboxController::GetInput()
{
uint8_t input_bytes[64];
Status rc = m_inPipe->Read(input_bytes, sizeof(input_bytes));
Result rc = m_inPipe->Read(input_bytes, sizeof(input_bytes));
if (S_SUCCEEDED(rc))
if (R_SUCCEEDED(rc))
{
m_buttonData = *reinterpret_cast<XboxButtonData *>(input_bytes);
}
@ -196,7 +196,7 @@ NormalizedButtonData XboxController::GetNormalizedButtonData()
return normalData;
}
Status XboxController::SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude)
Result XboxController::SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude)
{
uint8_t rumbleData[]{0x00, 0x06, 0x00, strong_magnitude, weak_magnitude, 0x00, 0x00, 0x00};
return m_outPipe->Write(rumbleData, sizeof(rumbleData));

View File

@ -18,16 +18,16 @@ XboxOneAdapter::~XboxOneAdapter()
Exit();
}
Status XboxOneAdapter::Initialize()
Result XboxOneAdapter::Initialize()
{
Status rc;
Result rc;
rc = OpenInterfaces();
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
rc = SendInitBytes();
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
return rc;
}
@ -36,18 +36,18 @@ void XboxOneAdapter::Exit()
CloseInterfaces();
}
Status XboxOneAdapter::OpenInterfaces()
Result XboxOneAdapter::OpenInterfaces()
{
Status rc;
Result rc;
rc = m_device->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
std::vector<std::unique_ptr<IUSBInterface>> &interfaces = m_device->GetInterfaces();
for (auto &&interface : interfaces)
{
rc = interface->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
if (interface->GetDescriptor()->bInterfaceProtocol != 255)
@ -64,7 +64,7 @@ Status XboxOneAdapter::OpenInterfaces()
if (inEndpoint)
{
rc = inEndpoint->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return 3333;
m_inPipePacket = inEndpoint;
@ -77,7 +77,7 @@ Status XboxOneAdapter::OpenInterfaces()
if (inEndpoint)
{
rc = inEndpoint->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return 4444;
m_inPipe = inEndpoint;
@ -90,7 +90,7 @@ Status XboxOneAdapter::OpenInterfaces()
if (outEndpoint)
{
rc = outEndpoint->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return 5555;
m_outPipe = outEndpoint;
@ -110,9 +110,9 @@ void XboxOneAdapter::CloseInterfaces()
m_device->Close();
}
Status XboxOneAdapter::SendInitBytes()
Result XboxOneAdapter::SendInitBytes()
{
Status rc;
Result rc;
DmaConfig config = {};
config.rxBulkEnabled = 1;
@ -156,12 +156,12 @@ Status XboxOneAdapter::SendInitBytes()
WriteToLog("Writing 1st part");
rc = LoadFirmwarePart(MT_MCU_ILM_OFFSET, ilmStart, dlmStart);
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
WriteToLog("Writing 2nd part");
rc = LoadFirmwarePart(MT_MCU_DLM_OFFSET, dlmStart, dlmEnd);
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
WriteToLog("Wrote");
@ -169,10 +169,10 @@ Status XboxOneAdapter::SendInitBytes()
return 0;
}
Status XboxOneAdapter::LoadFirmwarePart(uint32_t offset, uint8_t *start, uint8_t *end)
Result XboxOneAdapter::LoadFirmwarePart(uint32_t offset, uint8_t *start, uint8_t *end)
{
// Send firmware in chunks
Status rc = -1;
Result rc = -1;
for (uint8_t *chunk = start; chunk < end; chunk += MT_FW_CHUNK_SIZE)
{
uint32_t address = (uint32_t)(offset + chunk - start);
@ -180,11 +180,11 @@ Status XboxOneAdapter::LoadFirmwarePart(uint32_t offset, uint8_t *start, uint8_t
uint16_t length = remaining > MT_FW_CHUNK_SIZE ? MT_FW_CHUNK_SIZE : remaining;
rc = ControlWrite(m_interface, MT_FCE_DMA_ADDR, address, MT_VEND_WRITE_CFG);
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
rc = ControlWrite(m_interface, MT_FCE_DMA_LEN, length << 16, MT_VEND_WRITE_CFG);
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
uint8_t data[length + 8]{0x00, 0x38, 0x00, 0x10};
@ -195,15 +195,15 @@ Status XboxOneAdapter::LoadFirmwarePart(uint32_t offset, uint8_t *start, uint8_t
}
rc = m_outPipe->Write(data, sizeof(data));
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
}
return rc;
}
Status XboxOneAdapter::ControlWrite(IUSBInterface *interface, uint16_t address, uint32_t value, VendorRequest request)
Result XboxOneAdapter::ControlWrite(IUSBInterface *interface, uint16_t address, uint32_t value, VendorRequest request)
{
Status rc;
Result rc;
if (request == MT_VEND_DEV_MODE)
{
rc = interface->ControlTransfer(0x40, request, address, 0, 0, nullptr);

View File

@ -71,16 +71,16 @@ XboxOneController::~XboxOneController()
Exit();
}
Status XboxOneController::Initialize()
Result XboxOneController::Initialize()
{
Status rc;
Result rc;
rc = OpenInterfaces();
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
rc = SendInitBytes();
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
return rc;
}
@ -89,11 +89,11 @@ void XboxOneController::Exit()
CloseInterfaces();
}
Status XboxOneController::OpenInterfaces()
Result XboxOneController::OpenInterfaces()
{
Status rc;
Result rc;
rc = m_device->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
//This will open each interface and try to acquire Xbox One controller's in and out endpoints, if it hasn't already
@ -101,7 +101,7 @@ Status XboxOneController::OpenInterfaces()
for (auto &&interface : interfaces)
{
rc = interface->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
if (interface->GetDescriptor()->bInterfaceProtocol != 208)
@ -118,7 +118,7 @@ Status XboxOneController::OpenInterfaces()
if (inEndpoint)
{
rc = inEndpoint->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return 5555;
m_inPipe = inEndpoint;
@ -135,7 +135,7 @@ Status XboxOneController::OpenInterfaces()
if (outEndpoint)
{
rc = outEndpoint->Open();
if (S_FAILED(rc))
if (R_FAILED(rc))
return 6666;
m_outPipe = outEndpoint;
@ -156,12 +156,12 @@ void XboxOneController::CloseInterfaces()
m_device->Close();
}
Status XboxOneController::GetInput()
Result XboxOneController::GetInput()
{
uint8_t input_bytes[64];
Status rc = m_inPipe->Read(input_bytes, sizeof(input_bytes));
if (S_FAILED(rc))
Result rc = m_inPipe->Read(input_bytes, sizeof(input_bytes));
if (R_FAILED(rc))
return rc;
uint8_t type = input_bytes[0];
@ -170,7 +170,7 @@ Status XboxOneController::GetInput()
{
m_buttonData = *reinterpret_cast<XboxOneButtonData *>(input_bytes);
}
else if (type == XBONEINPUT_GUIDEBUTTON) //Guide button status
else if (type == XBONEINPUT_GUIDEBUTTON) //Guide button Result
{
m_GuidePressed = input_bytes[4];
@ -179,7 +179,7 @@ Status XboxOneController::GetInput()
if (input_bytes[1] == 0x30)
{
rc = WriteAckGuideReport(input_bytes[2]);
if (S_FAILED(rc))
if (R_FAILED(rc))
return rc;
}
}
@ -187,9 +187,9 @@ Status XboxOneController::GetInput()
return rc;
}
Status XboxOneController::SendInitBytes()
Result XboxOneController::SendInitBytes()
{
Status rc;
Result rc;
uint16_t vendor = m_device->GetVendor();
uint16_t product = m_device->GetProduct();
for (int i = 0; i != (sizeof(init_packets) / sizeof(VendorProductPacket)); ++i)
@ -200,7 +200,7 @@ Status XboxOneController::SendInitBytes()
continue;
rc = m_outPipe->Write(init_packets[i].Packet, init_packets[i].Length);
if (S_FAILED(rc))
if (R_FAILED(rc))
break;
else
WriteToLog("Send a specific init packet ", i, " for controller v", vendor, " p", product);
@ -295,9 +295,9 @@ NormalizedButtonData XboxOneController::GetNormalizedButtonData()
return normalData;
}
Status XboxOneController::WriteAckGuideReport(uint8_t sequence)
Result XboxOneController::WriteAckGuideReport(uint8_t sequence)
{
Status rc;
Result rc;
uint8_t report[] = {
0x01, 0x20,
sequence,
@ -307,7 +307,7 @@ Status XboxOneController::WriteAckGuideReport(uint8_t sequence)
return rc;
}
Status XboxOneController::SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude)
Result XboxOneController::SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude)
{
uint8_t rumble_data[]{
0x09, 0x00, 0x00,

View File

@ -1,6 +1,6 @@
#pragma once
#include "IUSBDevice.h"
#include "switch.h"
#include "IUSBDevice.h"
#include "SwitchUSBInterface.h"
#include <vector>

View File

@ -1,6 +1,6 @@
#pragma once
#include "IUSBEndpoint.h"
#include "switch.h"
#include "IUSBEndpoint.h"
#include <memory>
class SwitchUSBEndpoint : public IUSBEndpoint

View File

@ -1,7 +1,6 @@
#pragma once
#include "IUSBInterface.h"
#include "SwitchUSBEndpoint.h"
#include "switch.h"
#include "IUSBInterface.h"
#include <memory>
#include <vector>

View File

@ -2,7 +2,6 @@
#include "Controllers.h"
#include "ControllerConfig.h"
#include "switch/result.h"
#include <cstring>
#include <sys/stat.h>
#include <array>

View File

@ -1,7 +1,6 @@
#include "switch.h"
#include "log.h"
#include "mainLoop.h"
#include "log.h"
//ISSUES:
// when exiting the applet, only one of the controllers is reset