diff options
| author | Ryan Houdek <Sonicadvance1@gmail.com> | 2016-02-29 09:54:01 -0500 |
|---|---|---|
| committer | Ryan Houdek <Sonicadvance1@gmail.com> | 2016-02-29 09:54:01 -0500 |
| commit | c82feb6c08aa6e77ac4c906caee6dd5eb557fb39 (patch) | |
| tree | 4aa4e5c89a543d0663a3f105a3021a9a73c4ad19 /Source/Android/app/src/main/java | |
| parent | 961901daaec87de966ee3eb259060a9c2b651497 (diff) | |
| parent | 6cc40b12357ae339abcb44517810af304bab77ea (diff) | |
Merge pull request #3626 from Sonicadvance1/more_robust_gcadapter
Improve stability of the Wii U Gamecube Controller adapter under Android.
Diffstat (limited to 'Source/Android/app/src/main/java')
| -rw-r--r-- | Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Java_GCAdapter.java | 74 |
1 files changed, 43 insertions, 31 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Java_GCAdapter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Java_GCAdapter.java index 87d816d93e..37ab4c6b5f 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Java_GCAdapter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Java_GCAdapter.java @@ -9,6 +9,7 @@ import android.hardware.usb.UsbDeviceConnection; import android.hardware.usb.UsbEndpoint; import android.hardware.usb.UsbInterface; import android.hardware.usb.UsbManager; +import android.widget.Toast; import org.dolphinemu.dolphinemu.NativeLibrary; import org.dolphinemu.dolphinemu.services.USBPermService; @@ -76,32 +77,16 @@ public class Java_GCAdapter { } public static int Input() { - if (usb_in != null) - { - int read = usb_con.bulkTransfer(usb_in, controller_payload, controller_payload.length, 16); - return read; - } - else - { - // TODO Is this right? - return 0; - } + int read = usb_con.bulkTransfer(usb_in, controller_payload, controller_payload.length, 16); + return read; } public static int Output(byte[] rumble) { - if (usb_out != null) - { - int size = usb_con.bulkTransfer(usb_out, rumble, 5, 16); - return size; - } - else - { - // TODO Is this right? - return 0; - } + int size = usb_con.bulkTransfer(usb_out, rumble, 5, 16); + return size; } - public static void OpenAdapter() + public static boolean OpenAdapter() { HashMap<String, UsbDevice> devices = manager.getDeviceList(); Iterator it = devices.entrySet().iterator(); @@ -113,20 +98,47 @@ public class Java_GCAdapter { if (manager.hasPermission(dev)) { usb_con = manager.openDevice(dev); - UsbConfiguration conf = dev.getConfiguration(0); - usb_intf = conf.getInterface(0); - usb_con.claimInterface(usb_intf, true); - for (int i = 0; i < usb_intf.getEndpointCount(); ++i) - if (usb_intf.getEndpoint(i).getDirection() == UsbConstants.USB_DIR_IN) - usb_in = usb_intf.getEndpoint(i); + + Log.info("GCAdapter: Number of configurations: " + dev.getConfigurationCount()); + Log.info("GCAdapter: Number of interfaces: " + dev.getInterfaceCount()); + + if (dev.getConfigurationCount() > 0 && dev.getInterfaceCount() > 0) + { + UsbConfiguration conf = dev.getConfiguration(0); + usb_intf = conf.getInterface(0); + usb_con.claimInterface(usb_intf, true); + + Log.info("GCAdapter: Number of endpoints: " + usb_intf.getEndpointCount()); + + if (usb_intf.getEndpointCount() == 2) + { + for (int i = 0; i < usb_intf.getEndpointCount(); ++i) + if (usb_intf.getEndpoint(i).getDirection() == UsbConstants.USB_DIR_IN) + usb_in = usb_intf.getEndpoint(i); + else + usb_out = usb_intf.getEndpoint(i); + + InitAdapter(); + return true; + } else - usb_out = usb_intf.getEndpoint(i); + { + usb_con.releaseInterface(usb_intf); + } + } - InitAdapter(); - return; + NativeLibrary.sEmulationActivity.runOnUiThread(new Runnable() + { + @Override + public void run() + { + Toast.makeText(NativeLibrary.sEmulationActivity, "GameCube Adapter couldn't be opened. Please re-plug the device.", Toast.LENGTH_LONG).show(); + } + }); + usb_con.close(); } } - } + return false; } } |
