diff options
| author | Pierre Bourdon <delroth@gmail.com> | 2016-08-02 07:32:26 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-08-02 07:32:26 +0200 |
| commit | facf02686a542e7250fb01f97a4e6159a8aae41d (patch) | |
| tree | 6aed18cddffa2a6b01b8cce7c09cec101f5c0b9f /Source/Core/InputCommon/GCAdapter.cpp | |
| parent | 84c936cab86bd43de52b5523752b74c3ff05ca8f (diff) | |
| parent | 041f4f5eeae70b0c0d66e100d6dcede01450bf45 (diff) | |
Merge pull request #4079 from lioncash/state
HW: Make GC input retrieval functions return by value
Diffstat (limited to 'Source/Core/InputCommon/GCAdapter.cpp')
| -rw-r--r-- | Source/Core/InputCommon/GCAdapter.cpp | 52 |
1 files changed, 27 insertions, 25 deletions
diff --git a/Source/Core/InputCommon/GCAdapter.cpp b/Source/Core/InputCommon/GCAdapter.cpp index 7c450d4288..bd6a396354 100644 --- a/Source/Core/InputCommon/GCAdapter.cpp +++ b/Source/Core/InputCommon/GCAdapter.cpp @@ -371,13 +371,13 @@ static void Reset() NOTICE_LOG(SERIALINTERFACE, "GC Adapter detached"); } -void Input(int chan, GCPadStatus* pad) +GCPadStatus Input(int chan) { if (!UseAdapter()) - return; + return {}; if (s_handle == nullptr || !s_detected) - return; + return {}; int payload_size = 0; u8 controller_payload_copy[37]; @@ -389,6 +389,7 @@ void Input(int chan, GCPadStatus* pad) payload_size = s_controller_payload_size.load(); } + GCPadStatus pad = {}; if (payload_size != sizeof(controller_payload_copy) || controller_payload_copy[0] != LIBUSB_DT_HID) { @@ -410,57 +411,58 @@ void Input(int chan, GCPadStatus* pad) s_controller_type[chan] = type; - memset(pad, 0, sizeof(*pad)); if (s_controller_type[chan] != ControllerTypes::CONTROLLER_NONE) { u8 b1 = controller_payload_copy[1 + (9 * chan) + 1]; u8 b2 = controller_payload_copy[1 + (9 * chan) + 2]; if (b1 & (1 << 0)) - pad->button |= PAD_BUTTON_A; + pad.button |= PAD_BUTTON_A; if (b1 & (1 << 1)) - pad->button |= PAD_BUTTON_B; + pad.button |= PAD_BUTTON_B; if (b1 & (1 << 2)) - pad->button |= PAD_BUTTON_X; + pad.button |= PAD_BUTTON_X; if (b1 & (1 << 3)) - pad->button |= PAD_BUTTON_Y; + pad.button |= PAD_BUTTON_Y; if (b1 & (1 << 4)) - pad->button |= PAD_BUTTON_LEFT; + pad.button |= PAD_BUTTON_LEFT; if (b1 & (1 << 5)) - pad->button |= PAD_BUTTON_RIGHT; + pad.button |= PAD_BUTTON_RIGHT; if (b1 & (1 << 6)) - pad->button |= PAD_BUTTON_DOWN; + pad.button |= PAD_BUTTON_DOWN; if (b1 & (1 << 7)) - pad->button |= PAD_BUTTON_UP; + pad.button |= PAD_BUTTON_UP; if (b2 & (1 << 0)) - pad->button |= PAD_BUTTON_START; + pad.button |= PAD_BUTTON_START; if (b2 & (1 << 1)) - pad->button |= PAD_TRIGGER_Z; + pad.button |= PAD_TRIGGER_Z; if (b2 & (1 << 2)) - pad->button |= PAD_TRIGGER_R; + pad.button |= PAD_TRIGGER_R; if (b2 & (1 << 3)) - pad->button |= PAD_TRIGGER_L; + pad.button |= PAD_TRIGGER_L; if (get_origin) - pad->button |= PAD_GET_ORIGIN; - - pad->stickX = controller_payload_copy[1 + (9 * chan) + 3]; - pad->stickY = controller_payload_copy[1 + (9 * chan) + 4]; - pad->substickX = controller_payload_copy[1 + (9 * chan) + 5]; - pad->substickY = controller_payload_copy[1 + (9 * chan) + 6]; - pad->triggerLeft = controller_payload_copy[1 + (9 * chan) + 7]; - pad->triggerRight = controller_payload_copy[1 + (9 * chan) + 8]; + pad.button |= PAD_GET_ORIGIN; + + pad.stickX = controller_payload_copy[1 + (9 * chan) + 3]; + pad.stickY = controller_payload_copy[1 + (9 * chan) + 4]; + pad.substickX = controller_payload_copy[1 + (9 * chan) + 5]; + pad.substickY = controller_payload_copy[1 + (9 * chan) + 6]; + pad.triggerLeft = controller_payload_copy[1 + (9 * chan) + 7]; + pad.triggerRight = controller_payload_copy[1 + (9 * chan) + 8]; } else if (!Core::g_want_determinism) { // This is a hack to prevent a desync due to SI devices // being different and returning different values. // The corresponding code in DeviceGCAdapter has the same check - pad->button = PAD_ERR_STATUS; + pad.button = PAD_ERR_STATUS; } } + + return pad; } bool DeviceConnected(int chan) |
