On Thu, Mar 17, 2011 at 9:41 AM, Chris Bagwell <[email protected]> wrote:
> >>
> >> finger event never toggled back to zero. Its serial
> >> number also never transition to zero.
> >>
> >> This approach had some issues in user land when switching
> >> between stylus and pad buttons and initial event was usually
> >> sent before user apps ever started. This could be improved
> >> by toggling BTN_TOOL_FINGER back to zero when all buttons
> >> released; like most other wacom drivers are doing.
> >>
> >> Instead, convert to more "standard" approach where tablet pad buttons
> >> are sent always without announcing them as tools. This aligns
> >> with newer Bamboo P&T in same file.
> >>
> >> Note: REL_WHEEL can be on both mouse tool and tablet pad.
> >> Userland must always treat them as coming from tablet pad to avoid
> >> confusion (don't ignore while mouse tool is out of proximity).
> >
> > Can we use another bit for the pad wheel, such are REL_HWHEEL so both
> > wheels can be reported and processed in the userland?
>
> I thought about it but from generic point of view it doesn't help. As
> long as xf86-input-wacom knows make and model of tablet then yes we
>
I am with you on this idea. I want to treat them as generic as possible too.
No tablet model or id is involved here, or in the user land.
> can say "this tablet uses REL_HWHEEL on pad and REL_WHEEL on mouse"
> but in generic view were we do not hard code make/model then REL_WHEEL
> and REL_HWHEEL are both valid mouse events with the later more for
> those +1/-1 movements when pushing scroll wheel sideways.
>
REL_WHEEL is from mouse/puck for all existing models that support relative
wheel. That's why I want to keep REL_WHEEL for mouse. We do not need to
check the tablet model or id to decide this.
In addition, we still have user land issue where BTN_LEFT/RIGHT could
> be a mouse of a pad.
>
You suggested we stay with BTN_# for pad, right? So, if we do not move PAD
buttons to BTN_LEFT/RIGHT. No issues here either.
In other email, I mentioned I think its easier to treat REL_WHEEL as
> PAD event *always* in xf86-input-wacom. User won't know difference.
>
You mentioned this idea above in your commit message too.
User will see the difference since they get a PAD tool when there is no pad
on the tablet. For example, Graphire 1, 2, and 3 all have relative wheel
mouse. If we treat REL_WHEEL as a pad button, we are adding a pad tool for
those devices.
However, if we use REL_HWHEEL for pad, there would be no confusion. We do
not need to guess where REL_HWHEEL came from. It is from pad for sure since
we've never used it anywhere else.
I have a rough patch to show what's in my mind. Please take a look and let
me know what you think. I'll make an official one if you are ok with it.
Thank you.
Ping
diff --git a/drivers/input/tablet/wacom_wac.c
b/drivers/input/tablet/wacom_wac.c
index 5597637..9b9fbc3 100644
--- a/drivers/input/tablet/wacom_wac.c
+++ b/drivers/input/tablet/wacom_wac.c
@@ -199,11 +199,10 @@ static int wacom_graphire_irq(struct wacom_wac *wacom)
struct input_dev *input = wacom->input;
int prox;
int rw = 0;
- int retval = 0;
if (data[0] != WACOM_REPORT_PENABLED) {
dbg("wacom_graphire_irq: received unknown report #%d", data[0]);
- goto exit;
+ return 0;
}
prox = data[1] & 0x80;
@@ -213,12 +212,10 @@ static int wacom_graphire_irq(struct wacom_wac *wacom)
case 0: /* Pen */
wacom->tool[0] = BTN_TOOL_PEN;
- wacom->id[0] = STYLUS_DEVICE_ID;
break;
case 1: /* Rubber */
wacom->tool[0] = BTN_TOOL_RUBBER;
- wacom->id[0] = ERASER_DEVICE_ID;
break;
case 2: /* Mouse with wheel */
@@ -227,7 +224,6 @@ static int wacom_graphire_irq(struct wacom_wac *wacom)
case 3: /* Mouse without wheel */
wacom->tool[0] = BTN_TOOL_MOUSE;
- wacom->id[0] = CURSOR_DEVICE_ID;
break;
}
}
@@ -252,52 +248,27 @@ static int wacom_graphire_irq(struct wacom_wac *wacom)
input_report_rel(input, REL_WHEEL, rw);
}
- if (!prox)
- wacom->id[0] = 0;
- input_report_abs(input, ABS_MISC, wacom->id[0]); /* report tool id
*/
input_report_key(input, wacom->tool[0], prox);
- input_sync(input); /* sync last event */
}
/* send pad data */
switch (features->type) {
case WACOM_G4:
- prox = data[7] & 0xf8;
- if (prox || wacom->id[1]) {
- wacom->id[1] = PAD_DEVICE_ID;
- input_report_key(input, BTN_0, (data[7] & 0x40));
- input_report_key(input, BTN_4, (data[7] & 0x80));
- rw = ((data[7] & 0x18) >> 3) - ((data[7] & 0x20) >> 3);
- input_report_rel(input, REL_WHEEL, rw);
- input_report_key(input, BTN_TOOL_FINGER, 0xf0);
- if (!prox)
- wacom->id[1] = 0;
- input_report_abs(input, ABS_MISC, wacom->id[1]);
- input_event(input, EV_MSC, MSC_SERIAL, 0xf0);
- retval = 1;
- }
+ input_report_key(input, BTN_0, (data[7] & 0x40));
+ input_report_key(input, BTN_4, (data[7] & 0x80));
+ rw = ((data[7] & 0x18) >> 3) - ((data[7] & 0x20) >> 3);
+ input_report_rel(input, REL_HWHEEL, rw);
break;
case WACOM_MO:
- prox = (data[7] & 0xf8) || data[8];
- if (prox || wacom->id[1]) {
- wacom->id[1] = PAD_DEVICE_ID;
- input_report_key(input, BTN_0, (data[7] & 0x08));
- input_report_key(input, BTN_1, (data[7] & 0x20));
- input_report_key(input, BTN_4, (data[7] & 0x10));
- input_report_key(input, BTN_5, (data[7] & 0x40));
- input_report_abs(input, ABS_WHEEL, (data[8] & 0x7f));
- input_report_key(input, BTN_TOOL_FINGER, 0xf0);
- if (!prox)
- wacom->id[1] = 0;
- input_report_abs(input, ABS_MISC, wacom->id[1]);
- input_event(input, EV_MSC, MSC_SERIAL, 0xf0);
- }
- retval = 1;
+ input_report_key(input, BTN_0, (data[7] & 0x08));
+ input_report_key(input, BTN_1, (data[7] & 0x20));
+ input_report_key(input, BTN_4, (data[7] & 0x10));
+ input_report_key(input, BTN_5, (data[7] & 0x40));
+ input_report_abs(input, ABS_WHEEL, (data[8] & 0x7f));
break;
}
-exit:
- return retval;
+ return 1;
}
static int wacom_intuos_inout(struct wacom_wac *wacom)
@@ -1066,9 +1037,9 @@ void wacom_setup_input_capabilities(struct input_dev
*input_dev,
/* fall through */
case WACOM_G4:
- input_set_capability(input_dev, EV_MSC, MSC_SERIAL);
+ __clear_bit(ABS_MISC, input_dev->absbit);
+ input_set_capability(input_dev, EV_REL, REL_HWHEEL);
- __set_bit(BTN_TOOL_FINGER, input_dev->keybit);
__set_bit(BTN_0, input_dev->keybit);
__set_bit(BTN_4, input_dev->keybit);
/* fall through */
------------------------------------------------------------------------------
Colocation vs. Managed Hosting
A question and answer guide to determining the best fit
for your organization - today and in the future.
http://p.sf.net/sfu/internap-sfd2d
_______________________________________________
Linuxwacom-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel