1
0
mirror of https://github.com/cathery/sys-con.git synced 2024-07-08 03:58:43 +00:00

Make some variables constexpr where possible

This commit is contained in:
cathery 2019-11-22 01:49:51 +03:00
parent 6f2f9349c4
commit e33b5c06ab
8 changed files with 39 additions and 19 deletions

View File

@ -152,7 +152,7 @@ public:
Result SendInitBytes(); Result SendInitBytes();
Result SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude); Result SetRumble(uint8_t strong_magnitude, uint8_t weak_magnitude);
static Result SendCommand(IUSBInterface *interface, Dualshock3FeatureValue feature, void *buffer, uint16_t size); static Result SendCommand(IUSBInterface *interface, Dualshock3FeatureValue feature, const void *buffer, uint16_t size);
Result SetLED(Dualshock3LEDValue value); Result SetLED(Dualshock3LEDValue value);

View File

@ -25,6 +25,7 @@ public:
virtual void Close() = 0; virtual void Close() = 0;
virtual Result 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 Result ControlTransfer(uint8_t bmRequestType, uint8_t bmRequest, uint16_t wValue, uint16_t wIndex, uint16_t wLength, const void *buffer) = 0;
virtual IUSBEndpoint *GetEndpoint(IUSBEndpoint::Direction direction, uint8_t index) = 0; virtual IUSBEndpoint *GetEndpoint(IUSBEndpoint::Direction direction, uint8_t index) = 0;
virtual InterfaceDescriptor *GetDescriptor() = 0; virtual InterfaceDescriptor *GetDescriptor() = 0;

View File

@ -48,7 +48,7 @@ Result Dualshock3Controller::OpenInterfaces()
continue; continue;
//Send an initial control packet //Send an initial control packet
uint8_t initBytes[] = {0x42, 0x0C, 0x00, 0x00}; constexpr uint8_t initBytes[] = {0x42, 0x0C, 0x00, 0x00};
rc = SendCommand(interface.get(), Ds3FeatureStartDevice, initBytes, sizeof(initBytes)); rc = SendCommand(interface.get(), Ds3FeatureStartDevice, initBytes, sizeof(initBytes));
if (R_FAILED(rc)) if (R_FAILED(rc))
return 60; return 60;
@ -209,14 +209,14 @@ Result Dualshock3Controller::SetRumble(uint8_t strong_magnitude, uint8_t weak_ma
return 9; return 9;
} }
Result Dualshock3Controller::SendCommand(IUSBInterface *interface, Dualshock3FeatureValue feature, void *buffer, uint16_t size) Result Dualshock3Controller::SendCommand(IUSBInterface *interface, Dualshock3FeatureValue feature, const void *buffer, uint16_t size)
{ {
return interface->ControlTransfer(0x21, 0x09, static_cast<uint16_t>(feature), 0, size, buffer); return interface->ControlTransfer(0x21, 0x09, static_cast<uint16_t>(feature), 0, size, buffer);
} }
Result Dualshock3Controller::SetLED(Dualshock3LEDValue value) Result Dualshock3Controller::SetLED(Dualshock3LEDValue value)
{ {
uint8_t ledPacket[]{ const uint8_t ledPacket[]{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
static_cast<uint8_t>(value << 1), static_cast<uint8_t>(value << 1),
LED_PERMANENT, LED_PERMANENT,

View File

@ -2,10 +2,10 @@
#include <cmath> #include <cmath>
static ControllerConfig _xbox360WControllerConfig{}; static ControllerConfig _xbox360WControllerConfig{};
static const uint8_t reconnectPacket[]{0x08, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; static constexpr uint8_t reconnectPacket[]{0x08, 0x00, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const uint8_t poweroffPacket[]{0x00, 0x00, 0x08, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; static constexpr uint8_t poweroffPacket[]{0x00, 0x00, 0x08, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const uint8_t initDriverPacket[]{0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; static constexpr uint8_t initDriverPacket[]{0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const uint8_t ledPacketOn[]{0x00, 0x00, 0x08, 0x40 | XBOX360LED_TOPLEFT, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; static constexpr uint8_t ledPacketOn[]{0x00, 0x00, 0x08, 0x40 | XBOX360LED_TOPLEFT, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
Xbox360WirelessController::Xbox360WirelessController(std::unique_ptr<IUSBDevice> &&interface) Xbox360WirelessController::Xbox360WirelessController(std::unique_ptr<IUSBDevice> &&interface)
: IController(std::move(interface)) : IController(std::move(interface))

View File

@ -206,7 +206,7 @@ Result XboxOneAdapter::ControlWrite(IUSBInterface *interface, uint16_t address,
Result rc; Result rc;
if (request == MT_VEND_DEV_MODE) if (request == MT_VEND_DEV_MODE)
{ {
rc = interface->ControlTransfer(0x40, request, address, 0, 0, nullptr); rc = interface->ControlTransfer(0x40, request, address, 0, 0, static_cast<const void *>(nullptr));
} }
else else
{ {

View File

@ -10,33 +10,33 @@ static ControllerConfig _xboxoneControllerConfig{};
// and https://github.com/360Controller/360Controller/blob/master/360Controller/_60Controller.cpp // and https://github.com/360Controller/360Controller/blob/master/360Controller/_60Controller.cpp
//Enables LED on the PowerA controller but disables input? //Enables LED on the PowerA controller but disables input?
static const uint8_t xboxone_powerA_ledOn[] = { static constexpr uint8_t xboxone_powerA_ledOn[] = {
0x04, 0x20, 0x01, 0x00}; 0x04, 0x20, 0x01, 0x00};
//does something maybe //does something maybe
static const uint8_t xboxone_test_init1[] = { static constexpr uint8_t xboxone_test_init1[] = {
0x01, 0x20, 0x01, 0x09, 0x00, 0x04, 0x20, 0x3a, 0x01, 0x20, 0x01, 0x09, 0x00, 0x04, 0x20, 0x3a,
0x00, 0x00, 0x00, 0x98, 0x00}; 0x00, 0x00, 0x00, 0x98, 0x00};
//required for all xbox one controllers //required for all xbox one controllers
static const uint8_t xboxone_fw2015_init[] = { static constexpr uint8_t xboxone_fw2015_init[] = {
0x05, 0x20, 0x00, 0x01, 0x00}; 0x05, 0x20, 0x00, 0x01, 0x00};
static const uint8_t xboxone_hori_init[] = { static constexpr uint8_t xboxone_hori_init[] = {
0x01, 0x20, 0x00, 0x09, 0x00, 0x04, 0x20, 0x3a, 0x01, 0x20, 0x00, 0x09, 0x00, 0x04, 0x20, 0x3a,
0x00, 0x00, 0x00, 0x80, 0x00}; 0x00, 0x00, 0x00, 0x80, 0x00};
static const uint8_t xboxone_pdp_init1[] = { static constexpr uint8_t xboxone_pdp_init1[] = {
0x0a, 0x20, 0x00, 0x03, 0x00, 0x01, 0x14}; 0x0a, 0x20, 0x00, 0x03, 0x00, 0x01, 0x14};
static const uint8_t xboxone_pdp_init2[] = { static constexpr uint8_t xboxone_pdp_init2[] = {
0x06, 0x20, 0x00, 0x02, 0x01, 0x00}; 0x06, 0x20, 0x00, 0x02, 0x01, 0x00};
static const uint8_t xboxone_rumblebegin_init[] = { static constexpr uint8_t xboxone_rumblebegin_init[] = {
0x09, 0x00, 0x00, 0x09, 0x00, 0x0F, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x0F, 0x00, 0x00,
0x1D, 0x1D, 0xFF, 0x00, 0x00}; 0x1D, 0x1D, 0xFF, 0x00, 0x00};
static const uint8_t xboxone_rumbleend_init[] = { static constexpr uint8_t xboxone_rumbleend_init[] = {
0x09, 0x00, 0x00, 0x09, 0x00, 0x0F, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, 0x0F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00}; 0x00, 0x00, 0x00, 0x00, 0x00};
@ -48,7 +48,7 @@ struct VendorProductPacket
uint8_t Length; uint8_t Length;
}; };
static VendorProductPacket init_packets[]{ static constexpr VendorProductPacket init_packets[]{
{0x0e6f, 0x0165, xboxone_hori_init, sizeof(xboxone_hori_init)}, {0x0e6f, 0x0165, xboxone_hori_init, sizeof(xboxone_hori_init)},
{0x0f0d, 0x0067, xboxone_hori_init, sizeof(xboxone_hori_init)}, {0x0f0d, 0x0067, xboxone_hori_init, sizeof(xboxone_hori_init)},
@ -309,7 +309,7 @@ Result XboxOneController::WriteAckGuideReport(uint8_t sequence)
Result 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[]{ const uint8_t rumble_data[]{
0x09, 0x00, 0x00, 0x09, 0x00, 0x00,
0x09, 0x00, 0x0f, 0x00, 0x00, 0x09, 0x00, 0x0f, 0x00, 0x00,
strong_magnitude, strong_magnitude,

View File

@ -23,6 +23,7 @@ public:
virtual void Close() override; virtual void Close() override;
virtual Result ControlTransfer(u8 bmRequestType, u8 bmRequest, u16 wValue, u16 wIndex, u16 wLength, void *buffer) override; virtual Result ControlTransfer(u8 bmRequestType, u8 bmRequest, u16 wValue, u16 wIndex, u16 wLength, void *buffer) override;
virtual Result ControlTransfer(u8 bmRequestType, u8 bmRequest, u16 wValue, u16 wIndex, u16 wLength, const void *buffer) override;
// There are a total of 15 endpoints on a switch interface for each direction, get them by passing the desired parameters // There are a total of 15 endpoints on a switch interface for each direction, get them by passing the desired parameters
virtual IUSBEndpoint *GetEndpoint(IUSBEndpoint::Direction direction, uint8_t index) override; virtual IUSBEndpoint *GetEndpoint(IUSBEndpoint::Direction direction, uint8_t index) override;

View File

@ -91,6 +91,24 @@ Result SwitchUSBInterface::ControlTransfer(u8 bmRequestType, u8 bmRequest, u16 w
return rc; return rc;
} }
Result SwitchUSBInterface::ControlTransfer(u8 bmRequestType, u8 bmRequest, u16 wValue, u16 wIndex, u16 wLength, const void *buffer)
{
void *temp_buffer = memalign(0x1000, wLength);
if (temp_buffer == nullptr)
return -1;
u32 transferredSize;
for (u16 byte = 0; byte != wLength; ++byte)
{
static_cast<uint8_t *>(temp_buffer)[byte] = static_cast<const uint8_t *>(buffer)[byte];
}
Result rc = usbHsIfCtrlXfer(&m_session, bmRequestType, bmRequest, wValue, wIndex, wLength, temp_buffer, &transferredSize);
free(temp_buffer);
return rc;
}
IUSBEndpoint *SwitchUSBInterface::GetEndpoint(IUSBEndpoint::Direction direction, uint8_t index) IUSBEndpoint *SwitchUSBInterface::GetEndpoint(IUSBEndpoint::Direction direction, uint8_t index)
{ {
if (direction == IUSBEndpoint::USB_ENDPOINT_IN) if (direction == IUSBEndpoint::USB_ENDPOINT_IN)