Skip to content

Joycon assigned incorrectly as pro controller #44

@arieleoar

Description

@arieleoar

Hi @DanielOgorchock !

I've got a little question: i've got a pair of joycons that the system is recognizing as:

Left:

Input device ID: bus 0x5 vendor 0x57e product 0x2009 version 0x8001
Input device name: "Nintendo Switch Pro Controller"

Right:

Input device ID: bus 0x5 vendor 0x57e product 0x2009 version 0x8001
Input device name: "Nintendo Switch Pro Controller"

From hid-ids.h:

#define USB_VENDOR_ID_NINTENDO		0x057e
#define USB_DEVICE_ID_NINTENDO_WIIMOTE	0x0306
#define USB_DEVICE_ID_NINTENDO_WIIMOTE2	0x0330
#define USB_DEVICE_ID_NINTENDO_JOYCONL	0x2006
#define USB_DEVICE_ID_NINTENDO_JOYCONR	0x2007
#define USB_DEVICE_ID_NINTENDO_PROCON	0x2009  <---- are getting this global var
#define USB_DEVICE_ID_NINTENDO_CHRGGRIP	0x200E

So apparently there is no difference between them on product id or version id, and also as being recongized as Pro Controllers it complicates things because the SR/SL buttons of the joycons are not getting mapped/detected by the kernel.

evdev output for left:

Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 309 (BTN_Z)
    Event code 310 (BTN_TL)
    Event code 312 (BTN_TL2)
    Event code 314 (BTN_SELECT)
    Event code 317 (BTN_THUMBL)
  Event type 3 (EV_ABS)
    Event code 0 (ABS_X)
      Value   1048
      Min   -32767
      Max    32767
      Fuzz     250
      Flat     500
    Event code 1 (ABS_Y)
      Value  -1026
      Min   -32767
      Max    32767
      Fuzz     250
      Flat     500
    Event code 16 (ABS_HAT0X)
      Value      0
      Min       -1
      Max        1
    Event code 17 (ABS_HAT0Y)
      Value      0
      Min       -1
      Max        1
  Event type 21 (EV_FF)
    Event code 80 (FF_RUMBLE)
    Event code 81 (FF_PERIODIC)
    Event code 88 (FF_SQUARE)
    Event code 89 (FF_TRIANGLE)
    Event code 90 (FF_SINE)
    Event code 96 (FF_GAIN)

evdev output for right:

Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 304 (BTN_SOUTH)
    Event code 305 (BTN_EAST)
    Event code 307 (BTN_NORTH)
    Event code 308 (BTN_WEST)
    Event code 311 (BTN_TR)
    Event code 313 (BTN_TR2)
    Event code 315 (BTN_START)
    Event code 316 (BTN_MODE)
    Event code 318 (BTN_THUMBR)
  Event type 3 (EV_ABS)
    Event code 3 (ABS_RX)
      Value   1048
      Min   -32767
      Max    32767
      Fuzz     250
      Flat     500
    Event code 4 (ABS_RY)
      Value  -1026
      Min   -32767
      Max    32767
      Fuzz     250
      Flat     500
  Event type 21 (EV_FF)
    Event code 80 (FF_RUMBLE)
    Event code 81 (FF_PERIODIC)
    Event code 88 (FF_SQUARE)
    Event code 89 (FF_TRIANGLE)
    Event code 90 (FF_SINE)
    Event code 96 (FF_GAIN)

But i've also saw in the code of hid-nintendo.c these lines:

(1624:1628)

switch (hdev->product) {
	case USB_DEVICE_ID_NINTENDO_PROCON:
		name = "Nintendo Switch Pro Controller";
		imu_name = "Nintendo Switch Pro Controller IMU";
		break;

That sets the device name but this took my attention too:
(483:501)

#define jc_type_is_joycon(ctlr) \
	(ctlr->hdev->product == USB_DEVICE_ID_NINTENDO_JOYCONL || \
	 ctlr->hdev->product == USB_DEVICE_ID_NINTENDO_JOYCONR || \
	 ctlr->hdev->product == USB_DEVICE_ID_NINTENDO_CHRGGRIP)
#define jc_type_is_procon(ctlr) \
	(ctlr->hdev->product == USB_DEVICE_ID_NINTENDO_PROCON)
#define jc_type_is_chrggrip(ctlr) \
	(ctlr->hdev->product == USB_DEVICE_ID_NINTENDO_CHRGGRIP)

/* Does this controller have inputs associated with left joycon? */
#define jc_type_has_left(ctlr) \
	(ctlr->ctlr_type == JOYCON_CTLR_TYPE_JCL || \
	 ctlr->ctlr_type == JOYCON_CTLR_TYPE_PRO)

/* Does this controller have inputs associated with right joycon? */
#define jc_type_has_right(ctlr) \
	(ctlr->ctlr_type == JOYCON_CTLR_TYPE_JCR || \
	 ctlr->ctlr_type == JOYCON_CTLR_TYPE_PRO)

Because later (at 1308 aprox the first recurrence) asks again if it's a joycon to report and set capability of the S buttons, which that seems to be the problem.

So, there is a way to get more information of the joycon in order to diferentiate them, additionaly to the product/version ids? How can i get this info? I see that you gets ctlr_type which i cannot find in the device info using the console so i assume there are more info that i'm not seeing.

Thanks in advance for reading!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions