Merge pull request #1712 from skidau/GC-Adapter-thread-fix
Corrected the buffer that is used by the GCAdapter thread.
This commit is contained in:
commit
31bc51072b
|
@ -38,7 +38,7 @@ static void Read()
|
||||||
{
|
{
|
||||||
u8 controller_payload_swap[37];
|
u8 controller_payload_swap[37];
|
||||||
|
|
||||||
libusb_interrupt_transfer(s_handle, s_endpoint_in, s_controller_payload, sizeof(controller_payload_swap), &s_controller_payload_size, 0);
|
libusb_interrupt_transfer(s_handle, s_endpoint_in, controller_payload_swap, sizeof(controller_payload_swap), &s_controller_payload_size, 0);
|
||||||
|
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lk(s_mutex);
|
std::lock_guard<std::mutex> lk(s_mutex);
|
||||||
|
@ -164,8 +164,6 @@ void Init()
|
||||||
unsigned char payload = 0x13;
|
unsigned char payload = 0x13;
|
||||||
libusb_interrupt_transfer(s_handle, s_endpoint_out, &payload, sizeof(payload), &tmp, 0);
|
libusb_interrupt_transfer(s_handle, s_endpoint_out, &payload, sizeof(payload), &tmp, 0);
|
||||||
|
|
||||||
RefreshConnectedDevices();
|
|
||||||
|
|
||||||
s_adapter_thread_running.Set(true);
|
s_adapter_thread_running.Set(true);
|
||||||
s_adapter_thread = std::thread(Read);
|
s_adapter_thread = std::thread(Read);
|
||||||
}
|
}
|
||||||
|
@ -271,50 +269,6 @@ void Output(int chan, u8 rumble_command)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SIDevices GetDeviceType(int channel)
|
|
||||||
{
|
|
||||||
if (s_handle == nullptr || !SConfig::GetInstance().m_GameCubeAdapter)
|
|
||||||
return SIDEVICE_NONE;
|
|
||||||
|
|
||||||
switch (s_controller_type[channel])
|
|
||||||
{
|
|
||||||
case CONTROLLER_WIRED:
|
|
||||||
return SIDEVICE_GC_CONTROLLER;
|
|
||||||
case CONTROLLER_WIRELESS:
|
|
||||||
return SIDEVICE_GC_CONTROLLER;
|
|
||||||
default:
|
|
||||||
return SIDEVICE_NONE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void RefreshConnectedDevices()
|
|
||||||
{
|
|
||||||
if (s_handle == nullptr || !SConfig::GetInstance().m_GameCubeAdapter)
|
|
||||||
return;
|
|
||||||
|
|
||||||
int size = 0;
|
|
||||||
u8 refresh_controller_payload[37];
|
|
||||||
|
|
||||||
libusb_interrupt_transfer(s_handle, s_endpoint_in, refresh_controller_payload, sizeof(refresh_controller_payload), &size, 0);
|
|
||||||
|
|
||||||
if (size != sizeof(refresh_controller_payload) || refresh_controller_payload[0] != LIBUSB_DT_HID)
|
|
||||||
{
|
|
||||||
WARN_LOG(SERIALINTERFACE, "error reading payload (size: %d)", size);
|
|
||||||
Shutdown();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (int chan = 0; chan < MAX_SI_CHANNELS; chan++)
|
|
||||||
{
|
|
||||||
u8 type = refresh_controller_payload[1 + (9 * chan)] >> 4;
|
|
||||||
if (type != CONTROLLER_NONE && s_controller_type[chan] == CONTROLLER_NONE)
|
|
||||||
NOTICE_LOG(SERIALINTERFACE, "New device connected to Port %d of Type: %02x", chan + 1, refresh_controller_payload[1 + (9 * chan)]);
|
|
||||||
|
|
||||||
s_controller_type[chan] = type;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool IsDetected()
|
bool IsDetected()
|
||||||
{
|
{
|
||||||
return s_handle != nullptr;
|
return s_handle != nullptr;
|
||||||
|
|
|
@ -15,8 +15,6 @@ void Init();
|
||||||
void Shutdown();
|
void Shutdown();
|
||||||
void Input(int chan, GCPadStatus* pad);
|
void Input(int chan, GCPadStatus* pad);
|
||||||
void Output(int chan, u8 rumble_command);
|
void Output(int chan, u8 rumble_command);
|
||||||
SIDevices GetDeviceType(int channel);
|
|
||||||
void RefreshConnectedDevices();
|
|
||||||
bool IsDetected();
|
bool IsDetected();
|
||||||
bool IsDriverDetected();
|
bool IsDriverDetected();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue