2012-10-22 08:31:20

by David Herrmann

[permalink] [raw]
Subject: [PATCH bluez] wiimote: add Wii-Remote-Plus ID and name detection

The Nintendo Wii Remote Plus uses a new product ID and name. To detect
them properly, we need to add them to the wiimote-module.

To avoid an overlong "if" statement, this converts the match-function to
walk over an array and check all VID/PID pairs and device-names. This
makes adding new devices much easier.
---
Hi Johan

I am actually not sure why Nintendo changed the VID/PID for the new revisions of
the WiimotePlus. I have a WiimotePlus which still uses the old numbers and works
here quite well. However, I have now got multiple requests from people with the
new device name and IDs. Unfortunately, I cannot test these so I'd like to have
a "Tested-by" by Peter (CC'ed) before this is applied.

Thanks
David

plugins/wiimote.c | 35 ++++++++++++++++++++++++++++-------
1 file changed, 28 insertions(+), 7 deletions(-)

diff --git a/plugins/wiimote.c b/plugins/wiimote.c
index 5708bf8..f506ed6 100644
--- a/plugins/wiimote.c
+++ b/plugins/wiimote.c
@@ -2,7 +2,7 @@
*
* BlueZ - Bluetooth protocol stack for Linux
*
- * Copyright (C) 2011 David Herrmann <[email protected]>
+ * Copyright (C) 2011-2012 David Herrmann <[email protected]>
*
*
* This program is free software; you can redistribute it and/or modify
@@ -58,11 +58,23 @@
* is pressed.
*/

+static uint16_t wii_ids[][2] = {
+ { 0x057e, 0x0306 },
+ { 0x057e, 0x0330 },
+};
+
+static const char *wii_names[] = {
+ "Nintendo RVL-CNT-01",
+ "Nintendo RVL-CNT-01-TR",
+ "Nintendo RVL-WBC-01",
+};
+
static ssize_t wii_pincb(struct btd_adapter *adapter, struct btd_device *device,
char *pinbuf, gboolean *display)
{
uint16_t vendor, product;
char addr[18], name[25];
+ unsigned int i, len;

ba2str(device_get_address(device), addr);

@@ -72,15 +84,24 @@ static ssize_t wii_pincb(struct btd_adapter *adapter, struct btd_device *device,
device_get_name(device, name, sizeof(name));
name[sizeof(name) - 1] = 0;

- if (g_str_equal(name, "Nintendo RVL-CNT-01") ||
- g_str_equal(name, "Nintendo RVL-WBC-01") ||
- (vendor == 0x057e && product == 0x0306)) {
- DBG("Forcing fixed pin on detected wiimote %s", addr);
- memcpy(pinbuf, adapter_get_address(adapter), 6);
- return 6;
+ len = sizeof(wii_ids) / sizeof(wii_ids[0]);
+ for (i = 0; i < len; ++i) {
+ if (vendor == wii_ids[i][0] && product == wii_ids[i][1])
+ goto found;
+ }
+
+ len = sizeof(wii_names) / sizeof(wii_names[0]);
+ for (i = 0; i < len; ++i) {
+ if (g_str_equal(name, wii_names[i]))
+ goto found;
}

return 0;
+
+found:
+ DBG("Forcing fixed pin on detected wiimote %s", addr);
+ memcpy(pinbuf, adapter_get_address(adapter), 6);
+ return 6;
}

static int wii_probe(struct btd_adapter *adapter)
--
1.7.12.4



2012-11-28 18:03:26

by Peter Olson

[permalink] [raw]
Subject: Re: [PATCH bluez] wiimote: add Wii-Remote-Plus ID and name detection

Apologies, the testing as a whole is not yet complete as I have some
issues still. However, the bluez portion of the fixes David was making
so seem to work properly. Before the patch I would have to use blueman
to force a connection without a paring code, after the patch the
bluetooth recognizes the device automatically and prompts for
accepting the connection. My remaining issues lie with getting some
userspace tools to recognize the wiimote, not with the bluez.

Peter

On Wed, Nov 28, 2012 at 5:00 AM, David Herrmann
<[email protected]> wrote:
> Hi Johan
>
> On Wed, Nov 28, 2012 at 1:50 PM, Johan Hedberg <[email protected]> wrote:
>> Hi David,
>>
>> On Mon, Oct 22, 2012, David Herrmann wrote:
>>> The Nintendo Wii Remote Plus uses a new product ID and name. To detect
>>> them properly, we need to add them to the wiimote-module.
>>>
>>> To avoid an overlong "if" statement, this converts the match-function to
>>> walk over an array and check all VID/PID pairs and device-names. This
>>> makes adding new devices much easier.
>>> ---
>>> Hi Johan
>>>
>>> I am actually not sure why Nintendo changed the VID/PID for the new revisions of
>>> the WiimotePlus. I have a WiimotePlus which still uses the old numbers and works
>>> here quite well. However, I have now got multiple requests from people with the
>>> new device name and IDs. Unfortunately, I cannot test these so I'd like to have
>>> a "Tested-by" by Peter (CC'ed) before this is applied.
>>>
>>> Thanks
>>> David
>>>
>>> plugins/wiimote.c | 35 ++++++++++++++++++++++++++++-------
>>> 1 file changed, 28 insertions(+), 7 deletions(-)
>>
>> Well, the Tested-by never came, but since the patch looks ok to me I
>> went ahead and applied it anyway (with a minor fix to use G_N_ELEMENTS()
>> instead of your custom array length calculation).
>
> Sorry for the long delay. But I don't have the device so it sometimes
> takes a bit longer. Anyway, it doesn't do any harm if we apply it so
> yes, thanks for not forgetting about it.
>
> Cheers
> David

2012-11-28 13:00:24

by David Herrmann

[permalink] [raw]
Subject: Re: [PATCH bluez] wiimote: add Wii-Remote-Plus ID and name detection

Hi Johan

On Wed, Nov 28, 2012 at 1:50 PM, Johan Hedberg <[email protected]> wrote:
> Hi David,
>
> On Mon, Oct 22, 2012, David Herrmann wrote:
>> The Nintendo Wii Remote Plus uses a new product ID and name. To detect
>> them properly, we need to add them to the wiimote-module.
>>
>> To avoid an overlong "if" statement, this converts the match-function to
>> walk over an array and check all VID/PID pairs and device-names. This
>> makes adding new devices much easier.
>> ---
>> Hi Johan
>>
>> I am actually not sure why Nintendo changed the VID/PID for the new revisions of
>> the WiimotePlus. I have a WiimotePlus which still uses the old numbers and works
>> here quite well. However, I have now got multiple requests from people with the
>> new device name and IDs. Unfortunately, I cannot test these so I'd like to have
>> a "Tested-by" by Peter (CC'ed) before this is applied.
>>
>> Thanks
>> David
>>
>> plugins/wiimote.c | 35 ++++++++++++++++++++++++++++-------
>> 1 file changed, 28 insertions(+), 7 deletions(-)
>
> Well, the Tested-by never came, but since the patch looks ok to me I
> went ahead and applied it anyway (with a minor fix to use G_N_ELEMENTS()
> instead of your custom array length calculation).

Sorry for the long delay. But I don't have the device so it sometimes
takes a bit longer. Anyway, it doesn't do any harm if we apply it so
yes, thanks for not forgetting about it.

Cheers
David

2012-11-28 12:50:41

by Johan Hedberg

[permalink] [raw]
Subject: Re: [PATCH bluez] wiimote: add Wii-Remote-Plus ID and name detection

Hi David,

On Mon, Oct 22, 2012, David Herrmann wrote:
> The Nintendo Wii Remote Plus uses a new product ID and name. To detect
> them properly, we need to add them to the wiimote-module.
>
> To avoid an overlong "if" statement, this converts the match-function to
> walk over an array and check all VID/PID pairs and device-names. This
> makes adding new devices much easier.
> ---
> Hi Johan
>
> I am actually not sure why Nintendo changed the VID/PID for the new revisions of
> the WiimotePlus. I have a WiimotePlus which still uses the old numbers and works
> here quite well. However, I have now got multiple requests from people with the
> new device name and IDs. Unfortunately, I cannot test these so I'd like to have
> a "Tested-by" by Peter (CC'ed) before this is applied.
>
> Thanks
> David
>
> plugins/wiimote.c | 35 ++++++++++++++++++++++++++++-------
> 1 file changed, 28 insertions(+), 7 deletions(-)

Well, the Tested-by never came, but since the patch looks ok to me I
went ahead and applied it anyway (with a minor fix to use G_N_ELEMENTS()
instead of your custom array length calculation).

Johan