From ccc0a0cba8a2fdb8cfb148276e7c9413a3e22dc8 Mon Sep 17 00:00:00 2001 From: MilhouseVH Date: Thu, 19 Sep 2019 22:48:19 +0100 Subject: [PATCH] sixaxis: Fix PID for Navigation Controller Newsgroups: gmane.linux.bluez.kernel Date: 2015-06-15 18:28:26 GMT (36 weeks, 4 days, 21 hours and 32 minutes ago) Navigation Controller is using PID 0x042f over USB but PID 0x0268 (same as Dualshock 3) over BT. --- plugins/sixaxis.c | 8 +++++++- profiles/input/sixaxis.h | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/plugins/sixaxis.c b/plugins/sixaxis.c index 939fed7..f6baea7 100644 --- a/plugins/sixaxis.c +++ b/plugins/sixaxis.c @@ -364,7 +364,13 @@ static bool setup_device(int fd, const char *sysfs_path, info("sixaxis: setting up new device"); btd_device_device_set_name(device, cp->name); - btd_device_set_pnpid(device, cp->source, cp->vid, cp->pid, cp->version); + + /* if device reports different pid/vid on BT prefer those over USB */ + if (cp->bt_pid) + btd_device_set_pnpid(device, cp->source, cp->vid, cp->bt_pid, cp->version); + else + btd_device_set_pnpid(device, cp->source, cp->vid, cp->pid, cp->version); + btd_device_set_temporary(device, true); closure = g_new0(struct authentication_closure, 1); diff --git a/profiles/input/sixaxis.h b/profiles/input/sixaxis.h index 8e6f3cc..321a918 100644 --- a/profiles/input/sixaxis.h +++ b/profiles/input/sixaxis.h @@ -38,6 +38,7 @@ struct cable_pairing { uint16_t vid; uint16_t pid; uint16_t version; + uint16_t bt_pid; CablePairingType type; }; @@ -59,6 +60,7 @@ get_pairing(uint16_t vid, uint16_t pid) .vid = 0x054c, .pid = 0x042f, .version = 0x0000, + .bt_pid = 0x0268, .type = CABLE_PAIRING_SIXAXIS, }, { -- 2.7.4