summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpingc <pingc>2005-09-16 19:21:03 +0000
committerpingc <pingc>2005-09-16 19:21:03 +0000
commit077b10c7457b5fbfd7c9d1c862e2422ea133377e (patch)
tree9bb78251e3efbf5d8bbf8db85912f9f2ebd5f6f2
parent81da644f03a9d1c46cc93205ba1016ea2def358e (diff)
downloadxf86-input-wacom-release-0.7.0.tar.gz
Reports USB tool IDrelease-0_7_0release-0.7.0
-rw-r--r--ChangeLog5
-rw-r--r--src/2.4.22/wacom.c8
-rw-r--r--src/2.4.30x86-64/wacom.c8
-rw-r--r--src/2.4/wacom.c8
-rw-r--r--src/2.6.10/wacom.c7
-rw-r--r--src/2.6.11/wacom.c7
-rw-r--r--src/2.6.2/wacom.c7
-rw-r--r--src/2.6.3/wacom.c7
-rw-r--r--src/2.6.4/wacom.c7
-rw-r--r--src/2.6.5/wacom.c7
-rw-r--r--src/2.6.6/wacom.c7
-rw-r--r--src/2.6.7/wacom.c7
-rw-r--r--src/2.6.8/wacom.c7
-rw-r--r--src/2.6.9/wacom.c7
-rw-r--r--src/2.6/wacom.c7
-rw-r--r--src/wcmCommon.c3
-rw-r--r--src/wcmISDV4.c6
-rw-r--r--src/wcmSerial.c12
-rw-r--r--src/wcmUSB.c8
-rw-r--r--src/xf86Wacom.h2
20 files changed, 89 insertions, 48 deletions
diff --git a/ChangeLog b/ChangeLog
index 67f48dd..a9005b2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2005-09-16 Ping Cheng <pingc@wacom.com>
+ * Fixed a P4 eraser bug
+ * Fixed an initial relative pressure bug (Fred)
+ * Reports USB tool ID
+
2005-09-09 Ping Cheng <pingc@wacom.com>
* Supports 16 button events for all tools
* Merged TabletPC button1 patch from Brent Baccala
diff --git a/src/2.4.22/wacom.c b/src/2.4.22/wacom.c
index 9692bf2..2883adb 100644
--- a/src/2.4.22/wacom.c
+++ b/src/2.4.22/wacom.c
@@ -1,5 +1,5 @@
/*
- * $Id: wacom.c,v 1.15 2005/08/18 18:45:39 pingc Exp $
+ * $Id: wacom.c,v 1.16 2005/09/16 19:21:04 pingc Exp $
*
* Copyright (c) 2000-2002 Vojtech Pavlik <vojtech@suse.cz>
* Copyright (c) 2000 Andreas Bach Aaen <abach@stofanet.dk>
@@ -378,7 +378,7 @@ static int wacom_intuos_inout(struct urb *urb)
struct wacom *wacom = urb->context;
unsigned char *data = wacom->data;
struct input_dev *dev = &wacom->dev;
- int idx;
+ int idx, type;
/* tool number */
idx = data[1] & 0x01;
@@ -396,7 +396,8 @@ static int wacom_intuos_inout(struct urb *urb)
(((__u32)data[2] << 4) | (data[3] >> 4)));
#endif
- switch ((((__u32)data[2] << 4) | (data[3] >> 4)))
+ type = ((__u32)data[2] << 4) | (data[3] >> 4);
+ switch (type)
{
case 0x812: /* Intuos2 ink pen XP-110-00A */
case 0x801: /* Intuos3 Inking pen */
@@ -445,6 +446,7 @@ static int wacom_intuos_inout(struct urb *urb)
default: /* Unknown tool */
wacom->tool[idx] = BTN_TOOL_PEN; break;
}
+ input_report_key(dev, wacom->tool[idx], type);
input_event(dev, EV_MSC, MSC_SERIAL, wacom->serial[idx]);
return 1;
}
diff --git a/src/2.4.30x86-64/wacom.c b/src/2.4.30x86-64/wacom.c
index 7ac98ae..f175e09 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.1 2005/08/18 18:45:39 pingc Exp $
+ * $Id: wacom.c,v 1.2 2005/09/16 19:21:04 pingc Exp $
*
* Copyright (c) 2000-2002 Vojtech Pavlik <vojtech@suse.cz>
* Copyright (c) 2000 Andreas Bach Aaen <abach@stofanet.dk>
@@ -323,7 +323,7 @@ static int wacom_intuos_inout(struct urb *urb)
struct wacom *wacom = urb->context;
unsigned char *data = wacom->data;
struct input_dev *dev = &wacom->dev;
- int idx;
+ int idx, type;
/* tool number */
idx = data[1] & 0x01;
@@ -341,7 +341,8 @@ static int wacom_intuos_inout(struct urb *urb)
(((__u32)data[2] << 4) | (data[3] >> 4)));
#endif
- switch ((((__u32)data[2] << 4) | (data[3] >> 4)))
+ type = ((__u32)data[2] << 4) | (data[3] >> 4);
+ switch (type)
{
case 0x812: /* Intuos2 ink pen XP-110-00A */
case 0x801: /* Intuos3 Inking pen */
@@ -390,6 +391,7 @@ static int wacom_intuos_inout(struct urb *urb)
default: /* Unknown tool */
wacom->tool[idx] = BTN_TOOL_PEN; break;
}
+ input_report_key(dev, wacom->tool[idx], type);
input_event(dev, EV_MSC, MSC_SERIAL, wacom->serial[idx]);
return 1;
}
diff --git a/src/2.4/wacom.c b/src/2.4/wacom.c
index 1d9f244..e205445 100644
--- a/src/2.4/wacom.c
+++ b/src/2.4/wacom.c
@@ -1,5 +1,5 @@
/*
- * $Id: wacom.c,v 1.16 2005/08/18 18:45:39 pingc Exp $
+ * $Id: wacom.c,v 1.17 2005/09/16 19:21:04 pingc Exp $
*
* Copyright (c) 2000-2002 Vojtech Pavlik <vojtech@suse.cz>
* Copyright (c) 2000 Andreas Bach Aaen <abach@stofanet.dk>
@@ -378,7 +378,7 @@ static int wacom_intuos_inout(struct urb *urb)
struct wacom *wacom = urb->context;
unsigned char *data = wacom->data;
struct input_dev *dev = &wacom->dev;
- int idx;
+ int idx, type;
/* tool number */
idx = data[1] & 0x01;
@@ -396,7 +396,8 @@ static int wacom_intuos_inout(struct urb *urb)
(((__u32)data[2] << 4) | (data[3] >> 4)));
#endif
- switch ((((__u32)data[2] << 4) | (data[3] >> 4)))
+ type = ((__u32)data[2] << 4) | (data[3] >> 4);
+ switch (type)
{
case 0x812: /* Intuos2 ink pen XP-110-00A */
case 0x801: /* Intuos3 Inking pen */
@@ -445,6 +446,7 @@ static int wacom_intuos_inout(struct urb *urb)
default: /* Unknown tool */
wacom->tool[idx] = BTN_TOOL_PEN; break;
}
+ input_report_key(dev, wacom->tool[idx], type);
input_event(dev, EV_MSC, MSC_SERIAL, wacom->serial[idx]);
return 1;
}
diff --git a/src/2.6.10/wacom.c b/src/2.6.10/wacom.c
index 334a006..2fbba17 100644
--- a/src/2.6.10/wacom.c
+++ b/src/2.6.10/wacom.c
@@ -410,7 +410,7 @@ static int wacom_intuos_inout(struct urb *urb)
struct wacom *wacom = urb->context;
unsigned char *data = wacom->data;
struct input_dev *dev = &wacom->dev;
- int idx;
+ int idx, type;
/* tool number */
idx = data[1] & 0x01;
@@ -423,7 +423,8 @@ static int wacom_intuos_inout(struct urb *urb)
(data[4] << 20) + ((__u32)data[5] << 12) +
(data[6] << 4) + (data[7] >> 4);
- switch ((data[2] << 4) | (data[3] >> 4)) {
+ type = (data[2] << 4) | (data[3] >> 4);
+ switch (type)) {
case 0x812: /* Inking pen */
case 0x801: /* Intuos3 Inking pen */
case 0x012:
@@ -471,7 +472,7 @@ static int wacom_intuos_inout(struct urb *urb)
default: /* Unknown tool */
wacom->tool[idx] = BTN_TOOL_PEN;
}
- input_report_key(dev, wacom->tool[idx], 1);
+ input_report_key(dev, wacom->tool[idx], type);
input_event(dev, EV_MSC, MSC_SERIAL, wacom->serial[idx]);
input_sync(dev);
return 1;
diff --git a/src/2.6.11/wacom.c b/src/2.6.11/wacom.c
index 5e1e0e0..c81bced 100644
--- a/src/2.6.11/wacom.c
+++ b/src/2.6.11/wacom.c
@@ -412,7 +412,7 @@ static int wacom_intuos_inout(struct urb *urb)
struct wacom *wacom = urb->context;
unsigned char *data = wacom->data;
struct input_dev *dev = &wacom->dev;
- int idx;
+ int idx, type;
/* tool number */
idx = data[1] & 0x01;
@@ -425,7 +425,8 @@ static int wacom_intuos_inout(struct urb *urb)
(data[4] << 20) + (data[5] << 12) +
(data[6] << 4) + (data[7] >> 4);
- switch ((data[2] << 4) | (data[3] >> 4)) {
+ type = (data[2] << 4) | (data[3] >> 4);
+ switch (type) {
case 0x812: /* Inking pen */
case 0x801: /* Intuos3 Inking pen */
case 0x012:
@@ -473,7 +474,7 @@ static int wacom_intuos_inout(struct urb *urb)
default: /* Unknown tool */
wacom->tool[idx] = BTN_TOOL_PEN;
}
- input_report_key(dev, wacom->tool[idx], 1);
+ input_report_key(dev, wacom->tool[idx], type);
input_event(dev, EV_MSC, MSC_SERIAL, wacom->serial[idx]);
input_sync(dev);
return 1;
diff --git a/src/2.6.2/wacom.c b/src/2.6.2/wacom.c
index 9a63f6e..4660e3f 100644
--- a/src/2.6.2/wacom.c
+++ b/src/2.6.2/wacom.c
@@ -407,7 +407,7 @@ static int wacom_intuos_inout(struct urb *urb)
struct wacom *wacom = urb->context;
unsigned char *data = wacom->data;
struct input_dev *dev = &wacom->dev;
- int idx;
+ int idx, type;
/* tool number */
idx = data[1] & 0x01;
@@ -420,7 +420,8 @@ static int wacom_intuos_inout(struct urb *urb)
(data[4] << 20) + (data[5] << 12) +
(data[6] << 4) + (data[7] >> 4);
- switch ((data[2] << 4) | (data[3] >> 4)) {
+ type = (data[2] << 4) | (data[3] >> 4);
+ switch (type) {
case 0x812: /* Inking pen */
case 0x801: /* Intuos3 Inking pen */
case 0x012:
@@ -468,7 +469,7 @@ static int wacom_intuos_inout(struct urb *urb)
default: /* Unknown tool */
wacom->tool[idx] = BTN_TOOL_PEN;
}
- input_report_key(dev, wacom->tool[idx], 1);
+ input_report_key(dev, wacom->tool[idx], type);
input_event(dev, EV_MSC, MSC_SERIAL, wacom->serial[idx]);
input_sync(dev);
return 1;
diff --git a/src/2.6.3/wacom.c b/src/2.6.3/wacom.c
index a9dd7eb..52d2cad 100644
--- a/src/2.6.3/wacom.c
+++ b/src/2.6.3/wacom.c
@@ -412,7 +412,7 @@ static int wacom_intuos_inout(struct urb *urb)
struct wacom *wacom = urb->context;
unsigned char *data = wacom->data;
struct input_dev *dev = &wacom->dev;
- int idx;
+ int idx, type;
/* tool number */
idx = data[1] & 0x01;
@@ -425,7 +425,8 @@ static int wacom_intuos_inout(struct urb *urb)
(data[4] << 20) + (data[5] << 12) +
(data[6] << 4) + (data[7] >> 4);
- switch ((data[2] << 4) | (data[3] >> 4)) {
+ type = (data[2] << 4) | (data[3] >> 4);
+ switch (type) {
case 0x812: /* Inking pen */
case 0x801: /* Intuos3 Inking pen */
case 0x012:
@@ -473,7 +474,7 @@ static int wacom_intuos_inout(struct urb *urb)
default: /* Unknown tool */
wacom->tool[idx] = BTN_TOOL_PEN;
}
- input_report_key(dev, wacom->tool[idx], 1);
+ input_report_key(dev, wacom->tool[idx], type);
input_event(dev, EV_MSC, MSC_SERIAL, wacom->serial[idx]);
input_sync(dev);
return 1;
diff --git a/src/2.6.4/wacom.c b/src/2.6.4/wacom.c
index 475bf6a..3989903 100644
--- a/src/2.6.4/wacom.c
+++ b/src/2.6.4/wacom.c
@@ -411,7 +411,7 @@ static int wacom_intuos_inout(struct urb *urb)
struct wacom *wacom = urb->context;
unsigned char *data = wacom->data;
struct input_dev *dev = &wacom->dev;
- int idx;
+ int idx, type;
/* tool number */
idx = data[1] & 0x01;
@@ -424,7 +424,8 @@ static int wacom_intuos_inout(struct urb *urb)
(data[4] << 20) + (data[5] << 12) +
(data[6] << 4) + (data[7] >> 4);
- switch ((data[2] << 4) | (data[3] >> 4)) {
+ type = (data[2] << 4) | (data[3] >> 4);
+ switch (type) {
case 0x812: /* Inking pen */
case 0x801: /* Intuos3 Inking pen */
case 0x012:
@@ -472,7 +473,7 @@ static int wacom_intuos_inout(struct urb *urb)
default: /* Unknown tool */
wacom->tool[idx] = BTN_TOOL_PEN;
}
- input_report_key(dev, wacom->tool[idx], 1);
+ input_report_key(dev, wacom->tool[idx], type);
input_event(dev, EV_MSC, MSC_SERIAL, wacom->serial[idx]);
input_sync(dev);
return 1;
diff --git a/src/2.6.5/wacom.c b/src/2.6.5/wacom.c
index 644f127..9ef3919 100644
--- a/src/2.6.5/wacom.c
+++ b/src/2.6.5/wacom.c
@@ -409,7 +409,7 @@ static int wacom_intuos_inout(struct urb *urb)
struct wacom *wacom = urb->context;
unsigned char *data = wacom->data;
struct input_dev *dev = &wacom->dev;
- int idx;
+ int idx, type;
/* tool number */
idx = data[1] & 0x01;
@@ -422,7 +422,8 @@ static int wacom_intuos_inout(struct urb *urb)
(data[4] << 20) + (data[5] << 12) +
(data[6] << 4) + (data[7] >> 4);
- switch ((data[2] << 4) | (data[3] >> 4)) {
+ type = (data[2] << 4) | (data[3] >> 4);
+ switch (type) {
case 0x812: /* Inking pen */
case 0x801: /* Intuos3 Inking pen */
case 0x012:
@@ -470,7 +471,7 @@ static int wacom_intuos_inout(struct urb *urb)
default: /* Unknown tool */
wacom->tool[idx] = BTN_TOOL_PEN;
}
- input_report_key(dev, wacom->tool[idx], 1);
+ input_report_key(dev, wacom->tool[idx], type);
input_event(dev, EV_MSC, MSC_SERIAL, wacom->serial[idx]);
input_sync(dev);
return 1;
diff --git a/src/2.6.6/wacom.c b/src/2.6.6/wacom.c
index 8f3b378..e78a8fc 100644
--- a/src/2.6.6/wacom.c
+++ b/src/2.6.6/wacom.c
@@ -412,7 +412,7 @@ static int wacom_intuos_inout(struct urb *urb)
struct wacom *wacom = urb->context;
unsigned char *data = wacom->data;
struct input_dev *dev = &wacom->dev;
- int idx;
+ int idx, type;
/* tool number */
idx = data[1] & 0x01;
@@ -425,7 +425,8 @@ static int wacom_intuos_inout(struct urb *urb)
(data[4] << 20) + (data[5] << 12) +
(data[6] << 4) + (data[7] >> 4);
- switch ((data[2] << 4) | (data[3] >> 4)) {
+ type = (data[2] << 4) | (data[3] >> 4);
+ switch (type) {
case 0x812: /* Inking pen */
case 0x801: /* Intuos3 Inking pen */
case 0x012:
@@ -473,7 +474,7 @@ static int wacom_intuos_inout(struct urb *urb)
default: /* Unknown tool */
wacom->tool[idx] = BTN_TOOL_PEN;
}
- input_report_key(dev, wacom->tool[idx], 1);
+ input_report_key(dev, wacom->tool[idx], type);
input_event(dev, EV_MSC, MSC_SERIAL, wacom->serial[idx]);
input_sync(dev);
return 1;
diff --git a/src/2.6.7/wacom.c b/src/2.6.7/wacom.c
index faaf103..9739c15 100644
--- a/src/2.6.7/wacom.c
+++ b/src/2.6.7/wacom.c
@@ -411,7 +411,7 @@ static int wacom_intuos_inout(struct urb *urb)
struct wacom *wacom = urb->context;
unsigned char *data = wacom->data;
struct input_dev *dev = &wacom->dev;
- int idx;
+ int idx, type;
/* tool number */
idx = data[1] & 0x01;
@@ -424,7 +424,8 @@ static int wacom_intuos_inout(struct urb *urb)
(data[4] << 20) + (data[5] << 12) +
(data[6] << 4) + (data[7] >> 4);
- switch ((data[2] << 4) | (data[3] >> 4)) {
+ type = (data[2] << 4) | (data[3] >> 4);
+ switch (type) {
case 0x812: /* Inking pen */
case 0x801: /* Intuos3 Inking pen */
case 0x012:
@@ -472,7 +473,7 @@ static int wacom_intuos_inout(struct urb *urb)
default: /* Unknown tool */
wacom->tool[idx] = BTN_TOOL_PEN;
}
- input_report_key(dev, wacom->tool[idx], 1);
+ input_report_key(dev, wacom->tool[idx], type);
input_event(dev, EV_MSC, MSC_SERIAL, wacom->serial[idx]);
input_sync(dev);
return 1;
diff --git a/src/2.6.8/wacom.c b/src/2.6.8/wacom.c
index ce482a5..6fc4dba 100644
--- a/src/2.6.8/wacom.c
+++ b/src/2.6.8/wacom.c
@@ -411,7 +411,7 @@ static int wacom_intuos_inout(struct urb *urb)
struct wacom *wacom = urb->context;
unsigned char *data = wacom->data;
struct input_dev *dev = &wacom->dev;
- int idx;
+ int idx, type;
/* tool number */
idx = data[1] & 0x01;
@@ -424,7 +424,8 @@ static int wacom_intuos_inout(struct urb *urb)
(data[4] << 20) + (data[5] << 12) +
(data[6] << 4) + (data[7] >> 4);
- switch ((data[2] << 4) | (data[3] >> 4)) {
+ type = (data[2] << 4) | (data[3] >> 4);
+ switch (type) {
case 0x812: /* Inking pen */
case 0x801: /* Intuos3 Inking pen */
case 0x012:
@@ -472,7 +473,7 @@ static int wacom_intuos_inout(struct urb *urb)
default: /* Unknown tool */
wacom->tool[idx] = BTN_TOOL_PEN;
}
- input_report_key(dev, wacom->tool[idx], 1);
+ input_report_key(dev, wacom->tool[idx], type);
input_event(dev, EV_MSC, MSC_SERIAL, wacom->serial[idx]);
input_sync(dev);
return 1;
diff --git a/src/2.6.9/wacom.c b/src/2.6.9/wacom.c
index 865cb83..4267467 100644
--- a/src/2.6.9/wacom.c
+++ b/src/2.6.9/wacom.c
@@ -411,7 +411,7 @@ static int wacom_intuos_inout(struct urb *urb)
struct wacom *wacom = urb->context;
unsigned char *data = wacom->data;
struct input_dev *dev = &wacom->dev;
- int idx;
+ int idx, type;
/* tool number */
idx = data[1] & 0x01;
@@ -424,7 +424,8 @@ static int wacom_intuos_inout(struct urb *urb)
(data[4] << 20) + (data[5] << 12) +
(data[6] << 4) + (data[7] >> 4);
- switch ((data[2] << 4) | (data[3] >> 4)) {
+ type = (data[2] << 4) | (data[3] >> 4);
+ switch (type) {
case 0x812: /* Inking pen */
case 0x801: /* Intuos3 Inking pen */
case 0x012:
@@ -472,7 +473,7 @@ static int wacom_intuos_inout(struct urb *urb)
default: /* Unknown tool */
wacom->tool[idx] = BTN_TOOL_PEN;
}
- input_report_key(dev, wacom->tool[idx], 1);
+ input_report_key(dev, wacom->tool[idx], type);
input_event(dev, EV_MSC, MSC_SERIAL, wacom->serial[idx]);
input_sync(dev);
return 1;
diff --git a/src/2.6/wacom.c b/src/2.6/wacom.c
index d8aa096..d0ebaa8 100644
--- a/src/2.6/wacom.c
+++ b/src/2.6/wacom.c
@@ -409,7 +409,7 @@ static int wacom_intuos_inout(struct urb *urb)
struct wacom *wacom = urb->context;
unsigned char *data = wacom->data;
struct input_dev *dev = &wacom->dev;
- int idx;
+ int idx, type;
/* tool number */
idx = data[1] & 0x01;
@@ -422,7 +422,8 @@ static int wacom_intuos_inout(struct urb *urb)
(data[4] << 20) + (data[5] << 12) +
(data[6] << 4) + (data[7] >> 4);
- switch ((data[2] << 4) | (data[3] >> 4)) {
+ type = (data[2] << 4) | (data[3] >> 4);
+ switch (type) {
case 0x812: /* Inking pen */
case 0x801: /* Intuos3 Inking pen */
case 0x012:
@@ -470,7 +471,7 @@ static int wacom_intuos_inout(struct urb *urb)
default: /* Unknown tool */
wacom->tool[idx] = BTN_TOOL_PEN;
}
- input_report_key(dev, wacom->tool[idx], 1);
+ input_report_key(dev, wacom->tool[idx], type);
input_event(dev, EV_MSC, MSC_SERIAL, wacom->serial[idx]);
input_sync(dev);
return 1;
diff --git a/src/wcmCommon.c b/src/wcmCommon.c
index 2a3dc76..1383d69 100644
--- a/src/wcmCommon.c
+++ b/src/wcmCommon.c
@@ -475,11 +475,13 @@ void xf86WcmSendEvents(LocalDevicePtr local, const WacomDeviceState* ds, unsigne
rx = x - priv->oldX;
ry = y - priv->oldY;
+ rz = z - priv->oldZ;
}
else
{
rx = 0;
ry = 0;
+ rz = z;
}
/* don't apply speed for fairly small increments */
@@ -516,7 +518,6 @@ void xf86WcmSendEvents(LocalDevicePtr local, const WacomDeviceState* ds, unsigne
}
ry *= param;
}
- rz = z - priv->oldZ;
rtx = tx - priv->oldTiltX;
rty = ty - priv->oldTiltY;
rrot = rot - priv->oldRot;
diff --git a/src/wcmISDV4.c b/src/wcmISDV4.c
index 07fe261..e6f9581 100644
--- a/src/wcmISDV4.c
+++ b/src/wcmISDV4.c
@@ -249,6 +249,12 @@ static int isdv4Parse(WacomCommonPtr common, const unsigned char* data)
}
}
+ /* don't send button 3 event for eraser
+ * button 1 event will be sent by testing presure level
+ */
+ if (ds->device_type == ERASER_ID && ds->buttons&4)
+ ds->buttons = 0;
+
DBG(8, ErrorF("isdv4Parse %s\n",
ds->device_type == ERASER_ID ? "ERASER " :
ds->device_type == STYLUS_ID ? "STYLUS" : "NONE"));
diff --git a/src/wcmSerial.c b/src/wcmSerial.c
index f956e70..bc615b6 100644
--- a/src/wcmSerial.c
+++ b/src/wcmSerial.c
@@ -596,7 +596,7 @@ static int serialParseGraphire(WacomCommonPtr common, const unsigned char* data)
((data[6]&ZAXIS_SIGN_BIT) ? 0 : 0x100);
/* get buttons */
- ds->buttons = (data[3] & 0x38) >> 3;
+ ds->buttons = (data[3] & BUTTONS_BITS) >> 3;
/* requires button info, so it goes down here. */
serialParseP4Common(common,data,last,ds);
@@ -645,7 +645,7 @@ static int serialParseCintiq(WacomCommonPtr common, const unsigned char* data)
}
/* get buttons */
- ds->buttons = (data[3] & 0x38) >> 3;
+ ds->buttons = (data[3] & BUTTONS_BITS) >> 3;
/* requires button info, so it goes down here. */
serialParseP4Common(common,data,last,ds);
@@ -1248,7 +1248,7 @@ static void serialParseP4Common(WacomCommonPtr common,
}
/* first time into prox */
- if (!last->proximity && ds->proximity)
+ if (!last->proximity && ds->proximity)
ds->device_type = cur_type;
/* check on previous proximity */
else if (is_stylus && ds->proximity)
@@ -1265,6 +1265,12 @@ static void serialParseP4Common(WacomCommonPtr common,
}
}
+ /* don't send button 3 event for eraser
+ * button 1 event will be sent by testing presure level
+ */
+ if (ds->device_type == ERASER_ID && ds->buttons&4)
+ ds->buttons = 0;
+
DBG(8, ErrorF("serialParseP4Common %s\n",
ds->device_type == CURSOR_ID ? "CURSOR" :
ds->device_type == ERASER_ID ? "ERASER " :
diff --git a/src/wcmUSB.c b/src/wcmUSB.c
index 6fae2c9..89f732f 100644
--- a/src/wcmUSB.c
+++ b/src/wcmUSB.c
@@ -667,6 +667,8 @@ static void usbParseChannel(WacomCommonPtr common, int channel, int serial)
{
ds->device_type = STYLUS_ID;
ds->proximity = (event->value != 0);
+ if (ds->proximity)
+ ds->device_id = event->value;
DBG(6, ErrorF("USB stylus detected %x\n",
event->code));
}
@@ -674,8 +676,10 @@ static void usbParseChannel(WacomCommonPtr common, int channel, int serial)
{
ds->device_type = ERASER_ID;
ds->proximity = (event->value != 0);
- if (ds->proximity)
+ if (ds->proximity) {
ds->proximity = ERASER_PROX;
+ ds->device_id = event->value;
+ }
DBG(6, ErrorF("USB eraser detected %x\n",
event->code));
}
@@ -686,6 +690,8 @@ static void usbParseChannel(WacomCommonPtr common, int channel, int serial)
event->code));
ds->device_type = CURSOR_ID;
ds->proximity = (event->value != 0);
+ if (ds->proximity)
+ ds->device_id = event->value;
}
else if (event->code == BTN_TOOL_FINGER)
{
diff --git a/src/xf86Wacom.h b/src/xf86Wacom.h
index cba0930..922de48 100644
--- a/src/xf86Wacom.h
+++ b/src/xf86Wacom.h
@@ -142,7 +142,7 @@
#define POINTER_BIT 0x20
#define PROXIMITY_BIT 0x40
#define BUTTON_FLAG 0x08
-#define BUTTONS_BITS 0x78
+#define BUTTONS_BITS 0x38
#define TILT_SIGN_BIT 0x40
#define TILT_BITS 0x3F