All of lore.kernel.org
 help / color / mirror / Atom feed
From: Florian Echtler <floe@butterbrot.org>
To: David Herrmann <dh.herrmann@googlemail.com>
Cc: linux-input@vger.kernel.org, Jiri Kosina <jkosina@suse.cz>
Subject: Re: [PATCH 1/2] HID: wiimote: Add Nintendo Balance-Board support
Date: Mon, 17 Sep 2012 17:05:30 +0200	[thread overview]
Message-ID: <50573C3A.4000209@butterbrot.org> (raw)
In-Reply-To: <1347877896-23939-1-git-send-email-dh.herrmann@googlemail.com>

Tested-by: Florian Echtler <floe@butterbrot.org>

On 17.09.2012 12:31, David Herrmann wrote:
> The Nintendo Balance-Board is a controller which behaves exactly like the
> Wii Remote but reports all its data through a special extension device.
> Hence, we can simply add the Balance-Board as extension device and we get
> full support for it.
>
> Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
> ---
> Hi Jiri
>
> This has been tested by Florian Echtler (see CC) and user-space BlueZ patches to
> support Balance-Board connections are already sent upstream.
>
> Maybe Florian can provide a "Tested-by: Florian Echtler <floe@butterbrot.org>"
> line.
>
> Thanks!
> David
>
>   drivers/hid/hid-wiimote-ext.c | 59 +++++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 59 insertions(+)
>
> diff --git a/drivers/hid/hid-wiimote-ext.c b/drivers/hid/hid-wiimote-ext.c
> index 0a1805c..ae022b8 100644
> --- a/drivers/hid/hid-wiimote-ext.c
> +++ b/drivers/hid/hid-wiimote-ext.c
> @@ -34,6 +34,7 @@ enum wiiext_type {
>   	WIIEXT_NONE,		/* placeholder */
>   	WIIEXT_CLASSIC,		/* Nintendo classic controller */
>   	WIIEXT_NUNCHUCK,	/* Nintendo nunchuck controller */
> +	WIIEXT_BALANCE_BOARD,	/* Nintendo balance board controller */
>   };
>
>   enum wiiext_keys {
> @@ -151,6 +152,8 @@ static __u8 ext_read(struct wiimote_ext *ext)
>   			type = WIIEXT_NUNCHUCK;
>   		else if (rmem[0] == 0x01 && rmem[1] == 0x01)
>   			type = WIIEXT_CLASSIC;
> +		else if (rmem[0] == 0x04 && rmem[1] == 0x02)
> +			type = WIIEXT_BALANCE_BOARD;
>   	}
>
>   	wiimote_cmd_release(ext->wdata);
> @@ -509,6 +512,55 @@ static void handler_classic(struct wiimote_ext *ext, const __u8 *payload)
>   	input_sync(ext->input);
>   }
>
> +static void handler_balance_board(struct wiimote_ext *ext, const __u8 *payload)
> +{
> +	__s32 val[4];
> +
> +	/*   Byte |  8  7  6  5  4  3  2  1  |
> +	 *   -----+--------------------------+
> +	 *    1   |    Top Right <15:8>      |
> +	 *    2   |    Top Right  <7:0>      |
> +	 *   -----+--------------------------+
> +	 *    3   | Bottom Right <15:8>      |
> +	 *    4   | Bottom Right  <7:0>      |
> +	 *   -----+--------------------------+
> +	 *    5   |     Top Left <15:8>      |
> +	 *    6   |     Top Left  <7:0>      |
> +	 *   -----+--------------------------+
> +	 *    7   |  Bottom Left <15:8>      |
> +	 *    8   |  Bottom Left  <7:0>      |
> +	 *   -----+--------------------------+
> +	 *
> +	 * These values represent the weight-measurements of the Wii-balance
> +	 * board with 16bit precision.
> +	 *
> +	 * The balance-board is never reported interleaved with motionp.
> +	 */
> +
> +	val[0] = payload[0];
> +	val[0] <<= 8;
> +	val[0] |= payload[1];
> +
> +	val[1] = payload[2];
> +	val[1] <<= 8;
> +	val[1] |= payload[3];
> +
> +	val[2] = payload[4];
> +	val[2] <<= 8;
> +	val[2] |= payload[5];
> +
> +	val[3] = payload[6];
> +	val[3] <<= 8;
> +	val[3] |= payload[7];
> +
> +	input_report_abs(ext->input, ABS_HAT0X, val[0]);
> +	input_report_abs(ext->input, ABS_HAT0Y, val[1]);
> +	input_report_abs(ext->input, ABS_HAT1X, val[2]);
> +	input_report_abs(ext->input, ABS_HAT1Y, val[3]);
> +
> +	input_sync(ext->input);
> +}
> +
>   /* call this with state.lock spinlock held */
>   void wiiext_handle(struct wiimote_data *wdata, const __u8 *payload)
>   {
> @@ -523,6 +575,8 @@ void wiiext_handle(struct wiimote_data *wdata, const __u8 *payload)
>   		handler_nunchuck(ext, payload);
>   	} else if (ext->ext_type == WIIEXT_CLASSIC) {
>   		handler_classic(ext, payload);
> +	} else if (ext->ext_type == WIIEXT_BALANCE_BOARD) {
> +		handler_balance_board(ext, payload);
>   	}
>   }
>
> @@ -551,6 +605,11 @@ static ssize_t wiiext_show(struct device *dev, struct device_attribute *attr,
>   			return sprintf(buf, "motionp+classic\n");
>   		else
>   			return sprintf(buf, "classic\n");
> +	} else if (type == WIIEXT_BALANCE_BOARD) {
> +		if (motionp)
> +			return sprintf(buf, "motionp+balanceboard\n");
> +		else
> +			return sprintf(buf, "balanceboard\n");
>   	} else {
>   		if (motionp)
>   			return sprintf(buf, "motionp\n");
>


-- 
SENT FROM MY PDP-11

  parent reply	other threads:[~2012-09-17 15:12 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-17 10:31 [PATCH 1/2] HID: wiimote: Add Nintendo Balance-Board support David Herrmann
2012-09-17 10:31 ` [PATCH 2/2] HID: wiimote: Parse calibration data of balance boards David Herrmann
2012-09-17 15:04   ` Florian Echtler
2012-09-17 15:23     ` Jiri Kosina
2012-09-17 15:21   ` Florian Echtler
2012-09-17 15:26     ` Jiri Kosina
2012-09-17 15:05 ` Florian Echtler [this message]
2012-09-17 15:22   ` [PATCH 1/2] HID: wiimote: Add Nintendo Balance-Board support Jiri Kosina

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=50573C3A.4000209@butterbrot.org \
    --to=floe@butterbrot.org \
    --cc=dh.herrmann@googlemail.com \
    --cc=jkosina@suse.cz \
    --cc=linux-input@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.