diff options
-rw-r--r-- | plugins/sixaxis.c | 5 | ||||
-rw-r--r-- | profiles/input/server.c | 2 | ||||
-rw-r--r-- | profiles/input/sixaxis.h | 13 |
3 files changed, 17 insertions, 3 deletions
diff --git a/plugins/sixaxis.c b/plugins/sixaxis.c index d693a86c0..517cecc47 100644 --- a/plugins/sixaxis.c +++ b/plugins/sixaxis.c @@ -387,6 +387,7 @@ get_pairing_type_for_device(struct udev_device *udevice, uint16_t *bus, char **sysfs_path) { struct udev_device *hid_parent; + const char *hid_name; const char *hid_id; const struct cable_pairing *cp; uint16_t vid, pid; @@ -401,7 +402,9 @@ get_pairing_type_for_device(struct udev_device *udevice, uint16_t *bus, if (!hid_id || sscanf(hid_id, "%hx:%hx:%hx", bus, &vid, &pid) != 3) return NULL; - cp = get_pairing(vid, pid); + hid_name = udev_device_get_property_value(hid_parent, "HID_NAME"); + + cp = get_pairing(vid, pid, hid_name); *sysfs_path = g_strdup(udev_device_get_syspath(udevice)); return cp; diff --git a/profiles/input/server.c b/profiles/input/server.c index d8b413744..79cf08a66 100644 --- a/profiles/input/server.c +++ b/profiles/input/server.c @@ -120,7 +120,7 @@ static bool dev_is_sixaxis(const bdaddr_t *src, const bdaddr_t *dst) vid = btd_device_get_vendor(device); pid = btd_device_get_product(device); - cp = get_pairing(vid, pid); + cp = get_pairing(vid, pid, NULL); if (cp && (cp->type == CABLE_PAIRING_SIXAXIS || cp->type == CABLE_PAIRING_DS4)) return true; diff --git a/profiles/input/sixaxis.h b/profiles/input/sixaxis.h index a3cda70e4..ab8831995 100644 --- a/profiles/input/sixaxis.h +++ b/profiles/input/sixaxis.h @@ -29,7 +29,7 @@ struct cable_pairing { }; static inline const struct cable_pairing * -get_pairing(uint16_t vid, uint16_t pid) +get_pairing(uint16_t vid, uint16_t pid, const char *name) { static const struct cable_pairing devices[] = { { @@ -41,6 +41,14 @@ get_pairing(uint16_t vid, uint16_t pid) .type = CABLE_PAIRING_SIXAXIS, }, { + .name = "SHANWAN PS3 GamePad", + .source = 0x0002, + .vid = 0x054c, + .pid = 0x0268, + .version = 0x0000, + .type = CABLE_PAIRING_SIXAXIS, + }, + { .name = "Navigation Controller", .source = 0x0002, .vid = 0x054c, @@ -73,6 +81,9 @@ get_pairing(uint16_t vid, uint16_t pid) if (devices[i].pid != pid) continue; + if (name && strcmp(name, devices[i].name)) + continue; + return &devices[i]; } |