summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--src/2.4.22/wacom.c41
-rw-r--r--src/2.4.30x86-64/wacom.c41
-rw-r--r--src/2.4/wacom.c42
-rw-r--r--src/2.6.10/wacom.c40
-rw-r--r--src/2.6.11/wacom.c40
-rw-r--r--src/2.6.13/wacom.c40
-rw-r--r--src/2.6.14/wacom.c42
-rw-r--r--src/2.6.15/wacom.c42
-rw-r--r--src/2.6.2/wacom.c40
-rw-r--r--src/2.6.3/wacom.c40
-rw-r--r--src/2.6.4/wacom.c36
-rw-r--r--src/2.6.5/wacom.c40
-rw-r--r--src/2.6.6/wacom.c40
-rw-r--r--src/2.6.7/wacom.c40
-rw-r--r--src/2.6.8/wacom.c40
-rw-r--r--src/2.6.9/wacom.c40
-rw-r--r--src/2.6/wacom.c40
-rw-r--r--src/wcmUSB.c4
-rw-r--r--src/xf86Wacom.c23
-rw-r--r--src/xsetwacom.c5
21 files changed, 253 insertions, 470 deletions
diff --git a/ChangeLog b/ChangeLog
index 2fba2fe..5a09ef2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2006-03-06 Ping Cheng <pingc@wacom.com>
+ * Fixed a Volito bug (Kirill Frolov)
+ * Fixed a xsetwacom.c typo
+ * Supporting tablet attach/detach while X driver running (Christian Lupien)
+ * Remove SYSCALL from xf86 calls (Christian Lupien)
+ * Swapped USB tablet wheel directions (Christian Lupien)
+
2006-02-27 Ping Cheng <pingc@wacom.com>
* Updated website
* Support 2.6.15
diff --git a/src/2.4.22/wacom.c b/src/2.4.22/wacom.c
index d270af2..1614974 100644
--- a/src/2.4.22/wacom.c
+++ b/src/2.4.22/wacom.c
@@ -1,5 +1,5 @@
/*
- * $Id: wacom.c,v 1.20 2006/02/13 05:24:22 pingc Exp $
+ * $Id: wacom.c,v 1.21 2006/03/07 00:29:04 pingc Exp $
*
* Copyright (c) 2000-2002 Vojtech Pavlik <vojtech@suse.cz>
* Copyright (c) 2000 Andreas Bach Aaen <abach@stofanet.dk>
@@ -342,6 +342,8 @@ static void wacom_graphire_irq(struct urb *urb)
if (urb->status) return;
+ if (data[0] == 99) return; /* for Volito tablets */
+
if (data[0] != 2)
{
printk(KERN_INFO "wacom_graphire_irq: received unknown report #%d\n", data[0]);
@@ -367,10 +369,10 @@ static void wacom_graphire_irq(struct urb *urb)
input_report_key(dev, BTN_MIDDLE, data[1] & 0x04);
if ( strstr(wacom->features->name, "Graphire4") )
{
- rw = data[7] & 0x04 ? -(data[7] & 0x03) : data[7] & 0x03;
- input_report_rel(dev, REL_WHEEL, rw);
+ rw = data[7] & 0x04 ? (data[7] & 0x03)-4 : (data[7] & 0x03);
+ input_report_rel(dev, REL_WHEEL, -rw);
} else
- input_report_rel(dev, REL_WHEEL, (signed char) data[6]);
+ input_report_rel(dev, REL_WHEEL, -(signed char) data[6]);
/* fall through */
case 3: /* Mouse without wheel */
@@ -409,34 +411,19 @@ static void wacom_graphire_irq(struct urb *urb)
/* send pad data */
if ( strstr(wacom->features->name, "Graphire4") )
{
- /* fist time sending pad data */
- if (wacom->tool[1] != BTN_TOOL_FINGER)
- {
- wacom->id[1] = 0;
- wacom->serial[1] = ( data[7] & 0x38 ) >> 2;
- }
- if ( data[7] & 0xf8 )
+ if ( (wacom->serial[1] & 0xc0) != (data[7] & 0xf8) )
{
+ wacom->id[1] = 1;
+ wacom->serial[1] = (data[7] & 0xf8);
input_report_key(dev, BTN_0, (data[7] & 0x40));
input_report_key(dev, BTN_4, (data[7] & 0x80));
- if ( (( data[7] & 0x38 ) >> 2) == (wacom->serial[1] & 0x0e) )
- /* alter REL_WHEEL value so X apps can get it */
- wacom->serial[1] += (wacom->serial[1] & 0x01) ? -1 : 1 ;
- else
- wacom->serial[1] = (data[7] & 0x38 ) >> 2;
- /* don't alter the value when there is no wheel event */
- if ( wacom->serial[1] == 1 ) wacom->serial[1] = 0;
- rw = wacom->serial[1];
- rw = ( rw & 0x08 ) ? -( rw & 0x07 ) : ( rw & 0x07 );
+ rw = ((data[7] & 0x18) >> 3) - ((data[7] & 0x20) >> 3);
input_report_rel(dev, REL_WHEEL, rw);
- wacom->tool[1] = BTN_TOOL_FINGER;
- wacom->id[1] = data[7] & 0xf8;
- input_report_key(dev, wacom->tool[1], 0xf0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0xf0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
} else if ( wacom->id[1] ) {
wacom->id[1] = 0;
- wacom->serial[1] = 0;
- input_report_key(dev, wacom->tool[1], 0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
}
}
@@ -690,8 +677,8 @@ static void wacom_intuos_irq(struct urb *urb)
input_report_key(dev, BTN_MIDDLE, data[8] & 0x08);
input_report_key(dev, BTN_RIGHT, data[8] & 0x10);
/* mouse wheel is positive when rolled backwards */
- input_report_rel(dev, REL_WHEEL, (__u32)((data[8] & 0x02) >> 1)
- - (__u32)(data[8] & 0x01));
+ input_report_rel(dev, REL_WHEEL, (__u32)(data[8] & 0x01))
+ - (__u32)((data[8] & 0x02) >> 1);
/* I3 2D mouse side buttons */
if (strstr(wacom->features->name, "Intuos3"))
diff --git a/src/2.4.30x86-64/wacom.c b/src/2.4.30x86-64/wacom.c
index 50444d1..bc14c03 100644
--- a/src/2.4.30x86-64/wacom.c
+++ b/src/2.4.30x86-64/wacom.c
@@ -1,5 +1,5 @@
/*
- * $Id: wacom.c,v 1.6 2006/02/13 05:24:23 pingc Exp $
+ * $Id: wacom.c,v 1.7 2006/03/07 00:29:04 pingc Exp $
*
* Copyright (c) 2000-2002 Vojtech Pavlik <vojtech@suse.cz>
* Copyright (c) 2000 Andreas Bach Aaen <abach@stofanet.dk>
@@ -287,6 +287,8 @@ static void wacom_graphire_irq(struct urb *urb)
if (urb->status) return;
+ if (data[0] == 99) return; /* for Volito tablets */
+
if (data[0] != 2)
{
printk(KERN_INFO "wacom_graphire_irq: received unknown report #%d\n", data[0]);
@@ -310,10 +312,10 @@ static void wacom_graphire_irq(struct urb *urb)
case 2: /* Mouse with wheel */
input_report_key(dev, BTN_MIDDLE, data[1] & 0x04);
if ( strstr(wacom->features->name, "Graphire4") ) {
- rw = data[7] & 0x04 ? -(data[7] & 0x03) : data[7] & 0x03;
- input_report_rel(dev, REL_WHEEL, rw);
+ rw = data[7] & 0x04 ? (data[7] & 0x03)-4 : data[7] & 0x03;
+ input_report_rel(dev, REL_WHEEL, -rw);
} else
- input_report_rel(dev, REL_WHEEL, (signed char) data[6]);
+ input_report_rel(dev, REL_WHEEL, -(signed char) data[6]);
/* fall through */
case 3: /* Mouse without wheel */
@@ -352,34 +354,19 @@ static void wacom_graphire_irq(struct urb *urb)
/* send pad data */
if ( strstr(wacom->features->name, "Graphire4") )
{
- /* fist tine sending pad data */
- if (wacom->tool[1] != BTN_TOOL_FINGER)
- {
- wacom->id[1] = 0;
- wacom->serial[1] = ( data[7] & 0x38 ) >> 2;
- }
- if ( data[7] & 0xf8 )
+ if ( (wacom->serial[1] & 0xc0) != (data[7] & 0xf8) )
{
+ wacom->id[1] = 1;
+ wacom->serial[1] = (data[7] & 0xf8);
input_report_key(dev, BTN_0, (data[7] & 0x40));
input_report_key(dev, BTN_4, (data[7] & 0x80));
- if ( (( data[7] & 0x38 ) >> 2) == (wacom->serial[1] & 0x0e) )
- /* alter REL_WHEEL value so X apps can get it */
- wacom->serial[1] += (wacom->serial[1] & 0x01) ? -1 : 1 ;
- else
- wacom->serial[1] = (data[7] & 0x38 ) >> 2;
- /* don't alter the value when there is no wheel event */
- if ( wacom->serial[1] == 1 ) wacom->serial[1] = 0;
- rw = wacom->serial[1];
- rw = ( rw & 0x08 ) ? -( rw & 0x07 ) : ( rw & 0x07 );
+ rw = ((data[7] & 0x18) >> 3) - ((data[7] & 0x20) >> 3);
input_report_rel(dev, REL_WHEEL, rw);
- wacom->tool[1] = BTN_TOOL_FINGER;
- wacom->id[1] = data[7] & 0xf8;
- input_report_key(dev, wacom->tool[1], 0xf0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0xf0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
} else if ( wacom->id[1] ) {
wacom->id[1] = 0;
- wacom->serial[1] = 0;
- input_report_key(dev, wacom->tool[1], 0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
}
}
@@ -632,8 +619,8 @@ static void wacom_intuos_irq(struct urb *urb)
input_report_key(dev, BTN_MIDDLE, data[8] & 0x08);
input_report_key(dev, BTN_RIGHT, data[8] & 0x10);
/* mouse wheel is positive when rolled backwards */
- input_report_rel(dev, REL_WHEEL, (__u32)((data[8] & 0x02) >> 1)
- - (__u32)(data[8] & 0x01));
+ input_report_rel(dev, REL_WHEEL, (__u32)(data[8] & 0x01)
+ - (__u32)((data[8] & 0x02) >> 1));
/* I3 2D mouse side buttons */
if (strstr(wacom->features->name, "Intuos3"))
diff --git a/src/2.4/wacom.c b/src/2.4/wacom.c
index 5e21f74..7786700 100644
--- a/src/2.4/wacom.c
+++ b/src/2.4/wacom.c
@@ -1,5 +1,5 @@
/*
- * $Id: wacom.c,v 1.21 2006/02/13 05:24:22 pingc Exp $
+ * $Id: wacom.c,v 1.22 2006/03/07 00:29:04 pingc Exp $
*
* Copyright (c) 2000-2002 Vojtech Pavlik <vojtech@suse.cz>
* Copyright (c) 2000 Andreas Bach Aaen <abach@stofanet.dk>
@@ -342,6 +342,8 @@ static void wacom_graphire_irq(struct urb *urb)
if (urb->status) return;
+ if (data[0] == 99) return; /* for Volito tablets */
+
if (data[0] != 2)
{
printk(KERN_INFO "wacom_graphire_irq: received unknown report #%d\n", data[0]);
@@ -366,10 +368,10 @@ static void wacom_graphire_irq(struct urb *urb)
case 2: /* Mouse with wheel */
input_report_key(dev, BTN_MIDDLE, data[1] & 0x04);
if ( strstr(wacom->features->name, "Graphire4") ) {
- rw = data[7] & 0x04 ? -(data[7] & 0x03) : data[7] & 0x03;
- input_report_rel(dev, REL_WHEEL, rw);
+ rw = data[7] & 0x04 ? (data[7] & 0x03)-4 : data[7] & 0x03;
+ input_report_rel(dev, REL_WHEEL, -rw);
} else
- input_report_rel(dev, REL_WHEEL, (signed char) data[6]);
+ input_report_rel(dev, REL_WHEEL, -(signed char) data[6]);
/* fall through */
case 3: /* Mouse without wheel */
@@ -408,34 +410,20 @@ static void wacom_graphire_irq(struct urb *urb)
/* send pad data */
if ( strstr(wacom->features->name, "Graphire4") )
{
- /* fist time sending pad data */
- if (wacom->tool[1] != BTN_TOOL_FINGER)
- {
- wacom->id[1] = 0;
- wacom->serial[1] = ( data[7] & 0x38 ) >> 2;
- }
- if ( data[7] & 0xf8 )
+ if ( (wacom->serial[1] & 0xc0) != (data[7] & 0xf8) )
{
+ wacom->id[1] = 1;
+ wacom->serial[1] = (data[7] & 0xf8);
input_report_key(dev, BTN_0, (data[7] & 0x40));
input_report_key(dev, BTN_4, (data[7] & 0x80));
- if ( (( data[7] & 0x38 ) >> 2) == (wacom->serial[1] & 0x0e) )
- /* alter REL_WHEEL value so X apps can get it */
- wacom->serial[1] += (wacom->serial[1] & 0x01) ? -1 : 1 ;
- else
- wacom->serial[1] = (data[7] & 0x38 ) >> 2;
- /* don't alter the value when there is no wheel event */
- if ( wacom->serial[1] == 1 ) wacom->serial[1] = 0;
- rw = wacom->serial[1];
- rw = ( rw & 0x08 ) ? -( rw & 0x07 ) : ( rw & 0x07 );
+
+ rw = ((data[7] & 0x18) >> 3) - ((data[7] & 0x20) >> 3);
input_report_rel(dev, REL_WHEEL, rw);
- wacom->tool[1] = BTN_TOOL_FINGER;
- wacom->id[1] = data[7] & 0xf8;
- input_report_key(dev, wacom->tool[1], 0xf0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0xf0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
} else if ( wacom->id[1] ) {
wacom->id[1] = 0;
- wacom->serial[1] = 0;
- input_report_key(dev, wacom->tool[1], 0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
}
}
@@ -689,8 +677,8 @@ static void wacom_intuos_irq(struct urb *urb)
input_report_key(dev, BTN_MIDDLE, data[8] & 0x08);
input_report_key(dev, BTN_RIGHT, data[8] & 0x10);
/* mouse wheel is positive when rolled backwards */
- input_report_rel(dev, REL_WHEEL, (__u32)((data[8] & 0x02) >> 1)
- - (__u32)(data[8] & 0x01));
+ input_report_rel(dev, REL_WHEEL, (__u32)(data[8] & 0x01)
+ - (__u32)((data[8] & 0x02) >> 1));
/* I3 2D mouse side buttons */
if (strstr(wacom->features->name, "Intuos3"))
diff --git a/src/2.6.10/wacom.c b/src/2.6.10/wacom.c
index 11e3c04..ada39b7 100644
--- a/src/2.6.10/wacom.c
+++ b/src/2.6.10/wacom.c
@@ -382,6 +382,8 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
goto exit;
}
+ if (data[0] == 99) return; /* for Volito tablets */
+
if (data[0] != 2) {
dbg("wacom_graphire_irq: received unknown report #%d", data[0]);
goto exit;
@@ -406,10 +408,10 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
case 2: /* Mouse with wheel */
input_report_key(dev, BTN_MIDDLE, data[1] & 0x04);
if ( wacom->features->type == G4 ) {
- rw = data[7] & 0x04 ? -(data[7] & 0x03) : data[7] & 0x03;
- input_report_rel(dev, REL_WHEEL, rw);
+ rw = data[7] & 0x04 ? (data[7] & 0x03)-4 : data[7] & 0x03;
+ input_report_rel(dev, REL_WHEEL, -rw);
else
- input_report_rel(dev, REL_WHEEL, (signed char) data[6]);
+ input_report_rel(dev, REL_WHEEL, -(signed char) data[6]);
/* fall through */
case 3: /* Mouse without wheel */
@@ -448,34 +450,18 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
/* send pad data */
if ( wacom->features->type == G4 )
{
- /* fist time sending pad data */
- if (wacom->tool[1] != BTN_TOOL_FINGER)
- {
- wacom->id[1] = 0;
- wacom->serial[1] = ( data[7] & 0x38 ) >> 2;
- }
- if ( data[7] & 0xf8 )
- {
+ if ( (wacom->serial[1] & 0xc0) != (data[7] & 0xf8) ) {
+ wacom->id[1] = 1;
+ wacom->serial[1] = (data[7] & 0xf8);
input_report_key(dev, BTN_0, (data[7] & 0x40));
input_report_key(dev, BTN_4, (data[7] & 0x80));
- if ( (( data[7] & 0x38 ) >> 2) == (wacom->serial[1] & 0x0e) )
- /* alter REL_WHEEL value so X apps can get it */
- wacom->serial[1] += (wacom->serial[1] & 0x01) ? -1 : 1 ;
- else
- wacom->serial[1] = (data[7] & 0x38 ) >> 2;
- /* don't alter the value when there is no wheel event */
- if ( wacom->serial[1] == 1 ) wacom->serial[1] = 0;
- rw = wacom->serial[1];
- rw = ( rw & 0x08 ) ? -( rw & 0x07 ) : ( rw & 0x07 );
+ rw = ((data[7] & 0x18) >> 3) - ((data[7] & 0x20) >> 3);
input_report_rel(dev, REL_WHEEL, rw);
- wacom->tool[1] = BTN_TOOL_FINGER;
- wacom->id[1] = data[7] & 0xf8;
- input_report_key(dev, wacom->tool[1], 0xf0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0xf0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
} else if ( wacom->id[1] ) {
wacom->id[1] = 0;
- wacom->serial[1] = 0;
- input_report_key(dev, wacom->tool[1], 0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
}
input_sync(dev);
@@ -737,8 +723,8 @@ static void wacom_intuos_irq(struct urb *urb, struct pt_regs *regs)
input_report_key(dev, BTN_LEFT, data[8] & 0x04);
input_report_key(dev, BTN_MIDDLE, data[8] & 0x08);
input_report_key(dev, BTN_RIGHT, data[8] & 0x10);
- input_report_rel(dev, REL_WHEEL, ((data[8] & 0x02) >> 1)
- - (data[8] & 0x01));
+ input_report_rel(dev, REL_WHEEL, (data[8] & 0x01)
+ - ((data[8] & 0x02) >> 1));
/* I3 2D mouse side buttons */
if (wacom->features->type == INTUOS3)
diff --git a/src/2.6.11/wacom.c b/src/2.6.11/wacom.c
index a2b0d3c..0ca5e22 100644
--- a/src/2.6.11/wacom.c
+++ b/src/2.6.11/wacom.c
@@ -384,6 +384,8 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
goto exit;
}
+ if (data[0] == 99) return; /* for Volito tablets */
+
if (data[0] != 2) {
dbg("wacom_graphire_irq: received unknown report #%d", data[0]);
goto exit;
@@ -408,10 +410,10 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
case 2: /* Mouse with wheel */
input_report_key(dev, BTN_MIDDLE, data[1] & 0x04);
if ( wacom->features->type == G4 ) {
- rw = data[7] & 0x04 ? -(data[7] & 0x03) : (data[7] & 0x03);
- input_report_rel(dev, REL_WHEEL, rw);
+ rw = data[7] & 0x04 ? (data[7] & 0x03)-4 : (data[7] & 0x03);
+ input_report_rel(dev, REL_WHEEL, -rw);
} else
- input_report_rel(dev, REL_WHEEL, (signed char) data[6]);
+ input_report_rel(dev, REL_WHEEL, -(signed char) data[6]);
/* fall through */
case 3: /* Mouse without wheel */
@@ -450,34 +452,18 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
/* send pad data */
if ( wacom->features->type == G4 )
{
- /* fist time sending pad data */
- if (wacom->tool[1] != BTN_TOOL_FINGER)
- {
- wacom->id[1] = 0;
- wacom->serial[1] = ( data[7] & 0x38 ) >> 2;
- }
- if ( data[7] & 0xf8 )
- {
+ if ( (wacom->serial[1] & 0xc0) != (data[7] & 0xf8) ) {
+ wacom->id[1] = 1;
+ wacom->serial[1] = (data[7] & 0xf8);
input_report_key(dev, BTN_0, (data[7] & 0x40));
input_report_key(dev, BTN_4, (data[7] & 0x80));
- if ( (( data[7] & 0x38 ) >> 2) == (wacom->serial[1] & 0x0e) )
- /* alter REL_WHEEL value so X apps can get it */
- wacom->serial[1] += (wacom->serial[1] & 0x01) ? -1 : 1 ;
- else
- wacom->serial[1] = (data[7] & 0x38 ) >> 2;
- /* don't alter the value when there is no wheel event */
- if ( wacom->serial[1] == 1 ) wacom->serial[1] = 0;
- rw = wacom->serial[1];
- rw = ( rw & 0x08 ) ? -( rw & 0x07 ) : ( rw & 0x07 );
+ rw = ((data[7] & 0x18) >> 3) - ((data[7] & 0x20) >> 3);
input_report_rel(dev, REL_WHEEL, rw);
- wacom->tool[1] = BTN_TOOL_FINGER;
- wacom->id[1] = data[7] & 0xf8;
- input_report_key(dev, wacom->tool[1], 0xf0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0xf0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
} else if ( wacom->id[1] ) {
wacom->id[1] = 0;
- wacom->serial[1] = 0;
- input_report_key(dev, wacom->tool[1], 0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
}
input_sync(dev);
@@ -740,8 +726,8 @@ static void wacom_intuos_irq(struct urb *urb, struct pt_regs *regs)
input_report_key(dev, BTN_LEFT, data[8] & 0x04);
input_report_key(dev, BTN_MIDDLE, data[8] & 0x08);
input_report_key(dev, BTN_RIGHT, data[8] & 0x10);
- input_report_rel(dev, REL_WHEEL, ((data[8] & 0x02) >> 1)
- - (data[8] & 0x01));
+ input_report_rel(dev, REL_WHEEL, (data[8] & 0x01)
+ - ((data[8] & 0x02) >> 1));
/* I3 2D mouse side buttons */
if (wacom->features->type == INTUOS3)
diff --git a/src/2.6.13/wacom.c b/src/2.6.13/wacom.c
index d5284b8..0778568 100644
--- a/src/2.6.13/wacom.c
+++ b/src/2.6.13/wacom.c
@@ -375,6 +375,8 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
goto exit;
}
+ if (data[0] == 99) return; /* for Volito tablets */
+
if (data[0] != 2) {
dbg("wacom_graphire_irq: received unknown report #%d", data[0]);
goto exit;
@@ -399,10 +401,10 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
case 2: /* Mouse with wheel */
input_report_key(dev, BTN_MIDDLE, data[1] & 0x04);
if ( wacom->features->type == G4 ) {
- rw = data[7] & 0x04 ? -(data[7] & 0x03) : (data[7] & 0x03);
- input_report_rel(dev, REL_WHEEL, rw);
+ rw = data[7] & 0x04 ? (data[7] & 0x03)-4 : (data[7] & 0x03);
+ input_report_rel(dev, REL_WHEEL, -rw);
} else
- input_report_rel(dev, REL_WHEEL, (signed char) data[6]);
+ input_report_rel(dev, REL_WHEEL, -(signed char) data[6]);
/* fall through */
case 3: /* Mouse without wheel */
@@ -441,34 +443,18 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
/* send pad data */
if ( wacom->features->type == G4 )
{
- /* fist time sending pad data */
- if (wacom->tool[1] != BTN_TOOL_FINGER)
- {
- wacom->id[1] = 0;
- wacom->serial[1] = ( data[7] & 0x38 ) >> 2;
- }
- if ( data[7] & 0xf8 )
- {
+ if ( (wacom->serial[1] & 0xc0) != (data[7] & 0xf8) ) {
+ wacom->id[1] = 1;
+ wacom->serial[1] = (data[7] & 0xf8);
input_report_key(dev, BTN_0, (data[7] & 0x40));
input_report_key(dev, BTN_4, (data[7] & 0x80));
- if ( (( data[7] & 0x38 ) >> 2) == (wacom->serial[1] & 0x0e) )
- /* alter REL_WHEEL value so X apps can get it */
- wacom->serial[1] += (wacom->serial[1] & 0x01) ? -1 : 1 ;
- else
- wacom->serial[1] = (data[7] & 0x38 ) >> 2;
- /* don't alter the value when there is no wheel event */
- if ( wacom->serial[1] == 1 ) wacom->serial[1] = 0;
- rw = wacom->serial[1];
- rw = ( rw & 0x08 ) ? -( rw & 0x07 ) : ( rw & 0x07 );
+ rw = ((data[7] & 0x18) >> 3) - ((data[7] & 0x20) >> 3);
input_report_rel(dev, REL_WHEEL, rw);
- wacom->tool[1] = BTN_TOOL_FINGER;
- wacom->id[1] = data[7] & 0xf8;
- input_report_key(dev, wacom->tool[1], 0xf0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0xf0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
} else if ( wacom->id[1] ) {
wacom->id[1] = 0;
- wacom->serial[1] = 0;
- input_report_key(dev, wacom->tool[1], 0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
}
input_sync(dev);
@@ -721,8 +707,8 @@ static void wacom_intuos_irq(struct urb *urb, struct pt_regs *regs)
input_report_key(dev, BTN_LEFT, data[8] & 0x04);
input_report_key(dev, BTN_MIDDLE, data[8] & 0x08);
input_report_key(dev, BTN_RIGHT, data[8] & 0x10);
- input_report_rel(dev, REL_WHEEL, ((data[8] & 0x02) >> 1)
- - (data[8] & 0x01));
+ input_report_rel(dev, REL_WHEEL, (data[8] & 0x01)
+ - ((data[8] & 0x02) >> 1));
/* I3 2D mouse side buttons */
if (wacom->features->type == INTUOS3) {
diff --git a/src/2.6.14/wacom.c b/src/2.6.14/wacom.c
index e5f2737..46b6ba0 100644
--- a/src/2.6.14/wacom.c
+++ b/src/2.6.14/wacom.c
@@ -374,6 +374,8 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
goto exit;
}
+ if (data[0] == 99) return; /* for Volito tablets */
+
if (data[0] != 2) {
dbg("wacom_graphire_irq: received unknown report #%d", data[0]);
goto exit;
@@ -398,10 +400,10 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
case 2: /* Mouse with wheel */
input_report_key(dev, BTN_MIDDLE, data[1] & 0x04);
if (wacom->features->type == G4) {
- rw = data[7] & 0x04 ? -(data[7] & 0x03) : (data[7] & 0x03);
- input_report_rel(dev, REL_WHEEL, rw);
+ rw = data[7] & 0x04 ? (data[7] & 0x03)-4 : (data[7] & 0x03);
+ input_report_rel(dev, REL_WHEEL, -rw);
} else
- input_report_rel(dev, REL_WHEEL, (signed char) data[6]);
+ input_report_rel(dev, REL_WHEEL, -(signed char) data[6]);
/* fall through */
case 3: /* Mouse without wheel */
@@ -439,34 +441,18 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
/* send pad data */
if (wacom->features->type == G4) {
- /* fist time sending pad data */
- if (wacom->tool[1] != BTN_TOOL_FINGER) {
- wacom->id[1] = 0;
- wacom->serial[1] = (data[7] & 0x38) >> 2;
- }
- if (data[7] & 0xf8) {
+ if ( (wacom->serial[1] & 0xc0) != (data[7] & 0xf8) ) {
+ wacom->id[1] = 1;
+ wacom->serial[1] = (data[7] & 0xf8);
input_report_key(dev, BTN_0, (data[7] & 0x40));
input_report_key(dev, BTN_4, (data[7] & 0x80));
- if (((data[7] & 0x38) >> 2) == (wacom->serial[1] & 0x0e))
- /* alter REL_WHEEL value so X apps can get it */
- wacom->serial[1] += (wacom->serial[1] & 0x01) ? -1 : 1;
- else
- wacom->serial[1] = (data[7] & 0x38) >> 2;
-
- /* don't alter the value when there is no wheel event */
- if (wacom->serial[1] == 1)
- wacom->serial[1] = 0;
- rw = wacom->serial[1];
- rw = (rw & 0x08) ? -(rw & 0x07) : (rw & 0x07);
+ rw = ((data[7] & 0x18) >> 3) - ((data[7] & 0x20) >> 3);
input_report_rel(dev, REL_WHEEL, rw);
- wacom->tool[1] = BTN_TOOL_FINGER;
- wacom->id[1] = data[7] & 0xf8;
- input_report_key(dev, wacom->tool[1], 0xf0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0xf0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
- } else if (wacom->id[1]) {
+ } else if ( wacom->id[1] ) {
wacom->id[1] = 0;
- wacom->serial[1] = 0;
- input_report_key(dev, wacom->tool[1], 0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
}
input_sync(dev);
@@ -718,8 +704,8 @@ static void wacom_intuos_irq(struct urb *urb, struct pt_regs *regs)
input_report_key(dev, BTN_LEFT, data[8] & 0x04);
input_report_key(dev, BTN_MIDDLE, data[8] & 0x08);
input_report_key(dev, BTN_RIGHT, data[8] & 0x10);
- input_report_rel(dev, REL_WHEEL, ((data[8] & 0x02) >> 1)
- - (data[8] & 0x01));
+ input_report_rel(dev, REL_WHEEL, (data[8] & 0x01)
+ - ((data[8] & 0x02) >> 1));
/* I3 2D mouse side buttons */
if (wacom->features->type == INTUOS3) {
diff --git a/src/2.6.15/wacom.c b/src/2.6.15/wacom.c
index c23824d..c0ea882 100644
--- a/src/2.6.15/wacom.c
+++ b/src/2.6.15/wacom.c
@@ -374,6 +374,8 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
goto exit;
}
+ if (data[0] == 99) return; /* for Volito tablets */
+
if (data[0] != 2) {
dbg("wacom_graphire_irq: received unknown report #%d", data[0]);
goto exit;
@@ -398,10 +400,10 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
case 2: /* Mouse with wheel */
input_report_key(dev, BTN_MIDDLE, data[1] & 0x04);
if (wacom->features->type == G4) {
- rw = data[7] & 0x04 ? -(data[7] & 0x03) : (data[7] & 0x03);
- input_report_rel(dev, REL_WHEEL, rw);
+ rw = data[7] & 0x04 ? (data[7] & 0x03)-4 : (data[7] & 0x03);
+ input_report_rel(dev, REL_WHEEL, -rw);
} else
- input_report_rel(dev, REL_WHEEL, (signed char) data[6]);
+ input_report_rel(dev, REL_WHEEL, -(signed char) data[6]);
/* fall through */
case 3: /* Mouse without wheel */
@@ -439,34 +441,18 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
/* send pad data */
if (wacom->features->type == G4) {
- /* fist time sending pad data */
- if (wacom->tool[1] != BTN_TOOL_FINGER) {
- wacom->id[1] = 0;
- wacom->serial[1] = (data[7] & 0x38) >> 2;
- }
- if (data[7] & 0xf8) {
+ if ( (wacom->serial[1] & 0xc0) != (data[7] & 0xf8) ) {
+ wacom->id[1] = 1;
+ wacom->serial[1] = (data[7] & 0xf8);
input_report_key(dev, BTN_0, (data[7] & 0x40));
input_report_key(dev, BTN_4, (data[7] & 0x80));
- if (((data[7] & 0x38) >> 2) == (wacom->serial[1] & 0x0e))
- /* alter REL_WHEEL value so X apps can get it */
- wacom->serial[1] += (wacom->serial[1] & 0x01) ? -1 : 1;
- else
- wacom->serial[1] = (data[7] & 0x38 ) >> 2;
-
- /* don't alter the value when there is no wheel event */
- if (wacom->serial[1] == 1)
- wacom->serial[1] = 0;
- rw = wacom->serial[1];
- rw = (rw & 0x08) ? -(rw & 0x07) : (rw & 0x07);
+ rw = ((data[7] & 0x18) >> 3) - ((data[7] & 0x20) >> 3);
input_report_rel(dev, REL_WHEEL, rw);
- wacom->tool[1] = BTN_TOOL_FINGER;
- wacom->id[1] = data[7] & 0xf8;
- input_report_key(dev, wacom->tool[1], 0xf0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0xf0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
- } else if (wacom->id[1]) {
+ } else if ( wacom->id[1] ) {
wacom->id[1] = 0;
- wacom->serial[1] = 0;
- input_report_key(dev, wacom->tool[1], 0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
}
input_sync(dev);
@@ -718,8 +704,8 @@ static void wacom_intuos_irq(struct urb *urb, struct pt_regs *regs)
input_report_key(dev, BTN_LEFT, data[8] & 0x04);
input_report_key(dev, BTN_MIDDLE, data[8] & 0x08);
input_report_key(dev, BTN_RIGHT, data[8] & 0x10);
- input_report_rel(dev, REL_WHEEL, ((data[8] & 0x02) >> 1)
- - (data[8] & 0x01));
+ input_report_rel(dev, REL_WHEEL, (data[8] & 0x01)
+ - ((data[8] & 0x02) >> 1));
/* I3 2D mouse side buttons */
if (wacom->features->type == INTUOS3) {
diff --git a/src/2.6.2/wacom.c b/src/2.6.2/wacom.c
index 64206d1..59637ae 100644
--- a/src/2.6.2/wacom.c
+++ b/src/2.6.2/wacom.c
@@ -378,6 +378,8 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
goto exit;
}
+ if (data[0] == 99) return; /* for Volito tablets */
+
if (data[0] != 2) {
dbg("wacom_graphire_irq: received unknown report #%d", data[0]);
goto exit;
@@ -402,10 +404,10 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
case 2: /* Mouse with wheel */
input_report_key(dev, BTN_MIDDLE, data[1] & 0x04);
if ( wacom->features->type == G4 ) {
- rw = data[7] & 0x04 ? -(data[7] & 0x03) : (data[7] & 0x03);
- input_report_rel(dev, REL_WHEEL, rw);
+ rw = data[7] & 0x04 ? (data[7] & 0x03)-4 : (data[7] & 0x03);
+ input_report_rel(dev, REL_WHEEL, -rw);
} else
- input_report_rel(dev, REL_WHEEL, (signed char) data[6]);
+ input_report_rel(dev, REL_WHEEL, -(signed char) data[6]);
/* fall through */
case 3: /* Mouse without wheel */
@@ -444,34 +446,18 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
/* send pad data */
if ( wacom->features->type == G4 )
{
- /* fist time sending pad data */
- if (wacom->tool[1] != BTN_TOOL_FINGER)
- {
- wacom->id[1] = 0;
- wacom->serial[1] = ( data[7] & 0x38 ) >> 2;
- }
- if ( data[7] & 0xf8 )
- {
+ if ( (wacom->serial[1] & 0xc0) != (data[7] & 0xf8) ) {
+ wacom->id[1] = 1;
+ wacom->serial[1] = (data[7] & 0xf8);
input_report_key(dev, BTN_0, (data[7] & 0x40));
input_report_key(dev, BTN_4, (data[7] & 0x80));
- if ( (( data[7] & 0x38 ) >> 2) == (wacom->serial[1] & 0x0e) )
- /* alter REL_WHEEL value so X apps can get it */
- wacom->serial[1] += (wacom->serial[1] & 0x01) ? -1 : 1 ;
- else
- wacom->serial[1] = (data[7] & 0x38 ) >> 2;
- /* don't alter the value when there is no wheel event */
- if ( wacom->serial[1] == 1 ) wacom->serial[1] = 0;
- rw = wacom->serial[1];
- rw = ( rw & 0x08 ) ? -( rw & 0x07 ) : ( rw & 0x07 );
+ rw = ((data[7] & 0x18) >> 3) - ((data[7] & 0x20) >> 3);
input_report_rel(dev, REL_WHEEL, rw);
- wacom->tool[1] = BTN_TOOL_FINGER;
- wacom->id[1] = data[7] & 0xf8;
- input_report_key(dev, wacom->tool[1], 0xf0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0xf0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
} else if ( wacom->id[1] ) {
wacom->id[1] = 0;
- wacom->serial[1] = 0;
- input_report_key(dev, wacom->tool[1], 0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
}
input_sync(dev);
@@ -734,8 +720,8 @@ static void wacom_intuos_irq(struct urb *urb, struct pt_regs *regs)
input_report_key(dev, BTN_LEFT, data[8] & 0x04);
input_report_key(dev, BTN_MIDDLE, data[8] & 0x08);
input_report_key(dev, BTN_RIGHT, data[8] & 0x10);
- input_report_rel(dev, REL_WHEEL, ((data[8] & 0x02) >> 1)
- - (data[8] & 0x01));
+ input_report_rel(dev, REL_WHEEL, (data[8] & 0x01)
+ - ((data[8] & 0x02) >> 1));
/* I3 2D mouse side buttons */
if (wacom->features->type == INTUOS3)
diff --git a/src/2.6.3/wacom.c b/src/2.6.3/wacom.c
index c64f6de..91d7d3c 100644
--- a/src/2.6.3/wacom.c
+++ b/src/2.6.3/wacom.c
@@ -179,6 +179,8 @@ static void wacom_pl_irq(struct urb *urb, struct pt_regs *regs)
goto exit;
}
+ if (data[0] == 99) return; /* for Volito tablets */
+
if (data[0] != 2) {
dbg("wacom_pl_irq: received unknown report #%d", data[0]);
goto exit;
@@ -406,10 +408,10 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
case 2: /* Mouse with wheel */
input_report_key(dev, BTN_MIDDLE, data[1] & 0x04);
if ( wacom->features->type == G4 ) {
- rw = data[7] & 0x04 ? -(data[7] & 0x03) : (data[7] & 0x03);
- input_report_rel(dev, REL_WHEEL, rw);
+ rw = data[7] & 0x04 ? (data[7] & 0x03)-4 : (data[7] & 0x03);
+ input_report_rel(dev, REL_WHEEL, -rw);
} else
- input_report_rel(dev, REL_WHEEL, (signed char) data[6]);
+ input_report_rel(dev, REL_WHEEL, -(signed char) data[6]);
/* fall through */
case 3: /* Mouse without wheel */
@@ -449,34 +451,18 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
/* send pad data */
if ( wacom->features->type == G4 )
{
- /* fist time sending pad data */
- if (wacom->tool[1] != BTN_TOOL_FINGER)
- {
- wacom->id[1] = 0;
- wacom->serial[1] = ( data[7] & 0x38 ) >> 2;
- }
- if ( data[7] & 0xf8 )
- {
+ if ( (wacom->serial[1] & 0xc0) != (data[7] & 0xf8) ) {
+ wacom->id[1] = 1;
+ wacom->serial[1] = (data[7] & 0xf8);
input_report_key(dev, BTN_0, (data[7] & 0x40));
input_report_key(dev, BTN_4, (data[7] & 0x80));
- if ( (( data[7] & 0x38 ) >> 2) == (wacom->serial[1] & 0x0e) )
- /* alter REL_WHEEL value so X apps can get it */
- wacom->serial[1] += (wacom->serial[1] & 0x01) ? -1 : 1 ;
- else
- wacom->serial[1] = (data[7] & 0x38 ) >> 2;
- /* don't alter the value when there is no wheel event */
- if ( wacom->serial[1] == 1 ) wacom->serial[1] = 0;
- rw = wacom->serial[1];
- rw = ( rw & 0x08 ) ? -( rw & 0x07 ) : ( rw & 0x07 );
+ rw = ((data[7] & 0x18) >> 3) - ((data[7] & 0x20) >> 3);
input_report_rel(dev, REL_WHEEL, rw);
- wacom->tool[1] = BTN_TOOL_FINGER;
- wacom->id[1] = data[7] & 0xf8;
- input_report_key(dev, wacom->tool[1], 0xf0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0xf0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
} else if ( wacom->id[1] ) {
wacom->id[1] = 0;
- wacom->serial[1] = 0;
- input_report_key(dev, wacom->tool[1], 0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
}
input_sync(dev);
@@ -739,8 +725,8 @@ static void wacom_intuos_irq(struct urb *urb, struct pt_regs *regs)
input_report_key(dev, BTN_LEFT, data[8] & 0x04);
input_report_key(dev, BTN_MIDDLE, data[8] & 0x08);
input_report_key(dev, BTN_RIGHT, data[8] & 0x10);
- input_report_rel(dev, REL_WHEEL, ((data[8] & 0x02) >> 1)
- - (data[8] & 0x01));
+ input_report_rel(dev, REL_WHEEL, (data[8] & 0x01)
+ - ((data[8] & 0x02) >> 1));
/* I3 2D mouse side buttons */
if (wacom->features->type == INTUOS3)
diff --git a/src/2.6.4/wacom.c b/src/2.6.4/wacom.c
index 976b135..9b1d51f 100644
--- a/src/2.6.4/wacom.c
+++ b/src/2.6.4/wacom.c
@@ -382,6 +382,8 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
goto exit;
}
+ if (data[0] == 99) return; /* for Volito tablets */
+
if (data[0] != 2) {
dbg("wacom_graphire_irq: received unknown report #%d", data[0]);
goto exit;
@@ -406,10 +408,10 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
case 2: /* Mouse with wheel */
input_report_key(dev, BTN_MIDDLE, data[1] & 0x04);
if ( wacom->features->type == G4 ) {
- rw = data[7] & 0x04 ? -(data[7] & 0x03) : (data[7] & 0x03);
- input_report_rel(dev, REL_WHEEL, rw);
+ rw = data[7] & 0x04 ? (data[7] & 0x03)-4 : (data[7] & 0x03);
+ input_report_rel(dev, REL_WHEEL, -rw);
} else
- input_report_rel(dev, REL_WHEEL, (signed char) data[6]);
+ input_report_rel(dev, REL_WHEEL, -(signed char) data[6]);
/* fall through */
case 3: /* Mouse without wheel */
@@ -448,34 +450,18 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
/* send pad data */
if ( wacom->features->type == G4 )
{
- /* fist time sending pad data */
- if (wacom->tool[1] != BTN_TOOL_FINGER)
- {
- wacom->id[1] = 0;
- wacom->serial[1] = ( data[7] & 0x38 ) >> 2;
- }
- if ( data[7] & 0xf8 )
- {
+ if ( (wacom->serial[1] & 0xc0) != (data[7] & 0xf8) ) {
+ wacom->id[1] = 1;
+ wacom->serial[1] = (data[7] & 0xf8);
input_report_key(dev, BTN_0, (data[7] & 0x40));
input_report_key(dev, BTN_4, (data[7] & 0x80));
- if ( (( data[7] & 0x38 ) >> 2) == (wacom->serial[1] & 0x0e) )
- /* alter REL_WHEEL value so X apps can get it */
- wacom->serial[1] += (wacom->serial[1] & 0x01) ? -1 : 1 ;
- else
- wacom->serial[1] = (data[7] & 0x38 ) >> 2;
- /* don't alter the value when there is no wheel event */
- if ( wacom->serial[1] == 1 ) wacom->serial[1] = 0;
- rw = wacom->serial[1];
- rw = ( rw & 0x08 ) ? -( rw & 0x07 ) : ( rw & 0x07 );
+ rw = ((data[7] & 0x18) >> 3) - ((data[7] & 0x20) >> 3);
input_report_rel(dev, REL_WHEEL, rw);
- wacom->tool[1] = BTN_TOOL_FINGER;
- wacom->id[1] = data[7] & 0xf8;
- input_report_key(dev, wacom->tool[1], 0xf0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0xf0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
} else if ( wacom->id[1] ) {
wacom->id[1] = 0;
- wacom->serial[1] = 0;
- input_report_key(dev, wacom->tool[1], 0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
}
input_sync(dev);
diff --git a/src/2.6.5/wacom.c b/src/2.6.5/wacom.c
index 358b63b..37d36d4 100644
--- a/src/2.6.5/wacom.c
+++ b/src/2.6.5/wacom.c
@@ -380,6 +380,8 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
goto exit;
}
+ if (data[0] == 99) return; /* for Volito tablets */
+
if (data[0] != 2) {
dbg("wacom_graphire_irq: received unknown report #%d", data[0]);
goto exit;
@@ -404,10 +406,10 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
case 2: /* Mouse with wheel */
input_report_key(dev, BTN_MIDDLE, data[1] & 0x04);
if ( wacom->features->type == G4 ) {
- rw = data[7] & 0x04 ? -(data[7] & 0x03) : (data[7] & 0x03);
- input_report_rel(dev, REL_WHEEL, rw);
+ rw = data[7] & 0x04 ? (data[7] & 0x03)-4 : (data[7] & 0x03);
+ input_report_rel(dev, REL_WHEEL, -rw);
} else
- input_report_rel(dev, REL_WHEEL, (signed char) data[6]);
+ input_report_rel(dev, REL_WHEEL, -(signed char) data[6]);
/* fall through */
case 3: /* Mouse without wheel */
@@ -446,34 +448,18 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
/* send pad data */
if ( wacom->features->type == G4 )
{
- /* fist time sending pad data */
- if (wacom->tool[1] != BTN_TOOL_FINGER)
- {
- wacom->id[1] = 0;
- wacom->serial[1] = ( data[7] & 0x38 ) >> 2;
- }
- if ( data[7] & 0xf8 )
- {
+ if ( (wacom->serial[1] & 0xc0) != (data[7] & 0xf8) ) {
+ wacom->id[1] = 1;
+ wacom->serial[1] = (data[7] & 0xf8);
input_report_key(dev, BTN_0, (data[7] & 0x40));
input_report_key(dev, BTN_4, (data[7] & 0x80));
- if ( (( data[7] & 0x38 ) >> 2) == (wacom->serial[1] & 0x0e) )
- /* alter REL_WHEEL value so X apps can get it */
- wacom->serial[1] += (wacom->serial[1] & 0x01) ? -1 : 1 ;
- else
- wacom->serial[1] = (data[7] & 0x38 ) >> 2;
- /* don't alter the value when there is no wheel event */
- if ( wacom->serial[1] == 1 ) wacom->serial[1] = 0;
- rw = wacom->serial[1];
- rw = ( rw & 0x08 ) ? -( rw & 0x07 ) : ( rw & 0x07 );
+ rw = ((data[7] & 0x18) >> 3) - ((data[7] & 0x20) >> 3);
input_report_rel(dev, REL_WHEEL, rw);
- wacom->tool[1] = BTN_TOOL_FINGER;
- wacom->id[1] = data[7] & 0xf8;
- input_report_key(dev, wacom->tool[1], 0xf0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0xf0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
} else if ( wacom->id[1] ) {
wacom->id[1] = 0;
- wacom->serial[1] = 0;
- input_report_key(dev, wacom->tool[1], 0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
}
input_sync(dev);
@@ -736,8 +722,8 @@ static void wacom_intuos_irq(struct urb *urb, struct pt_regs *regs)
input_report_key(dev, BTN_LEFT, data[8] & 0x04);
input_report_key(dev, BTN_MIDDLE, data[8] & 0x08);
input_report_key(dev, BTN_RIGHT, data[8] & 0x10);
- input_report_rel(dev, REL_WHEEL, ((data[8] & 0x02) >> 1)
- - (data[8] & 0x01));
+ input_report_rel(dev, REL_WHEEL, (data[8] & 0x01)
+ - ((data[8] & 0x02) >> 1));
/* I3 2D mouse side buttons */
if (wacom->features->type == INTUOS3)
diff --git a/src/2.6.6/wacom.c b/src/2.6.6/wacom.c
index 7484e05..4e0b103 100644
--- a/src/2.6.6/wacom.c
+++ b/src/2.6.6/wacom.c
@@ -382,6 +382,8 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
goto exit;
}
+ if (data[0] == 99) return; /* for Volito tablets */
+
if (data[0] != 2) {
dbg("wacom_graphire_irq: received unknown report #%d", data[0]);
goto exit;
@@ -406,10 +408,10 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
case 2: /* Mouse with wheel */
input_report_key(dev, BTN_MIDDLE, data[1] & 0x04);
if ( wacom->features->type == G4 ) {
- rw = data[7] & 0x04 ? -(data[7] & 0x03) : (data[7] & 0x03);
- input_report_rel(dev, REL_WHEEL, rw);
+ rw = data[7] & 0x04 ? (data[7] & 0x03)-4 : (data[7] & 0x03);
+ input_report_rel(dev, REL_WHEEL, -rw);
} else
- input_report_rel(dev, REL_WHEEL, (signed char) data[6]);
+ input_report_rel(dev, REL_WHEEL, -(signed char) data[6]);
/* fall through */
case 3: /* Mouse without wheel */
@@ -449,34 +451,18 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
/* send pad data */
if ( wacom->features->type == G4 )
{
- /* fist time sending pad data */
- if (wacom->tool[1] != BTN_TOOL_FINGER)
- {
- wacom->id[1] = 0;
- wacom->serial[1] = ( data[7] & 0x38 ) >> 2;
- }
- if ( data[7] & 0xf8 )
- {
+ if ( (wacom->serial[1] & 0xc0) != (data[7] & 0xf8) ) {
+ wacom->id[1] = 1;
+ wacom->serial[1] = (data[7] & 0xf8);
input_report_key(dev, BTN_0, (data[7] & 0x40));
input_report_key(dev, BTN_4, (data[7] & 0x80));
- if ( (( data[7] & 0x38 ) >> 2) == (wacom->serial[1] & 0x0e) )
- /* alter REL_WHEEL value so X apps can get it */
- wacom->serial[1] += (wacom->serial[1] & 0x01) ? -1 : 1 ;
- else
- wacom->serial[1] = (data[7] & 0x38 ) >> 2;
- /* don't alter the value when there is no wheel event */
- if ( wacom->serial[1] == 1 ) wacom->serial[1] = 0;
- rw = wacom->serial[1];
- rw = ( rw & 0x08 ) ? -( rw & 0x07 ) : ( rw & 0x07 );
+ rw = ((data[7] & 0x18) >> 3) - ((data[7] & 0x20) >> 3);
input_report_rel(dev, REL_WHEEL, rw);
- wacom->tool[1] = BTN_TOOL_FINGER;
- wacom->id[1] = data[7] & 0xf8;
- input_report_key(dev, wacom->tool[1], 0xf0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0xf0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
} else if ( wacom->id[1] ) {
wacom->id[1] = 0;
- wacom->serial[1] = 0;
- input_report_key(dev, wacom->tool[1], 0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
}
input_sync(dev);
@@ -739,8 +725,8 @@ static void wacom_intuos_irq(struct urb *urb, struct pt_regs *regs)
input_report_key(dev, BTN_LEFT, data[8] & 0x04);
input_report_key(dev, BTN_MIDDLE, data[8] & 0x08);
input_report_key(dev, BTN_RIGHT, data[8] & 0x10);
- input_report_rel(dev, REL_WHEEL, ((data[8] & 0x02) >> 1)
- - (data[8] & 0x01));
+ input_report_rel(dev, REL_WHEEL, (data[8] & 0x01)
+ - ((data[8] & 0x02) >> 1));
/* I3 2D mouse side buttons */
if (wacom->features->type == INTUOS3)
diff --git a/src/2.6.7/wacom.c b/src/2.6.7/wacom.c
index fbe4e22..1a03ddc 100644
--- a/src/2.6.7/wacom.c
+++ b/src/2.6.7/wacom.c
@@ -381,6 +381,8 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
goto exit;
}
+ if (data[0] == 99) return; /* for Volito tablets */
+
if (data[0] != 2) {
dbg("wacom_graphire_irq: received unknown report #%d", data[0]);
goto exit;
@@ -405,10 +407,10 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
case 2: /* Mouse with wheel */
input_report_key(dev, BTN_MIDDLE, data[1] & 0x04);
if ( wacom->features->type == G4 ) {
- rw = data[7] & 0x04 ? -(data[7] & 0x03) : (data[7] & 0x03);
- input_report_rel(dev, REL_WHEEL, rw);
+ rw = data[7] & 0x04 ? (data[7] & 0x03)-4 : (data[7] & 0x03);
+ input_report_rel(dev, REL_WHEEL, -rw);
} else
- input_report_rel(dev, REL_WHEEL, (signed char) data[6]);
+ input_report_rel(dev, REL_WHEEL, -(signed char) data[6]);
/* fall through */
case 3: /* Mouse without wheel */
@@ -447,34 +449,18 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
/* send pad data */
if ( wacom->features->type == G4 )
{
- /* fist time sending pad data */
- if (wacom->tool[1] != BTN_TOOL_FINGER)
- {
- wacom->id[1] = 0;
- wacom->serial[1] = ( data[7] & 0x38 ) >> 2;
- }
- if ( data[7] & 0xf8 )
- {
+ if ( (wacom->serial[1] & 0xc0) != (data[7] & 0xf8) ) {
+ wacom->id[1] = 1;
+ wacom->serial[1] = (data[7] & 0xf8);
input_report_key(dev, BTN_0, (data[7] & 0x40));
input_report_key(dev, BTN_4, (data[7] & 0x80));
- if ( (( data[7] & 0x38 ) >> 2) == (wacom->serial[1] & 0x0e) )
- /* alter REL_WHEEL value so X apps can get it */
- wacom->serial[1] += (wacom->serial[1] & 0x01) ? -1 : 1 ;
- else
- wacom->serial[1] = (data[7] & 0x38 ) >> 2;
- /* don't alter the value when there is no wheel event */
- if ( wacom->serial[1] == 1 ) wacom->serial[1] = 0;
- rw = wacom->serial[1];
- rw = ( rw & 0x08 ) ? -( rw & 0x07 ) : ( rw & 0x07 );
+ rw = ((data[7] & 0x18) >> 3) - ((data[7] & 0x20) >> 3);
input_report_rel(dev, REL_WHEEL, rw);
- wacom->tool[1] = BTN_TOOL_FINGER;
- wacom->id[1] = data[7] & 0xf8;
- input_report_key(dev, wacom->tool[1], 0xf0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0xf0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
} else if ( wacom->id[1] ) {
wacom->id[1] = 0;
- wacom->serial[1] = 0;
- input_report_key(dev, wacom->tool[1], 0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
}
input_sync(dev);
@@ -737,8 +723,8 @@ static void wacom_intuos_irq(struct urb *urb, struct pt_regs *regs)
input_report_key(dev, BTN_LEFT, data[8] & 0x04);
input_report_key(dev, BTN_MIDDLE, data[8] & 0x08);
input_report_key(dev, BTN_RIGHT, data[8] & 0x10);
- input_report_rel(dev, REL_WHEEL, ((data[8] & 0x02) >> 1)
- - (data[8] & 0x01));
+ input_report_rel(dev, REL_WHEEL, (data[8] & 0x01)
+ - ((data[8] & 0x02) >> 1));
/* I3 2D mouse side buttons */
if (wacom->features->type == INTUOS3)
diff --git a/src/2.6.8/wacom.c b/src/2.6.8/wacom.c
index 85c6db4..ff0b75c 100644
--- a/src/2.6.8/wacom.c
+++ b/src/2.6.8/wacom.c
@@ -382,6 +382,8 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
goto exit;
}
+ if (data[0] == 99) return; /* for Volito tablets */
+
if (data[0] != 2) {
dbg("wacom_graphire_irq: received unknown report #%d", data[0]);
goto exit;
@@ -406,10 +408,10 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
case 2: /* Mouse with wheel */
input_report_key(dev, BTN_MIDDLE, data[1] & 0x04);
if ( wacom->features->type == G4 ) {
- rw = data[7] & 0x04 ? -(data[7] & 0x03) : (data[7] & 0x03);
- input_report_rel(dev, REL_WHEEL, rw);
+ rw = data[7] & 0x04 ? (data[7] & 0x03)-4 : (data[7] & 0x03);
+ input_report_rel(dev, REL_WHEEL, -rw);
} else
- input_report_rel(dev, REL_WHEEL, (signed char) data[6]);
+ input_report_rel(dev, REL_WHEEL, -(signed char) data[6]);
/* fall through */
case 3: /* Mouse without wheel */
@@ -448,34 +450,18 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
/* send pad data */
if ( wacom->features->type == G4 )
{
- /* fist time sending pad data */
- if (wacom->tool[1] != BTN_TOOL_FINGER)
- {
- wacom->id[1] = 0;
- wacom->serial[1] = ( data[7] & 0x38 ) >> 2;
- }
- if ( data[7] & 0xf8 )
- {
+ if ( (wacom->serial[1] & 0xc0) != (data[7] & 0xf8) ) {
+ wacom->id[1] = 1;
+ wacom->serial[1] = (data[7] & 0xf8);
input_report_key(dev, BTN_0, (data[7] & 0x40));
input_report_key(dev, BTN_4, (data[7] & 0x80));
- if ( (( data[7] & 0x38 ) >> 2) == (wacom->serial[1] & 0x0e) )
- /* alter REL_WHEEL value so X apps can get it */
- wacom->serial[1] += (wacom->serial[1] & 0x01) ? -1 : 1 ;
- else
- wacom->serial[1] = (data[7] & 0x38 ) >> 2;
- /* don't alter the value when there is no wheel event */
- if ( wacom->serial[1] == 1 ) wacom->serial[1] = 0;
- rw = wacom->serial[1];
- rw = ( rw & 0x08 ) ? -( rw & 0x07 ) : ( rw & 0x07 );
+ rw = ((data[7] & 0x18) >> 3) - ((data[7] & 0x20) >> 3);
input_report_rel(dev, REL_WHEEL, rw);
- wacom->tool[1] = BTN_TOOL_FINGER;
- wacom->id[1] = data[7] & 0xf8;
- input_report_key(dev, wacom->tool[1], 0xf0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0xf0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
} else if ( wacom->id[1] ) {
wacom->id[1] = 0;
- wacom->serial[1] = 0;
- input_report_key(dev, wacom->tool[1], 0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
}
input_sync(dev);
@@ -738,8 +724,8 @@ static void wacom_intuos_irq(struct urb *urb, struct pt_regs *regs)
input_report_key(dev, BTN_LEFT, data[8] & 0x04);
input_report_key(dev, BTN_MIDDLE, data[8] & 0x08);
input_report_key(dev, BTN_RIGHT, data[8] & 0x10);
- input_report_rel(dev, REL_WHEEL, ((data[8] & 0x02) >> 1)
- - (data[8] & 0x01));
+ input_report_rel(dev, REL_WHEEL, (data[8] & 0x01)
+ - ((data[8] & 0x02) >> 1));
/* I3 2D mouse side buttons */
if (wacom->features->type == INTUOS3)
diff --git a/src/2.6.9/wacom.c b/src/2.6.9/wacom.c
index 34d02a3..238b9f7 100644
--- a/src/2.6.9/wacom.c
+++ b/src/2.6.9/wacom.c
@@ -382,6 +382,8 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
goto exit;
}
+ if (data[0] == 99) return; /* for Volito tablets */
+
if (data[0] != 2) {
dbg("wacom_graphire_irq: received unknown report #%d", data[0]);
goto exit;
@@ -406,10 +408,10 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
case 2: /* Mouse with wheel */
input_report_key(dev, BTN_MIDDLE, data[1] & 0x04);
if ( wacom->features->type == G4 ) {
- rw = data[7] & 0x04 ? -(data[7] & 0x03) : (data[7] & 0x03);
- input_report_rel(dev, REL_WHEEL, rw);
+ rw = data[7] & 0x04 ? (data[7] & 0x03)-4 : (data[7] & 0x03);
+ input_report_rel(dev, REL_WHEEL, -rw);
} else
- input_report_rel(dev, REL_WHEEL, (signed char) data[6]);
+ input_report_rel(dev, REL_WHEEL, -(signed char) data[6]);
/* fall through */
case 3: /* Mouse without wheel */
@@ -448,34 +450,18 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
/* send pad data */
if ( wacom->features->type == G4 )
{
- /* fist time sending pad data */
- if (wacom->tool[1] != BTN_TOOL_FINGER)
- {
- wacom->id[1] = 0;
- wacom->serial[1] = ( data[7] & 0x38 ) >> 2;
- }
- if ( data[7] & 0xf8 )
- {
+ if ( (wacom->serial[1] & 0xc0) != (data[7] & 0xf8) ) {
+ wacom->id[1] = 1;
+ wacom->serial[1] = (data[7] & 0xf8);
input_report_key(dev, BTN_0, (data[7] & 0x40));
input_report_key(dev, BTN_4, (data[7] & 0x80));
- if ( (( data[7] & 0x38 ) >> 2) == (wacom->serial[1] & 0x0e) )
- /* alter REL_WHEEL value so X apps can get it */
- wacom->serial[1] += (wacom->serial[1] & 0x01) ? -1 : 1 ;
- else
- wacom->serial[1] = (data[7] & 0x38 ) >> 2;
- /* don't alter the value when there is no wheel event */
- if ( wacom->serial[1] == 1 ) wacom->serial[1] = 0;
- rw = wacom->serial[1];
- rw = ( rw & 0x08 ) ? -( rw & 0x07 ) : ( rw & 0x07 );
+ rw = ((data[7] & 0x18) >> 3) - ((data[7] & 0x20) >> 3);
input_report_rel(dev, REL_WHEEL, rw);
- wacom->tool[1] = BTN_TOOL_FINGER;
- wacom->id[1] = data[7] & 0xf8;
- input_report_key(dev, wacom->tool[1], 0xf0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0xf0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
} else if ( wacom->id[1] ) {
wacom->id[1] = 0;
- wacom->serial[1] = 0;
- input_report_key(dev, wacom->tool[1], 0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
}
input_sync(dev);
@@ -738,8 +724,8 @@ static void wacom_intuos_irq(struct urb *urb, struct pt_regs *regs)
input_report_key(dev, BTN_LEFT, data[8] & 0x04);
input_report_key(dev, BTN_MIDDLE, data[8] & 0x08);
input_report_key(dev, BTN_RIGHT, data[8] & 0x10);
- input_report_rel(dev, REL_WHEEL, ((data[8] & 0x02) >> 1)
- - (data[8] & 0x01));
+ input_report_rel(dev, REL_WHEEL, (data[8] & 0x01)
+ - ((data[8] & 0x02) >> 1));
/* I3 2D mouse side buttons */
if (wacom->features->type == INTUOS3)
diff --git a/src/2.6/wacom.c b/src/2.6/wacom.c
index 07ed0de..29159a4 100644
--- a/src/2.6/wacom.c
+++ b/src/2.6/wacom.c
@@ -381,6 +381,8 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
goto exit;
}
+ if (data[0] == 99) return; /* for Volito tablets */
+
if (data[0] != 2) {
dbg("wacom_graphire_irq: received unknown report #%d", data[0]);
goto exit;
@@ -405,10 +407,10 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
case 2: /* Mouse with wheel */
input_report_key(dev, BTN_MIDDLE, data[1] & 0x04);
if ( wacom->features->type == G4 ) {
- rw = data[7] & 0x04 ? -(data[7] & 0x03) : data[7] & 0x03;
- input_report_rel(dev, REL_WHEEL, rw);
+ rw = data[7] & 0x04 ? (data[7] & 0x03)-4 : data[7] & 0x03;
+ input_report_rel(dev, REL_WHEEL, -rw);
} else
- input_report_rel(dev, REL_WHEEL, (signed char) data[6]);
+ input_report_rel(dev, REL_WHEEL, -(signed char) data[6]);
/* fall through */
case 3: /* Mouse without wheel */
@@ -447,34 +449,18 @@ static void wacom_graphire_irq(struct urb *urb, struct pt_regs *regs)
/* send pad data */
if ( wacom->features->type == G4 )
{
- /* fist time sending pad data */
- if (wacom->tool[1] != BTN_TOOL_FINGER)
- {
- wacom->id[1] = 0;
- wacom->serial[1] = ( data[7] & 0x38 ) >> 2;
- }
- if ( data[7] & 0xf8 )
- {
+ if ( (wacom->serial[1] & 0xc0) != (data[7] & 0xf8) ) {
+ wacom->id[1] = 1;
+ wacom->serial[1] = (data[7] & 0xf8);
input_report_key(dev, BTN_0, (data[7] & 0x40));
input_report_key(dev, BTN_4, (data[7] & 0x80));
- if ( (( data[7] & 0x38 ) >> 2) == (wacom->serial[1] & 0x0e) )
- /* alter REL_WHEEL value so X apps can get it */
- wacom->serial[1] += (wacom->serial[1] & 0x01) ? -1 : 1 ;
- else
- wacom->serial[1] = (data[7] & 0x38 ) >> 2;
- /* don't alter the value when there is no wheel event */
- if ( wacom->serial[1] == 1 ) wacom->serial[1] = 0;
- rw = wacom->serial[1];
- rw = ( rw & 0x08 ) ? -( rw & 0x07 ) : ( rw & 0x07 );
+ rw = ((data[7] & 0x18) >> 3) - ((data[7] & 0x20) >> 3);
input_report_rel(dev, REL_WHEEL, rw);
- wacom->tool[1] = BTN_TOOL_FINGER;
- wacom->id[1] = data[7] & 0xf8;
- input_report_key(dev, wacom->tool[1], 0xf0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0xf0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
} else if ( wacom->id[1] ) {
wacom->id[1] = 0;
- wacom->serial[1] = 0;
- input_report_key(dev, wacom->tool[1], 0);
+ input_report_key(dev, BTN_TOOL_FINGER, 0);
input_event(dev, EV_MSC, MSC_SERIAL, 0xf0);
}
input_sync(dev);
@@ -737,8 +723,8 @@ static void wacom_intuos_irq(struct urb *urb, struct pt_regs *regs)
input_report_key(dev, BTN_LEFT, data[8] & 0x04);
input_report_key(dev, BTN_MIDDLE, data[8] & 0x08);
input_report_key(dev, BTN_RIGHT, data[8] & 0x10);
- input_report_rel(dev, REL_WHEEL, ((data[8] & 0x02) >> 1)
- - (data[8] & 0x01));
+ input_report_rel(dev, REL_WHEEL, (data[8] & 0x01)
+ - ((data[8] & 0x02) >> 1));
/* I3 2D mouse side buttons */
if (wacom->features->type == INTUOS3)
diff --git a/src/wcmUSB.c b/src/wcmUSB.c
index 54d4793..95f6278 100644
--- a/src/wcmUSB.c
+++ b/src/wcmUSB.c
@@ -1,6 +1,6 @@
/*
* Copyright 1995-2002 by Frederic Lepied, France. <Lepied@XFree86.org>
- * Copyright 2002-2005 by Ping Cheng, Wacom Technology. <pingc@wacom.com>
+ * Copyright 2002-2006 by Ping Cheng, Wacom Technology. <pingc@wacom.com>
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -696,7 +696,7 @@ static void usbParseChannel(WacomCommonPtr common, int channel, int serial)
else if (event->type == EV_REL)
{
if (event->code == REL_WHEEL)
- ds->relwheel = event->value;
+ ds->relwheel = -event->value;
else
ErrorF("wacom: rel event recv'd (%d)!\n", event->code);
}
diff --git a/src/xf86Wacom.c b/src/xf86Wacom.c
index 5ff9bbc..651721f 100644
--- a/src/xf86Wacom.c
+++ b/src/xf86Wacom.c
@@ -425,7 +425,7 @@ static void xf86WcmDevReadInput(LocalDevicePtr local)
void xf86WcmReadPacket(LocalDevicePtr local)
{
WacomCommonPtr common = ((WacomDevicePtr)(local->private))->common;
- int len, pos, cnt, remaining;
+ int len, pos, cnt, remaining, loop;
if (!common->wcmModel) return;
@@ -437,12 +437,20 @@ void xf86WcmReadPacket(LocalDevicePtr local)
common->bufpos, remaining));
/* fill buffer with as much data as we can handle */
- SYSCALL(len = xf86WcmRead(local->fd,
- common->buffer + common->bufpos, remaining));
+ len = xf86WcmRead(local->fd,
+ common->buffer + common->bufpos, remaining);
if (len <= 0)
{
ErrorF("Error reading wacom device : %s\n", strerror(errno));
+ /* In case of error, we assume the device has been disconnected
+ so we close it. We need to iterate over all wcmDevices to
+ actually close the device. */
+ for (loop=0; loop<common->wcmNumDevices; loop++)
+ {
+ if (common->wcmDevices[loop]->fd >= 0)
+ xf86WcmDevProc(common->wcmDevices[loop]->dev,DEVICE_OFF);
+ }
return;
}
@@ -514,7 +522,7 @@ static void xf86WcmDevClose(LocalDevicePtr local)
if (num == 1)
{
DBG(1,ErrorF("Closing device; uninitializing.\n"));
- SYSCALL(xf86WcmClose(local->fd));
+ xf86WcmClose(local->fd);
common->wcmInitialized = FALSE;
}
@@ -622,9 +630,10 @@ static int xf86WcmDevProc(DeviceIntPtr pWcm, int what)
DBG(1, ErrorF("xf86WcmProc fd=%d pWcm=%p what=ON\n",
local->fd, (void *)pWcm));
- if ((local->fd < 0) && (!xf86WcmDevOpen(pWcm)))
+ /* if ((local->fd < 0) && (!xf86WcmDevOpen(pWcm))) */
+ if (!xf86WcmDevOpen(pWcm))
{
- pWcm->inited = FALSE;
+ /* pWcm->inited = FALSE; */
return !Success;
}
xf86AddEnabledDevice(local);
@@ -1339,7 +1348,7 @@ static Bool xf86WcmInitDevice(LocalDevicePtr local)
if (local->fd >= 0)
{
DBG(1,ErrorF("Closing device\n"));
- SYSCALL(xf86WcmClose(local->fd));
+ xf86WcmClose(local->fd);
}
local->fd = -1;
return FALSE;
diff --git a/src/xsetwacom.c b/src/xsetwacom.c
index 66e28f5..b21cc27 100644
--- a/src/xsetwacom.c
+++ b/src/xsetwacom.c
@@ -2,7 +2,7 @@
** xsetwacom.c
**
** Copyright (C) 2003 - John E. Joganic
-** Copyright (C) 2004-2005 - Ping Cheng
+** Copyright (C) 2004-2006 - Ping Cheng
**
** This program is free software; you can redistribute it and/or
** modify it under the terms of the GNU Lesser General Public License
@@ -22,6 +22,7 @@
** 2003-05-02 0.0.1 - JEJ - created
** 2005-10-24 0.0.4 - PC - added Pad
** 2005-11-17 0.0.5 - PC - update mode code
+** 2006-02-27 0.0.6 - PC - fixed a typo
*
****************************************************************************/
@@ -256,7 +257,7 @@ static int ListDev(WACOMCONFIG *hConfig, char** argv)
{ WACOMDEVICETYPE_CURSOR, "cursor" },
{ WACOMDEVICETYPE_STYLUS, "stylus" },
{ WACOMDEVICETYPE_ERASER, "eraser" },
- { WACOMDEVICETYPE_STYLUS, "pad" }
+ { WACOMDEVICETYPE_PAD, "pad" }
};
if (*argv != NULL)