mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-12-26 18:27:50 +00:00
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];
|
||||
|
||||
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);
|
||||
@ -164,8 +164,6 @@ void Init()
|
||||
unsigned char payload = 0x13;
|
||||
libusb_interrupt_transfer(s_handle, s_endpoint_out, &payload, sizeof(payload), &tmp, 0);
|
||||
|
||||
RefreshConnectedDevices();
|
||||
|
||||
s_adapter_thread_running.Set(true);
|
||||
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()
|
||||
{
|
||||
return s_handle != nullptr;
|
||||
|
@ -15,8 +15,6 @@ void Init();
|
||||
void Shutdown();
|
||||
void Input(int chan, GCPadStatus* pad);
|
||||
void Output(int chan, u8 rumble_command);
|
||||
SIDevices GetDeviceType(int channel);
|
||||
void RefreshConnectedDevices();
|
||||
bool IsDetected();
|
||||
bool IsDriverDetected();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user