mirror of
https://github.com/Maschell/HIDtoVPADNetworkClient.git
synced 2024-11-21 21:49:17 +01:00
Updated Gui, HidManager refactoring, documentation,logs
- Improved the GUI a bit - Changed HidManagerBackend to be an interface instead of an abstract class. The methods were moved to HidManager - simple documentation of the HidDevice interface (realls need more polishing though, very basic atm) - added logging for the current platform and backend being used
This commit is contained in:
parent
2eaab5a211
commit
857c5d397d
@ -15,4 +15,5 @@ Configuration files for HID to VPAD can be found [here](https://github.com/Masch
|
||||
## Used Libraries
|
||||
Lombok - https://projectlombok.org/index.html
|
||||
purejavahidapi - https://github.com/nyholku/purejavahidapi
|
||||
hid4java - https://github.com/gary-rowe/hid4java
|
||||
JXInput - https://github.com/StrikerX3/JXInput
|
||||
|
@ -41,6 +41,8 @@ import lombok.Getter;
|
||||
import net.ash.HIDToVPADNetworkClient.manager.ControllerManager;
|
||||
import net.ash.HIDToVPADNetworkClient.network.NetworkManager;
|
||||
import net.ash.HIDToVPADNetworkClient.util.Settings;
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.CardLayout;
|
||||
|
||||
public final class GuiInputControls extends JPanel {
|
||||
private static final long serialVersionUID = 1L;
|
||||
@ -55,7 +57,7 @@ public final class GuiInputControls extends JPanel {
|
||||
super();
|
||||
|
||||
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
|
||||
setPreferredSize(new Dimension(220, 150));
|
||||
setPreferredSize(new Dimension(220, 200));
|
||||
|
||||
final JButton connectButton = new JButton(CONNECT);
|
||||
connectButton.setAlignmentX(Component.CENTER_ALIGNMENT);
|
||||
@ -87,8 +89,9 @@ public final class GuiInputControls extends JPanel {
|
||||
});
|
||||
|
||||
JPanel scanWrap = new JPanel();
|
||||
scanWrap.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
|
||||
scanWrap.add(new JLabel("Auto Scan for Controllers: "));
|
||||
scanWrap.setLayout(new BoxLayout(scanWrap, BoxLayout.X_AXIS));
|
||||
JLabel label = new JLabel("Auto Scan for Controllers: ");
|
||||
scanWrap.add(label);
|
||||
scanWrap.add(cbautoScanForController);
|
||||
|
||||
ipTextBox = new JTextField();
|
||||
@ -111,10 +114,10 @@ public final class GuiInputControls extends JPanel {
|
||||
}
|
||||
});
|
||||
|
||||
JPanel autoActivateWrap = new JPanel(new FlowLayout());
|
||||
JPanel autoActivateWrap = new JPanel();
|
||||
autoActivateWrap.setLayout(new BoxLayout(autoActivateWrap, BoxLayout.X_AXIS));
|
||||
autoActivateWrap.add(new JLabel("Auto Activate Controller: "));
|
||||
autoActivateWrap.add(cbautoActivateController);
|
||||
autoActivateWrap.setMaximumSize(new Dimension(1000, 20));
|
||||
|
||||
add(Box.createVerticalGlue());
|
||||
|
||||
@ -124,9 +127,12 @@ public final class GuiInputControls extends JPanel {
|
||||
add(connectButton);
|
||||
add(Box.createRigidArea(new Dimension(1, 4)));
|
||||
add(scanButton);
|
||||
add(Box.createRigidArea(new Dimension(1, 4)));
|
||||
add(scanWrap);
|
||||
add(Box.createVerticalGlue());
|
||||
add(Box.createRigidArea(new Dimension(1, 4)));
|
||||
add(autoActivateWrap);
|
||||
add(Box.createVerticalGlue());
|
||||
|
||||
|
||||
add(Box.createVerticalGlue());
|
||||
|
||||
|
@ -21,20 +21,47 @@
|
||||
*******************************************************************************/
|
||||
package net.ash.HIDToVPADNetworkClient.hid;
|
||||
|
||||
//TODO: Documentation...
|
||||
public interface HidDevice {
|
||||
|
||||
/**
|
||||
* Opens the HidDevice for usage.
|
||||
* @return true on success, false when it failed.
|
||||
*/
|
||||
boolean open();
|
||||
|
||||
/**
|
||||
* Closes the HidDevice
|
||||
*/
|
||||
void close();
|
||||
|
||||
/**
|
||||
* Returns the VendorID of the HidDevice
|
||||
* @return vendorID
|
||||
*/
|
||||
short getVendorId();
|
||||
|
||||
/**
|
||||
* Returns the ProductID of the HidDevice
|
||||
* @return productID
|
||||
*/
|
||||
short getProductId();
|
||||
|
||||
void close();
|
||||
|
||||
/**
|
||||
* Returns the latest data.
|
||||
* @return An byte array containing the latest data. If no data is present, it'll return a empty byte array
|
||||
*/
|
||||
byte[] getLatestData();
|
||||
|
||||
/**
|
||||
* Retuns the Usage of this HID-Device
|
||||
* @return usage
|
||||
*/
|
||||
short getUsage();
|
||||
|
||||
/**
|
||||
* Returns the path of this HidDevice
|
||||
* @return path
|
||||
*/
|
||||
String getPath();
|
||||
|
||||
boolean open();
|
||||
|
||||
}
|
||||
|
@ -22,22 +22,57 @@
|
||||
package net.ash.HIDToVPADNetworkClient.hid;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import lombok.extern.java.Log;
|
||||
import net.ash.HIDToVPADNetworkClient.hid.hid4java.Hid4JavaHidManagerBackend;
|
||||
import net.ash.HIDToVPADNetworkClient.hid.purejavahid.PureJavaHidManagerBackend;
|
||||
import net.ash.HIDToVPADNetworkClient.util.Settings;
|
||||
|
||||
@Log
|
||||
public class HidManager {
|
||||
private final static HidManagerBackend backend;
|
||||
|
||||
public static List<HidDevice> getAttachedController() {
|
||||
return backend.getAttachedController();
|
||||
}
|
||||
|
||||
public static HidDevice getDeviceByPath(String path) throws IOException {
|
||||
return backend.getDeviceByPath(path);
|
||||
}
|
||||
|
||||
public static List<HidDevice> getAttachedControllers() {
|
||||
List<HidDevice> connectedGamepads = new ArrayList<HidDevice>();
|
||||
|
||||
for (HidDevice info : backend.enumerateDevices()) {
|
||||
if (isGamepad(info)) {
|
||||
// Skip Xbox controller under windows. We should use XInput instead.
|
||||
if (isXboxController(info) && Settings.isWindows()) {
|
||||
continue;
|
||||
}
|
||||
connectedGamepads.add(info);
|
||||
}
|
||||
}
|
||||
return connectedGamepads;
|
||||
}
|
||||
|
||||
public static boolean isGamepad(HidDevice info) {
|
||||
if (info == null) return false;
|
||||
short usage = info.getUsage();
|
||||
return (usage == 0x05 || usage == 0x04 || isNintendoController(info) || isPlaystationController(info));
|
||||
}
|
||||
|
||||
private static boolean isPlaystationController(HidDevice info) {
|
||||
if (info == null) return false;
|
||||
return (info.getVendorId() == 0x054c);
|
||||
}
|
||||
|
||||
private static boolean isNintendoController(HidDevice info) {
|
||||
if (info == null) return false;
|
||||
return (info.getVendorId() == 0x57e);
|
||||
}
|
||||
|
||||
private static boolean isXboxController(HidDevice info) {
|
||||
if (info == null) return false;
|
||||
return (info.getVendorId() == 0x045e) && ((info.getProductId() == 0x02ff) || (info.getProductId() == 0x02a1));
|
||||
}
|
||||
|
||||
static {
|
||||
if (Settings.isMacOSX()) {
|
||||
@ -46,7 +81,14 @@ public class HidManager {
|
||||
backend = new PureJavaHidManagerBackend();
|
||||
} else if (Settings.isLinux()) {
|
||||
backend = new Hid4JavaHidManagerBackend();
|
||||
} else
|
||||
} else{
|
||||
backend = null;
|
||||
}
|
||||
log.info("Plattform: " + System.getProperty("os.name"));
|
||||
if(backend != null){
|
||||
log.info("Backend: " + backend.getClass().getSimpleName());
|
||||
}else{
|
||||
log.info("No Backend loaded =(");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,12 +22,9 @@
|
||||
package net.ash.HIDToVPADNetworkClient.hid;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.ash.HIDToVPADNetworkClient.util.Settings;
|
||||
|
||||
public abstract class HidManagerBackend {
|
||||
public interface HidManagerBackend {
|
||||
/**
|
||||
* Searches the corresponding HIDDevice for the given path
|
||||
*
|
||||
@ -38,41 +35,5 @@ public abstract class HidManagerBackend {
|
||||
*/
|
||||
public abstract HidDevice getDeviceByPath(String path) throws IOException;
|
||||
|
||||
public List<HidDevice> getAttachedController() {
|
||||
List<HidDevice> connectedGamepads = new ArrayList<HidDevice>();
|
||||
|
||||
for (HidDevice info : enumerateDevices()) {
|
||||
if (isGamepad(info)) {
|
||||
// Skip Xbox controller under windows. We should use XInput instead.
|
||||
if (isXboxController(info) && Settings.isWindows()) {
|
||||
continue;
|
||||
}
|
||||
connectedGamepads.add(info);
|
||||
}
|
||||
}
|
||||
return connectedGamepads;
|
||||
}
|
||||
|
||||
public static boolean isGamepad(HidDevice info) {
|
||||
if (info == null) return false;
|
||||
short usage = info.getUsage();
|
||||
return (usage == 0x05 || usage == 0x04 || isNintendoController(info) || isPlaystationController(info));
|
||||
}
|
||||
|
||||
private static boolean isPlaystationController(HidDevice info) {
|
||||
if (info == null) return false;
|
||||
return (info.getVendorId() == 0x054c);
|
||||
}
|
||||
|
||||
private static boolean isNintendoController(HidDevice info) {
|
||||
if (info == null) return false;
|
||||
return (info.getVendorId() == 0x57e);
|
||||
}
|
||||
|
||||
private static boolean isXboxController(HidDevice info) {
|
||||
if (info == null) return false;
|
||||
return (info.getVendorId() == 0x045e) && ((info.getProductId() == 0x02ff) || (info.getProductId() == 0x02a1));
|
||||
}
|
||||
|
||||
public abstract List<HidDevice> enumerateDevices();
|
||||
}
|
||||
|
@ -31,7 +31,7 @@ import org.hid4java.HidServices;
|
||||
import net.ash.HIDToVPADNetworkClient.hid.HidDevice;
|
||||
import net.ash.HIDToVPADNetworkClient.hid.HidManagerBackend;
|
||||
|
||||
public class Hid4JavaHidManagerBackend extends HidManagerBackend {
|
||||
public class Hid4JavaHidManagerBackend implements HidManagerBackend {
|
||||
|
||||
@Override
|
||||
public HidDevice getDeviceByPath(String path) throws IOException {
|
||||
|
@ -34,7 +34,7 @@ class PureJavaHidDevice implements HidDevice, InputReportListener {
|
||||
private final purejavahidapi.HidDeviceInfo myDeviceInfo;
|
||||
|
||||
private final Object dataLock = new Object();
|
||||
protected byte[] currentData = new byte[1];
|
||||
protected byte[] currentData = new byte[0];
|
||||
|
||||
public PureJavaHidDevice(HidDeviceInfo info) {
|
||||
this.myDeviceInfo = info;
|
||||
|
@ -29,8 +29,7 @@ import net.ash.HIDToVPADNetworkClient.hid.HidDevice;
|
||||
import net.ash.HIDToVPADNetworkClient.hid.HidManagerBackend;
|
||||
import purejavahidapi.PureJavaHidApi;
|
||||
|
||||
public class PureJavaHidManagerBackend extends HidManagerBackend {
|
||||
|
||||
public class PureJavaHidManagerBackend implements HidManagerBackend {
|
||||
@Override
|
||||
public List<HidDevice> enumerateDevices() {
|
||||
List<HidDevice> result = new ArrayList<HidDevice>();
|
||||
|
@ -157,7 +157,7 @@ public final class ControllerManager {
|
||||
|
||||
private static Map<String, ControllerType> detectHIDDevices() {
|
||||
Map<String, ControllerType> connectedDevices = new HashMap<String, ControllerType>();
|
||||
for (HidDevice info : HidManager.getAttachedController()) {
|
||||
for (HidDevice info : HidManager.getAttachedControllers()) {
|
||||
String path = info.getPath();
|
||||
connectedDevices.put(path, ControllerType.HIDController);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user