On Wed, Jan 25, 2012 at 1:57 PM, Jason Gerecke <[email protected]> wrote:
> This covers most of the suggested changes. I'm not sure yet how we
> want to expose the properties through X, so changes regarding that
> haven't been folded in.
>
> Jason
>
> ---
> Day xee-nee-svsh duu-'ushtlh-ts'it;
> nuu-wee-ya' duu-xan' 'vm-nvshtlh-ts'it.
> Huu-chan xuu naa~-gha.
>
>
>
> On Wed, Jan 25, 2012 at 1:54 PM, Jason Gerecke <[email protected]> wrote:
>> Signed-off-by: Jason Gerecke <[email protected]>
>> ---
>> Changes from v2:
>>    Deduplicate storing in sysfs
>>    Deduplicate fd closing
>>    Deduplicate LED setting by looping through all groups
>>    Change wording of xsetwacom property description
>>    Consolidate led{0,1}_status variables into led_status array
>>    Stop udev device leak
>>    Change variables fd_sysfs{0,1} to an array fd_sysfs[2]
>>    Remove superflous function name
>>
>>  include/wacom-properties.h |    3 ++
>>  man/xsetwacom.man          |    7 +++++
>>  src/wcmCommon.c            |    4 ++-
>>  src/wcmConfig.c            |   55 
>> +++++++++++++++++++++++++++++++++++++++++++-
>>  src/wcmXCommand.c          |   32 ++++++++++++++++++++++++-
>>  src/xf86Wacom.c            |    9 ++++++-
>>  src/xf86WacomDefs.h        |    4 ++-
>>  tools/xsetwacom.c          |   18 +++++++++++++-
>>  8 files changed, 126 insertions(+), 6 deletions(-)
>>
>> diff --git a/include/wacom-properties.h b/include/wacom-properties.h
>> index 0bb84b1..b2a3523 100644
>> --- a/include/wacom-properties.h
>> +++ b/include/wacom-properties.h
>> @@ -46,6 +46,9 @@
>>   */
>>  #define WACOM_PROP_STRIPBUTTONS "Wacom Strip Buttons"
>>
>> +/* 8 bit, 2 values, LED0 (right side) and LED1 (left side) */
>> +#define WACOM_PROP_LED "Wacom LEDs"
>> +
>>  /* 8 bit, 6 values, rel wheel up, rel wheel down, abs wheel up, abs wheel 
>> down, abs wheel 2 up, abs wheel 2 down
>>    OR
>>    Atom, 6 values , rel wheel up, rel wheel down, abs wheel up, abs wheel 
>> down, abs wheel 2 up, abs wheel 2 down
>> diff --git a/man/xsetwacom.man b/man/xsetwacom.man
>> index dc0995f..58a4427 100644
>> --- a/man/xsetwacom.man
>> +++ b/man/xsetwacom.man
>> @@ -201,6 +201,13 @@ sets the max distance from tablet to stop reporting 
>> movement for cursor in
>>  relative mode. Default for Intuos series is 10, for Graphire series 
>> (including
>>  Volitos) is 42. Only available for the cursor/puck device.
>>  .TP
>> +\fBLED0\fR status
>> +Selects which LED in the first bank of LEDs should be lit. Intuos4/Cintiq 
>> 21UX/Cintiq 24HD. Default:  0,
>> +range of 0 to 3.
>> +.TP
>> +\fBLED1\fR status
>> +Selects which LED in the second bank of LEDs should be lit. Cintiq 
>> 21UX/24HD. Default:  0, range of 0 to 3.
>> +.TP
>>  \fBThreshold\fR level
>>  Set the minimum pressure necessary to generate a Button event for the stylus
>>  tip, eraser, or touch.  The pressure levels of all tablets are normalized to
>> diff --git a/src/wcmCommon.c b/src/wcmCommon.c
>> index 0f041e3..a337441 100644
>> --- a/src/wcmCommon.c
>> +++ b/src/wcmCommon.c
>> @@ -1,6 +1,6 @@
>>  /*
>>  * Copyright 1995-2002 by Frederic Lepied, France. <[email protected]>
>> - * Copyright 2002-2010 by Ping Cheng, Wacom. <[email protected]>
>> + * Copyright 2002-2012 by Ping Cheng, Wacom. <[email protected]>
>>  *
>>  * This program is free software; you can redistribute it and/or
>>  * modify it under the terms of the GNU General Public License
>> @@ -1472,6 +1472,8 @@ WacomCommonPtr wcmNewCommon(void)
>>        common->wcmMaxStripY = 4096;       /* Max fingerstrip Y */
>>        common->wcmMaxtiltX = 128;         /* Max tilt in X directory */
>>        common->wcmMaxtiltY = 128;         /* Max tilt in Y directory */
>> +       common->fd_sysfs[0] = -1;          /* file descriptor to sysfs led0 
>> */
>> +       common->fd_sysfs[1] = -1;          /* file descriptor to sysfs led1 
>> */
>>        common->wcmCursorProxoutDistDefault = PROXOUT_INTUOS_DISTANCE;
>>                        /* default to Intuos */
>>        common->wcmSuppress = DEFAULT_SUPPRESS;
>> diff --git a/src/wcmConfig.c b/src/wcmConfig.c
>> index 5920e11..1dd9d03 100644
>> --- a/src/wcmConfig.c
>> +++ b/src/wcmConfig.c
>> @@ -1,6 +1,6 @@
>>  /*
>>  * Copyright 1995-2002 by Frederic Lepied, France. <[email protected]>
>> - * Copyright 2002-2010 by Ping Cheng, Wacom. <[email protected]>
>> + * Copyright 2002-2012 by Ping Cheng, Wacom. <[email protected]>
>>  *
>>  * This program is free software; you can redistribute it and/or
>>  * modify it under the terms of the GNU General Public License
>> @@ -21,6 +21,7 @@
>>  #include <config.h>
>>  #endif
>>
>> +#include <libudev.h>
>>  #include "xf86Wacom.h"
>>  #include "wcmFilter.h"
>>  #include <sys/stat.h>
>> @@ -441,6 +442,53 @@ static int wcmIsHotpluggedDevice(InputInfoPtr pInfo)
>>        return !strcmp(source, "_driver/wacom");
>>  }
>>
>> +static void wcmStoreLEDsysfsInfo(InputInfoPtr pInfo)
>> +{
>> +       WacomDevicePtr  priv = (WacomDevicePtr)pInfo->private;
>> +       WacomCommonPtr  common = priv->common;
>> +       struct stat st;
>> +       struct udev *udev = udev_new();
>> +       struct udev_device *parent;
>> +       struct udev_device *device;
>> +       char fs_path[128], buf[10];
>> +       int err = -1;
>> +       int i;
>> +
>> +       stat(common->device_path, &st);
>> +       device = udev_device_new_from_devnum(udev, 'c', st.st_rdev);
>> +       if (!device)
>> +               return;
>> +
>> +       parent = udev_device_get_parent_with_subsystem_devtype(device,
>> +                "usb", NULL);
>> +
>> +       if (!parent)
>> +               goto out;
>> +
>> +       for (i = 0; i < ARRAY_SIZE(common->led_status); i++)
>> +       {
>> +               sprintf(fs_path, "%s/wacom_led/status_led%d_select",
>> +                       udev_device_get_syspath(parent), i);
>> +               common->fd_sysfs[i] = open(fs_path, O_RDWR);
>> +               if (common->fd_sysfs[i] >= 0)
>> +               {
>> +                       SYSCALL(err = read(common->fd_sysfs[i], buf, 1));
>> +                       if (err < -1)
>> +                       {
>> +                               xf86Msg(X_WARNING, "%s: failed to get led%d 
>> status\n", pInfo->name, i);
>> +                       }
>> +                       else
>> +                               common->led_status[i] = buf[0] - '0';
>> +               }
>> +               else
>> +                       DBG(2, common, "No LED%d sysfs on %s for %s\n",
>> +                                               i, fs_path, pInfo->name);
>> +       }
>> +
>> +out:
>> +       free(device);
>> +}
>> +
>>  /* wcmPreInit - called for each input devices with the driver set to
>>  * "wacom" */
>>  #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 12
>> @@ -524,9 +572,14 @@ static int wcmPreInit(InputDriverPtr drv, InputInfoPtr 
>> pInfo, int flags)
>>
>>        /* check if this is the first tool on the port */
>>        if (!wcmMatchDevice(pInfo, &common))
>> +       {
>>                /* initialize supported keys with the first tool on the port 
>> */
>>                wcmDeviceTypeKeys(pInfo);
>>
>> +               /* store lED sysfs file descriptor and initial status */
>> +               wcmStoreLEDsysfsInfo(pInfo);
>> +       }
>> +
>>        common->debugLevel = xf86SetIntOption(pInfo->options,
>>                                              "CommonDBG", 
>> common->debugLevel);
>>        oldname = pInfo->name;
>> diff --git a/src/wcmXCommand.c b/src/wcmXCommand.c
>> index 40393dc..1c649df 100644
>> --- a/src/wcmXCommand.c
>> +++ b/src/wcmXCommand.c
>> @@ -1,5 +1,5 @@
>>  /*
>> - * Copyright 2007-2010 by Ping Cheng, Wacom. <[email protected]>
>> + * Copyright 2007-2012 by Ping Cheng, Wacom. <[email protected]>
>>  *
>>  * This program is free software; you can redistribute it and/or
>>  * modify it under the terms of the GNU General Public License
>> @@ -91,6 +91,7 @@ Atom prop_tv_resolutions;
>>  Atom prop_cursorprox;
>>  Atom prop_threshold;
>>  Atom prop_suppress;
>> +Atom prop_led;
>>  Atom prop_touch;
>>  Atom prop_gesture;
>>  Atom prop_gesture_param;
>> @@ -206,6 +207,10 @@ void InitWcmDeviceProperties(InputInfoPtr pInfo)
>>        values[1] = common->wcmRawSample;
>>        prop_suppress = InitWcmAtom(pInfo->dev, WACOM_PROP_SAMPLE, 
>> XA_INTEGER, 32, 2, values);
>>
>> +       values[0] = common->led_status[0];
>> +       values[1] = common->led_status[1];
>> +       prop_led = InitWcmAtom(pInfo->dev, WACOM_PROP_LED, XA_INTEGER, 8, 2, 
>> values);
>> +
>>        values[0] = common->wcmTouch;
>>        prop_touch = InitWcmAtom(pInfo->dev, WACOM_PROP_TOUCH, XA_INTEGER, 8, 
>> 1, values);
>>
>> @@ -695,6 +700,31 @@ int wcmSetProperty(DeviceIntPtr dev, Atom property, 
>> XIPropertyValuePtr prop,
>>                        common->wcmSuppress = values[0];
>>                        common->wcmRawSample = values[1];
>>                }
>> +       } else if (property == prop_led)
>> +       {
>> +               CARD8 *values;
>> +               int i;
>> +
>> +               if (prop->size != 2 || prop->format != 8)
>> +                       return BadValue;
>> +
>> +               values = (CARD8*)prop->data;
>> +
>> +               for (i = 0; i < prop->size; i++)
>> +               {
>> +                       if (values[i] < 0 || values[i] > 3)
>> +                               return BadValue;
>> +
>> +                       if (common->fd_sysfs[i] >= 0 && !checkonly)
>> +                       {
>> +                               char buf[10];
>> +                               int err = -1;
>> +                               sprintf(buf, "%d", values[i]);
>> +                               err = xf86WriteSerial(common->fd_sysfs[i], 
>> buf, strlen(buf));
>> +                               if (err == strlen(buf))
>> +                                       common->led_status[i] = values[i];
>> +                       }
>> +               }
>>        } else if (property == prop_rotation)
>>        {
>>                CARD8 value;
>> diff --git a/src/xf86Wacom.c b/src/xf86Wacom.c
>> index d1c149f..5be7363 100644
>> --- a/src/xf86Wacom.c
>> +++ b/src/xf86Wacom.c
>> @@ -1,6 +1,6 @@
>>  /*
>>  * Copyright 1995-2002 by Frederic Lepied, France. <[email protected]>
>> - * Copyright 2002-2010 by Ping Cheng, Wacom. <[email protected]>
>> + * Copyright 2002-2012 by Ping Cheng, Wacom. <[email protected]>
>>  *
>>  * This program is free software; you can redistribute it and/or
>>  * modify it under the terms of the GNU General Public License
>> @@ -758,6 +758,7 @@ static void wcmDevClose(InputInfoPtr pInfo)
>>  {
>>        WacomDevicePtr priv = (WacomDevicePtr)pInfo->private;
>>        WacomCommonPtr common = priv->common;
>> +       int i;
>>
>>        DBG(4, priv, "Wacom number of open devices = %d\n", common->fd_refs);
>>
>> @@ -770,6 +771,12 @@ static void wcmDevClose(InputInfoPtr pInfo)
>>                        xf86CloseSerial (common->fd);
>>                }
>>        }
>> +
>> +       for (i = 0; i < ARRAY_SIZE(common->fd_sysfs); i++)
>> +       {
>> +               xf86CloseSerial(common->fd_sysfs[i]);
>> +               common->fd_sysfs[i] = -1;
>> +       }
>>  }
>>
>>  static void wcmEnableDisableTool(DeviceIntPtr dev, Bool enable)
>> diff --git a/src/xf86WacomDefs.h b/src/xf86WacomDefs.h
>> index 2f3f7b4..eb39c4f 100644
>> --- a/src/xf86WacomDefs.h
>> +++ b/src/xf86WacomDefs.h
>> @@ -1,6 +1,6 @@
>>  /*
>>  * Copyright 1995-2002 by Frederic Lepied, France. <[email protected]>
>> - * Copyright 2002-2010 by Ping Cheng, Wacom. <[email protected]>
>> + * Copyright 2002-2012 by Ping Cheng, Wacom. <[email protected]>
>>  *
>>  * This program is free software; you can redistribute it and/or
>>  * modify it under the terms of the GNU General Public License
>> @@ -420,6 +420,8 @@ struct _WacomCommonRec
>>        int tablet_type;             /* bitmask of tablet features (WCM_LCD, 
>> WCM_PEN, etc) */
>>        int fd;                      /* file descriptor to tablet */
>>        int fd_refs;                 /* number of references to fd; if =0, fd 
>> is invalid */
>> +       int fd_sysfs[2];             /* file descriptor to sysfs led0 and 
>> led1 */
>> +       unsigned char led_status[2]; /* Left and Right LED status */
>>        unsigned long wcmKeys[NBITS(KEY_MAX)]; /* supported tool types for 
>> the device */
>>        WacomDevicePtr wcmTouchDevice; /* The pointer for pen to access the
>>                                          touch tool of the same device id */
>> diff --git a/tools/xsetwacom.c b/tools/xsetwacom.c
>> index 9ab285b..83fb610 100644
>> --- a/tools/xsetwacom.c
>> +++ b/tools/xsetwacom.c
>> @@ -361,6 +361,22 @@ static param_t parameters[] =
>>                .get_func = get_map,
>>        },
>>        {
>> +               .name = "LED0",
>> +               .desc = "Selects which LED in the first bank of LEDs should 
>> be lit. ",
>> +               .prop_name = WACOM_PROP_LED,
>> +               .prop_format = 8,
>> +               .prop_offset = 0,
>> +               .arg_count = 1,
>> +       },
>> +       {
>> +               .name = "LED1",
>> +               .desc = "Selects which LED in the second bank of LEDs should 
>> be lit. ",
>> +               .prop_name = WACOM_PROP_LED,
>> +               .prop_format = 8,
>> +               .prop_offset = 1,
>> +               .arg_count = 1,
>> +       },
>> +       {
>>                .name = "Threshold",
>>                .desc = "Sets tip/eraser pressure threshold "
>>                "(default is 27). ",
>> @@ -2689,7 +2705,7 @@ static void test_parameter_number(void)
>>         * deprecated them.
>>         * Numbers include trailing NULL entry.
>>         */
>> -       assert(ARRAY_SIZE(parameters) == 36);
>> +       assert(ARRAY_SIZE(parameters) == 38);
>>        assert(ARRAY_SIZE(deprecated_parameters) == 17);
>>  }
>>
>> --
>> 1.7.7.3
>>

Any feedback on the changes or ideas on exposing the properties?

Jason

---
Day xee-nee-svsh duu-'ushtlh-ts'it;
nuu-wee-ya' duu-xan' 'vm-nvshtlh-ts'it.
Huu-chan xuu naa~-gha.

------------------------------------------------------------------------------
Keep Your Developer Skills Current with LearnDevNow!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-d2d
_______________________________________________
Linuxwacom-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to