linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Szymon Janc <szymon.janc@codecoup.pl>
To: linux-bluetooth@vger.kernel.org
Subject: Re: [PATCH] sixaxis: Fix Bluetooth PS3 clone joypad being named like the original
Date: Mon, 22 Feb 2021 09:27:16 +0100	[thread overview]
Message-ID: <2568708.mvXUDI8C0e@ix> (raw)
In-Reply-To: <20210218190545.109454-1-szymon.janc@codecoup.pl>

On Thursday, 18 February 2021 20:05:45 CET Szymon Janc wrote:
> When cable pairing a PS3 clone device, we should try and keep the USB device
> name to create a new btd_device so that the joypad is named after its USB
> name when connecting through Bluetooth.
> 
> If that isn't done, "Shanwan" clone joypads are named like the genuine
> joypads, and kernel Bluetooth quirks aren't applied.
> 
> gh-issue: https://github.com/bluez/bluez/issues/46
> ---
>  plugins/sixaxis.c        |  5 ++++-
>  profiles/input/server.c  |  2 +-
>  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[] = {
>  		{
> @@ -40,6 +40,14 @@ get_pairing(uint16_t vid, uint16_t pid)
>  			.version = 0x0000,
>  			.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,
> @@ -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];
>  	}

Applied.

-- 
pozdrawiam
Szymon Janc



      reply	other threads:[~2021-02-22  8:28 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-18 19:05 [PATCH] sixaxis: Fix Bluetooth PS3 clone joypad being named like the original Szymon Janc
2021-02-22  8:27 ` Szymon Janc [this message]

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=2568708.mvXUDI8C0e@ix \
    --to=szymon.janc@codecoup.pl \
    --cc=linux-bluetooth@vger.kernel.org \
    /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).