From: David Herrmann <dh.herrmann@googlemail.com>
To: Peter Olson <peter.olson@gmail.com>
Cc: Jiri Kosina <jkosina@suse.cz>,
"open list:HID CORE LAYER" <linux-input@vger.kernel.org>
Subject: Re: [PATCH] HID: wiimote: add Nintendo-Wii-Remote-Plus IDs
Date: Mon, 12 Nov 2012 13:41:26 +0100 [thread overview]
Message-ID: <CANq1E4T+s4igeAj-YN7nW=37UKcprmU_V9JgyML+H5E8eL3fLg@mail.gmail.com> (raw)
In-Reply-To: <CAEfj2kBfjzVp7+Zw+Cn2QfD_eCNz=Z5c1j-ku5vHxL5W-Zb_QA@mail.gmail.com>
Hi Peter
On Mon, Nov 12, 2012 at 7:19 AM, Peter Olson <peter.olson@gmail.com> 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
next prev parent reply other threads:[~2012-11-12 12:41 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-22 8:37 [PATCH] HID: wiimote: add Nintendo-Wii-Remote-Plus IDs David Herrmann
2012-10-22 9:36 ` Jiri Kosina
2012-10-23 4:42 ` Peter Olson
2012-10-24 18:42 ` David Herrmann
2012-11-01 4:46 ` Peter Olson
2012-11-12 6:19 ` Peter Olson
2012-11-12 12:41 ` David Herrmann [this message]
2012-11-13 2:53 ` Peter Olson
2012-11-15 12:36 ` David Herrmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CANq1E4T+s4igeAj-YN7nW=37UKcprmU_V9JgyML+H5E8eL3fLg@mail.gmail.com' \
--to=dh.herrmann@googlemail.com \
--cc=jkosina@suse.cz \
--cc=linux-input@vger.kernel.org \
--cc=peter.olson@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).