Re: [Linuxwacom-devel] [PATCH] hid-wacom: add support to Intuos4 pad buttons and dial
On Thu, Feb 02, 2012 at 09:32:03AM -0600, Chris Bagwell wrote: > Hi Aristeu, > > I'm sure people will be happy to see this patch. I've a question for you > below. > > On Wed, Feb 1, 2012 at 11:23 AM, Aristeu Rozanski wrote: > > This patch adds support for the pad buttons and dial in the bluetooth > > version > > of Intuos4. > > > > Signed-off-by: Aristeu Rozanski > > > > --- > > drivers/hid/hid-wacom.c | 38 ++ > > 1 file changed, 38 insertions(+) > > > > --- linus-2.6.orig/drivers/hid/hid-wacom.c 2012-02-01 > > 11:54:09.0 -0500 > > +++ linus-2.6/drivers/hid/hid-wacom.c 2012-02-01 12:17:46.166583951 -0500 > > @@ -363,6 +363,35 @@ input_report_key(input, BTN_STYLUS2, d > > return; > > } > > > > +static void wacom_i4_parse_pad_report(struct wacom_data *wdata, > > + struct input_dev *input, unsigned char *data) > > +{ > > + input_report_key(input, BTN_0, (data[2] & 0x01)); > > + input_report_key(input, BTN_1, (data[3] & 0x01)); > > + input_report_key(input, BTN_2, (data[3] & 0x02)); > > + input_report_key(input, BTN_3, (data[3] & 0x04)); > > + input_report_key(input, BTN_4, (data[3] & 0x08)); > > + input_report_key(input, BTN_5, (data[3] & 0x10)); > > + input_report_key(input, BTN_6, (data[3] & 0x20)); > > + input_report_key(input, BTN_7, (data[3] & 0x40)); > > + input_report_key(input, BTN_8, (data[3] & 0x80)); > > + > > + if (data[1] & 0x80) > > + input_report_abs(input, ABS_WHEEL, (data[1] & 0x7f)); > > + else > > + /* Out of proximity, clear wheel value. */ > > + input_report_abs(input, ABS_WHEEL, 0); > > + > > + if (data[1] | (data[2] & 0x01) | data[3]) { > > + input_report_key(input, wdata->tool, 1); > > + input_report_key(input, BTN_TOOL_FINGER, 1); > > + } else { > > + input_report_key(input, wdata->tool, 0); > > + input_report_abs(input, BTN_TOOL_FINGER, 0); > > + } > > I'm assuming your sending BTN_TOOL_FINGER because thats what Intuos4 > does in wacom_wac.c kernel driver? yep. > For drivers that want to use Protocol 4 or 5 style events (see > http://sourceforge.net/apps/mediawiki/linuxwacom/index.php?title=Kernel_Input_Event_Overview > ), this does inform xf86-input-wacom to treat these as "PAD events" > so, for example, ABS_WHEEL is treated as a wheel on PAD device and not > a wheel on mouse puck or airbrush. but that's intended. it's a wheel on the side of the tablet: === +-+ === | | === | | === | | w | | w=w | | w | | === | | === | | === | | === +-+ > But Protocol 4and 5 drivers are also required to send a value in > ABS_MISC as described in above link. If not, the serial # is stuck > with fixed value of zero and then the same data structure in > xf86-input-wacom will be used to store all events for all hotplugged > devices. I'm not exactly sure what that would visually result in but > I assume if you leave pen in proximity while you click a tablet button > that the pen would be forced out of proximity when you release the > button. Or maybe jump to location (0,0). > > One option is to update xf86-input-wacom so that driver does not have > to send serial #'s always. Over last year, xf86-input-wacom::wcmUSB.c > has added a function called usbInitToolType() that peeks at all > buffered events to detect tool type. Right now, it only does it to > see which hotplug device type to send events to. We could also change > to decide which data structure/array location (called channel > internally) as well; We could at least do this for the PAD device > which is always force to last channel by convention. > > I do not know if these Bluetooth Intuos4 support mouse pucks. If so, > then we have to become concerned with only 1 tool with overlapping > ABS_WHEEL events are allowed in proximity at the same time. thanks for the explanation, I never fully got the reason for the serial. I'll rework the patch to get it right. -- Aristeu -- 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 Linuxwacom-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel
[Linuxwacom-devel] [PATCH] hid-wacom: fix proximity tool release
Don't zero the current tool before reporting its release to the input subsystem. Signed-off-by: Aristeu Rozanski --- linus-2.6.orig/drivers/hid/hid-wacom.c 2012-02-01 12:04:39.660958537 -0500 +++ linus-2.6/drivers/hid/hid-wacom.c 2012-02-01 12:05:12.205959440 -0500 @@ -322,10 +322,10 @@ static void wacom_i4_parse_pen_report(st switch (data[1]) { case 0x80: /* Out of proximity report */ - wdata->tool = 0; input_report_key(input, BTN_TOUCH, 0); input_report_abs(input, ABS_PRESSURE, 0); input_report_key(input, wdata->tool, 0); + wdata->tool = 0; input_sync(input); break; case 0xC2: /* Tool report */ -- 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 Linuxwacom-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel
[Linuxwacom-devel] [PATCH] hid-wacom: add support to Intuos4 pad buttons and dial
This patch adds support for the pad buttons and dial in the bluetooth version of Intuos4. Signed-off-by: Aristeu Rozanski --- drivers/hid/hid-wacom.c | 38 ++ 1 file changed, 38 insertions(+) --- linus-2.6.orig/drivers/hid/hid-wacom.c 2012-02-01 11:54:09.0 -0500 +++ linus-2.6/drivers/hid/hid-wacom.c 2012-02-01 12:17:46.166583951 -0500 @@ -363,6 +363,35 @@input_report_key(input, BTN_STYLUS2, d return; } +static void wacom_i4_parse_pad_report(struct wacom_data *wdata, + struct input_dev *input, unsigned char *data) +{ + input_report_key(input, BTN_0, (data[2] & 0x01)); + input_report_key(input, BTN_1, (data[3] & 0x01)); + input_report_key(input, BTN_2, (data[3] & 0x02)); + input_report_key(input, BTN_3, (data[3] & 0x04)); + input_report_key(input, BTN_4, (data[3] & 0x08)); + input_report_key(input, BTN_5, (data[3] & 0x10)); + input_report_key(input, BTN_6, (data[3] & 0x20)); + input_report_key(input, BTN_7, (data[3] & 0x40)); + input_report_key(input, BTN_8, (data[3] & 0x80)); + + if (data[1] & 0x80) + input_report_abs(input, ABS_WHEEL, (data[1] & 0x7f)); + else + /* Out of proximity, clear wheel value. */ + input_report_abs(input, ABS_WHEEL, 0); + + if (data[1] | (data[2] & 0x01) | data[3]) { + input_report_key(input, wdata->tool, 1); + input_report_key(input, BTN_TOOL_FINGER, 1); + } else { + input_report_key(input, wdata->tool, 0); + input_report_abs(input, BTN_TOOL_FINGER, 0); + } + input_sync(input); +} + static void wacom_i4_parse_report(struct hid_device *hdev, struct wacom_data *wdata, struct input_dev *input, unsigned char *data) @@ -377,6 +406,7 @@ case 0x03: /* Features Report */ wdata->features = data[2]; break; case 0x0C: /* Button report */ + wacom_i4_parse_pad_report(wdata, input, data); break; default: hid_err(hdev, "Unknown report: %d,%d\n", data[0], data[1]); @@ -474,6 +504,14 @@input_set_abs_params(input, ABS_DISTAN input_set_abs_params(input, ABS_X, 0, 40640, 4, 0); input_set_abs_params(input, ABS_Y, 0, 25400, 4, 0); input_set_abs_params(input, ABS_PRESSURE, 0, 2047, 0, 0); + input_set_abs_params(input, ABS_WHEEL, 0, 71, 0, 0); + __set_bit(BTN_2, input->keybit); + __set_bit(BTN_3, input->keybit); + __set_bit(BTN_4, input->keybit); + __set_bit(BTN_5, input->keybit); + __set_bit(BTN_6, input->keybit); + __set_bit(BTN_7, input->keybit); + __set_bit(BTN_8, input->keybit); break; } -- 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 Linuxwacom-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel