On Fri, Dec 14, 2012 at 12:16:41PM +0100, Olivier Fourdan wrote:
> >From 5fe5a58ad6eada45471e670625b60cd10b52b0be Mon Sep 17 00:00:00 2001
> From: Olivier Fourdan <[email protected]>
> Date: Fri, 14 Dec 2012 12:08:09 +0100
> Subject: [PATCH] test: check number of switches against number of modes
>
> Most tablets have one mode-switch button and multiple
> modes, but some like the Cintiq 24HD have dedicated mode-
> switch buttons.
>
> In this case, the number of modes must match the number of
> switches otherwise client applications have no way to tell
> if a button is used as a mode-switch button to cycle through
> all the modes or a mode-switch button to select a given mode.
>
> Add this in the tablet-validity check, ie make sure that
> if we have more than one mode-switch button, then the
> number of modes matches the number of mode-switch buttons.
>
> Also checks that if more than one mode is declared, at least
> one mode-switch button is found.
>
> Signed-off-by: Olivier Fourdan <[email protected]>
merged, thanks. sorry missed it before the 0.7 release, so it didn't make
it.
Cheers,
Peter
> ---
> test/tablet-validity.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 46 insertions(+), 0 deletions(-)
>
> diff --git a/test/tablet-validity.c b/test/tablet-validity.c
> index 75fe265..19a4b98 100644
> --- a/test/tablet-validity.c
> +++ b/test/tablet-validity.c
> @@ -40,6 +40,8 @@
> #include <assert.h>
> #include <unistd.h>
>
> +typedef int (*NumModesFn) (const WacomDevice *device);
> +
> static int buttons_have_direction (WacomDevice *device)
> {
> char button;
> @@ -59,6 +61,42 @@ static int buttons_have_direction (WacomDevice *device)
> return 0;
> }
>
> +static int match_mode_switch (WacomDevice *device, NumModesFn get_num_modes,
> WacomButtonFlags flag)
> +{
> + char button;
> + int num_buttons;
> + int num_switches;
> + int num_modes;
> +
> + num_buttons = libwacom_get_num_buttons (device);
> + num_modes = get_num_modes (device);
> + num_switches = 0;
> +
> + for (button = 'A'; button < 'A' + num_buttons; button++) {
> + WacomButtonFlags flags;
> + flags = libwacom_get_button_flag(device, button);
> +
> + if (flags & flag)
> + num_switches++;
> + }
> +
> + /*
> + * If we have more than one mode-switch button, then the
> + * number of modes must match the number of mode-switch buttons.
> + */
> + if (num_switches > 1 && num_modes != num_switches)
> + return 0;
> +
> + /*
> + * If we have more than one mode, then we should find at least
> + * one mode-switch button.
> + */
> + if (num_modes > 1 && num_switches == 0)
> + return 0;
> +
> + return 1;
> +}
> +
> static int eraser_is_present(WacomDeviceDatabase *db, const int *styli, int
> nstyli, WacomStylusType type)
> {
> int i;
> @@ -146,6 +184,14 @@ static void verify_tablet(WacomDeviceDatabase *db,
> WacomDevice *device)
> assert(libwacom_get_strips_num_modes(device) >= 0);
> assert(libwacom_get_bustype(device) != WBUSTYPE_UNKNOWN);
> assert(buttons_have_direction(device) > 0);
> + if (libwacom_has_ring(device))
> + assert(match_mode_switch (device, libwacom_get_ring_num_modes,
> WACOM_BUTTON_RING_MODESWITCH));
> + if (libwacom_has_ring2(device))
> + assert(match_mode_switch (device, libwacom_get_ring2_num_modes,
> WACOM_BUTTON_RING2_MODESWITCH));
> + if (libwacom_get_num_strips(device) > 1)
> + assert(match_mode_switch (device,
> libwacom_get_strips_num_modes, WACOM_BUTTON_TOUCHSTRIP2_MODESWITCH));
> + if (libwacom_get_num_strips(device) > 0)
> + assert(match_mode_switch (device,
> libwacom_get_strips_num_modes, WACOM_BUTTON_TOUCHSTRIP_MODESWITCH));
> }
>
> int main(int argc, char **argv)
> --
> 1.7.1
>
> ------------------------------------------------------------------------------
> LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
> Remotely access PCs and mobile devices and provide instant support
> Improve your efficiency, and focus on delivering more value-add services
> Discover what IT Professionals Know. Rescue delivers
> http://p.sf.net/sfu/logmein_12329d2d
> _______________________________________________
> Linuxwacom-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel
------------------------------------------------------------------------------
LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
Remotely access PCs and mobile devices and provide instant support
Improve your efficiency, and focus on delivering more value-add services
Discover what IT Professionals Know. Rescue delivers
http://p.sf.net/sfu/logmein_12329d2d
_______________________________________________
Linuxwacom-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel