When I mention ABS_MISC, it should really be MSC_SERIAL. But the link I sent tells it all better.
Chris On Thu, Feb 2, 2012 at 9:32 AM, Chris Bagwell <[email protected]> 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 <[email protected]> wrote: >> This patch adds support for the pad buttons and dial in the bluetooth version >> of Intuos4. >> >> Signed-off-by: Aristeu Rozanski <[email protected]> >> >> --- >> 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.000000000 -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? > > 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 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. > > Chris > >> + 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 >> [email protected] >> https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel ------------------------------------------------------------------------------ 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
