mirror of
https://git.kernel.org/pub/scm/bluetooth/bluez.git
synced 2024-11-26 05:34:23 +08:00
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.
This commit is contained in:
parent
b823e9e960
commit
e9fc6bf4a3
@ -2,7 +2,7 @@
|
||||
*
|
||||
* BlueZ - Bluetooth protocol stack for Linux
|
||||
*
|
||||
* Copyright (C) 2011 David Herrmann <dh.herrmann@googlemail.com>
|
||||
* Copyright (C) 2011-2012 David Herrmann <dh.herrmann@googlemail.com>
|
||||
*
|
||||
*
|
||||
* 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;
|
||||
|
||||
ba2str(device_get_address(device), addr);
|
||||
|
||||
@ -72,15 +84,22 @@ 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;
|
||||
for (i = 0; i < G_N_ELEMENTS(wii_ids); ++i) {
|
||||
if (vendor == wii_ids[i][0] && product == wii_ids[i][1])
|
||||
goto found;
|
||||
}
|
||||
|
||||
for (i = 0; i < G_N_ELEMENTS(wii_names); ++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)
|
||||
|
Loading…
Reference in New Issue
Block a user