Re: [PATCH] HID: wiimote: add Nintendo-Wii-Remote-Plus IDs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Peter

On Mon, Nov 12, 2012 at 7:19 AM, Peter Olson <peter.olson@xxxxxxxxx> wrote:
> (If I'm over-documenting my process, sorry, just wanted it as a record
> for myself as well) Summary at bottom, oneline is progress but not
> complete success yet.
>
> Ok, now built bluez with the patch from "[PATCH bluez] wiimote: add
> Wii-Remote-Plus ID and name detection" with one modification to fit
> with the current code that I have (bluez-4.101):
> -+       memcpy(pinbuf, adapter_get_address(adapter), 6);
> ++       memcpy(pinbuf, &sba, 6);
> I grabbed bluez-4.101 from the Archlinux ABS, pulled the sources
> "makepkg -o", applied the patch (change to plugins/wiimote.c) with the
> change from {adapter_get_address(adapter) => &sba}, then had ABS
> finish making and installing with "makepkg -ei".
>
> As my desktop system has been updated since last time I tested this
> (moved to systemd, new linux kernel and more) I decided to re-grab the
> kernel and rebuild the hid modules. Grabbed base/linux from Arch ABS,
> pulled sources, applied the patch to the two files
> (drivers/hid/hid-ids.h and drivers/hid/hid-wiimote-core.c), and then
> built the kernel "makepkg -e". I then reloaded all of the hid modules
> to make sure I had the latest versions loaded.
>
> $ sudo modprobe hid-wiimote (to make sure all dependencies were loaded)
> $ sudo rmmod hid_wiimote
> $ sudo rmmod usbhid
> $ sudo rmmod hid_generic
> $ sudo rmmod hid
> $ sudo insmod ./hid.ko
> $ sudo insmod ./hid-generic.ko
> $ sudo insmod ./usbhid/usbhid.ko
> $ sudo insmod ./hid-wiimote.ko
>
> Then I plugged in my USB bluetooth module, and started the bluetooth
> service (systemctl start bluetooth).
> Then I started blueman-applet, had it search, and it saw the wiimote.
> I clicked pair, and it properly connected with the Wiimote. I clicked
> Setup, (*) Connect to Input Service, => Forward, and it said it
> properly connected.

Yeah, that's how it is supposed to work. Seems like the new Wii
Remotes require Authentication. I will push the changes to
bluez-upstream so bluez-5.0 (the next release) will include them.
Thanks for testing!

> Checking dmesg:
> [247627.881346] hid-generic 0005:057E:0330.0005: unknown main item tag 0x0
> [247627.881478] input: Nintendo RVL-CNT-01-TR as
> /devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1.1/3-1.1:1.0/bluetooth/hci0/hci0:12/input21
> [247627.881725] hid-generic 0005:057E:0330.0005: input,hidraw4:
> BLUETOOTH HID v0.01 Gamepad [Nintendo RVL-CNT-01-TR] on
> 00:02:72:1A:BD:94

Yeah, that means the device isn't listed in "hid_have_special_driver".
Therefore, the generic driver picks up the device.

> Ok, something had issues from the kernel side of things connecting to
> the correct input device. Now going to add:
> +       { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO,
> USB_DEVICE_ID_NINTENDO_WIIMOTE_2) },
> to the hid_have_special_driver[] array in drivers/hid/hid-core.c. This
> doesn't seem like it should make a difference, as for some reason it
> was recognizing the hid-wiimote device in my email on 10/22 without
> this change.

I really wonder why that worked. Maybe there is some user-space code
that rewrites the PID/VID under some circumstances to the old Wii
Remote values or your Wii Remote uses occasionally the old values when
using auto-reconnect. I have no idea, but I actually don't care that
much, since as long as we add all IDs, we are on the safe side.

Anyway, if you see any pattern in the VID/PID selection, feel free to
report these. All the Wii Remote protocol/behavior was
reverse-engineered so we can never be sure that we got it right.

> SIDE NOTE: All throughout this issue with the kernel module changes,
> the bluez changes seem to be working. I connected the wiimote by
> pressing the red button in the battery compartment, and now if I shut
> down the wiimote (hold power button) and turn it back on,
> blueman-applet pops up a dialog asking if I want to reconnect. Also,
> the four LEDs on the bottom of the wiimote have kept flashing
> continuously for minutes, rather then just the 30 seconds or so that
> it usually blinks for when trying to connect. Finally, the
> blueman-applet icon has stayed green during this time, also indicating
> that the computer thinks that it's remaining connected as well. All of
> this leads me to believe that the bluez patch is working as intended.

The flashing of the LEDs is a bug. Normally, after connection
establishment only LED1 should be on. You can then change the LEDs via
the sysfs API. Anyway, sometimes LEDs just keep flashing, in which
case I simply reconnect the devices and it works.

> Neither xwiishow nor dolphin-emu detect a wiimote connected, but that
> could be the kernel module's fault.

dolphin-emu doesn't use this driver. They use their own
implementation, see here:
http://code.google.com/p/dolphin-emu/source/browse/Source/Core/Core/Src/HW/WiimoteReal/IONix.cpp

If it is not working, please report a bug to their bugtracker. I have
never used dolphin-emu, so I cannot help you here, sorry.

> Back to the kernel module. The addition to hid_have_special_driver[]
> has been made as well as the previous patch. Kernel rebuild and
> rmmod/insmod all hid modules.
>
> dmesg success! (Note that I don't have the numchuck plugged in in these tests)
> [254328.057515] wiimote 0005:057E:0330.0005: unknown main item tag 0x0
> [254328.057682] wiimote 0005:057E:0330.0005: hidraw4: BLUETOOTH HID
> v0.01 Gamepad [Nintendo RVL-CNT-01-TR] on 00:02:72:1A:BD:94
> [254328.057786] input: Nintendo Wii Remote Accelerometer as
> /devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1.1/3-1.1:1.0/bluetooth/hci0/hci0:11/0005:057E:0330.0005/input/input35
> [254328.058005] input: Nintendo Wii Remote IR as
> /devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1.1/3-1.1:1.0/bluetooth/hci0/hci0:11/0005:057E:0330.0005/input/input36
> [254328.058113] input: Nintendo Wii Remote as
> /devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1.1/3-1.1:1.0/bluetooth/hci0/hci0:11/0005:057E:0330.0005/input/input37
> [254329.055694] power_supply wiimote_battery: driver failed to report
> `capacity' property: -5
> [254329.055768] Registered led device: 0005:057E:0330.0005:blue:p0
> [254329.055793] Registered led device: 0005:057E:0330.0005:blue:p1
> [254329.055813] Registered led device: 0005:057E:0330.0005:blue:p2
> [254329.055832] Registered led device: 0005:057E:0330.0005:blue:p3
> [254329.055887] input: Nintendo Wii Remote Extension as
> /devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1.1/3-1.1:1.0/bluetooth/hci0/hci0:11/0005:057E:0330.0005/input/input38
> [254329.056025] input: Nintendo Wii Remote Motion+ as
> /devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1.1/3-1.1:1.0/bluetooth/hci0/hci0:11/0005:057E:0330.0005/input/input39
> [254329.056176] wiimote 0005:057E:0330.0005: New device registered
> [254329.074105] wiimote 0005:057E:0330.0005: Remote error 2 on req 17
> [254329.102911] wiimote 0005:057E:0330.0005: Remote error 2 on req 18
> [254329.109150] wiimote 0005:057E:0330.0005: Remote error 2 on req 18
>
> However, there are some errors reported, and xwiishow still does not
> report any wiimotes found. Does xwiishow need to be updated as well?

How do you invoke xwiishow? If it does not work, please try using:

ls -l /sys/bus/hid/devices/

This should list all connected Wii Remotes. xwiishow just tries to
read these values.
Your system-log looks fine, nothing wrong there. The device is
detected and initialized properly and the sysfs attributes are
created.

> After playing for a bit trying to get any response, I shut down the
> wiimote by the power button, and dmesg reported the change:
> [254578.785557] wiimote 0005:057E:0330.0005: Device removed
> [254580.787965] power_supply wiimote_battery: driver failed to report
> `capacity' property: -5

That seems fine, too.

> One more time I powered on the wiimote, clicked Accept on the
> Bluetooth Authentication dialog from blueman-applet, waited a few
> seconds, and then powered down the wiimote. Below is the dmesg log
> from start to finish.
> [254639.813654] wiimote 0005:057E:0330.0006: unknown main item tag 0x0
> [254639.813714] wiimote 0005:057E:0330.0006: hidraw4: BLUETOOTH HID
> v0.01 Gamepad [Nintendo RVL-CNT-01-TR] on 00:02:72:1A:BD:94
> [254639.813738] input: Nintendo Wii Remote Accelerometer as
> /devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1.1/3-1.1:1.0/bluetooth/hci0/hci0:11/0005:057E:0330.0006/input/input40
> [254639.813779] input: Nintendo Wii Remote IR as
> /devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1.1/3-1.1:1.0/bluetooth/hci0/hci0:11/0005:057E:0330.0006/input/input41
> [254639.813821] input: Nintendo Wii Remote as
> /devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1.1/3-1.1:1.0/bluetooth/hci0/hci0:11/0005:057E:0330.0006/input/input42
> [254640.813251] power_supply wiimote_battery: driver failed to report
> `capacity' property: -5
> [254640.813323] Registered led device: 0005:057E:0330.0006:blue:p0
> [254640.813348] Registered led device: 0005:057E:0330.0006:blue:p1
> [254640.813358] Registered led device: 0005:057E:0330.0006:blue:p2
> [254640.813367] Registered led device: 0005:057E:0330.0006:blue:p3
> [254640.813396] input: Nintendo Wii Remote Extension as
> /devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1.1/3-1.1:1.0/bluetooth/hci0/hci0:11/0005:057E:0330.0006/input/input43
> [254640.813746] input: Nintendo Wii Remote Motion+ as
> /devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1.1/3-1.1:1.0/bluetooth/hci0/hci0:11/0005:057E:0330.0006/input/input44
> [254640.813817] wiimote 0005:057E:0330.0006: New device registered
> [254640.848031] wiimote 0005:057E:0330.0006: Remote error 2 on req 17
> [254640.871769] wiimote 0005:057E:0330.0006: Remote error 2 on req 18
> [254640.879275] wiimote 0005:057E:0330.0006: Remote error 2 on req 18
> [254678.447402] wiimote 0005:057E:0330.0006: Device removed
> [254680.452375] power_supply wiimote_battery: driver failed to report
> `capacity' property: -5
>
>
> Summary, with the bluez patch (plus one change), and the kernel module
> patch (plus hid_have_special_driver[] change) I now have the wiimote
> connecting to the computer when I hit any button on the Wiimote. The
> computer recognizes the wiimote as shown in dmesg. However, there are
> some errors, and xwiishow still does not detect that any wiimote has
> been connected with the computer.
>
> Please let me know if there's anything further I can test, I believe
> that more changes are needed before I can actually use the wiimote
> with dolphin-emu or anything else.

Your logs all look fine. If "xwiishow list" doesn't show anything,
then please try:

./xwiishow /sys/bus/hid/devices/<dev>

Where <dev> is the bluetooth address of your device. You should be
able to find this with bash-tab-completion.

Thanks a lot for testing this! It really looks like everything is
working, except xwiishow seems to be unable to find the device via
sysfs, which is odd. The content of /sys/bus/hid/devices/ while a Wii
Remote is connected would really help.

Thanks
David
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux