@@ -38,7 +38,7 @@ pub fn controllers() -> Result<Vec<Controller>> {
38
38
if nintendo_pro_controllers. len ( ) == 1 || nintendo_pro_controllers. len ( ) == 2 {
39
39
// When we only get one device, we know it's connected via Bluetooth.
40
40
// When we get two devices, we know it's connected only via USB. Both will report the same data, so we'll just return the first one.
41
- let controller = nintendo:: parse_pro_controller_data ( nintendo_pro_controllers[ 0 ] , & hidapi) ?;
41
+ let controller = nintendo:: parse_controller_data ( nintendo_pro_controllers[ 0 ] , & hidapi) ?;
42
42
controllers. push ( controller) ;
43
43
} else if nintendo_pro_controllers. len ( ) == 3 {
44
44
// When we get three devices, we know it's connected via USB + Bluetooth.
@@ -48,11 +48,23 @@ pub fn controllers() -> Result<Vec<Controller>> {
48
48
. find ( |device_info| device_info. interface_number ( ) == -1 ) ;
49
49
50
50
if let Some ( bt_controller) = bt_controller {
51
- let controller = nintendo:: parse_pro_controller_data ( bt_controller, & hidapi) ?;
51
+ let controller = nintendo:: parse_controller_data ( bt_controller, & hidapi) ?;
52
52
controllers. push ( controller) ;
53
53
}
54
54
}
55
55
56
+ let nintendo_non_pro_controllers: Vec < _ > = hidapi
57
+ . device_list ( )
58
+ . filter ( |device_info| {
59
+ device_info. vendor_id ( ) == nintendo:: VENDOR_ID_NINTENDO
60
+ && device_info. product_id ( ) != nintendo:: PRODUCT_ID_NINTENDO_PROCON
61
+ } )
62
+ . collect ( ) ;
63
+ for device_info in nintendo_non_pro_controllers {
64
+ let controller = nintendo:: parse_controller_data ( device_info, & hidapi) ?;
65
+ controllers. push ( controller) ;
66
+ }
67
+
56
68
// for some reason HidApi's list_devices() is returning multiple instances of the same controller
57
69
// so dedupe by serial number
58
70
let mut xbox_controllers: Vec < _ > = hidapi
0 commit comments