Continue re-organizing and trimming cases to make it easier to wrap
the brain around. A number of changes were made after consulting the
protocol spec and so don't necessarily follow from the code itself.

Signed-off-by: Jason Gerecke <jason.gere...@wacom.com>
Signed-off-by: Jiri Kosina <jkos...@suse.cz>
[jason.gere...@wacom.com: Imported into input-wacom repository (571f572)]
Signed-off-by: Jason Gerecke <jason.gere...@wacom.com>
[jason.gere...@wacom.com: backported from input-wacom 98e3aa5]
Signed-off-by: Jason Gerecke <jason.gere...@wacom.com>
---
 2.6.38/wacom_wac.c | 87 +++++++++++++++++++++++++-----------------------------
 3.7/wacom_wac.c    | 87 +++++++++++++++++++++++++-----------------------------
 2 files changed, 82 insertions(+), 92 deletions(-)

diff --git a/2.6.38/wacom_wac.c b/2.6.38/wacom_wac.c
index ee636e9..f960c4a 100644
--- a/2.6.38/wacom_wac.c
+++ b/2.6.38/wacom_wac.c
@@ -869,7 +869,6 @@ static int wacom_intuos_general(struct wacom_wac *wacom)
                break;
 
        case 0x0a:
-       case 0x0b:
                /* airbrush second packet */
                input_report_abs(input, ABS_WHEEL,
                                (data[6] << 2) | ((data[7] >> 6) & 3));
@@ -879,7 +878,6 @@ static int wacom_intuos_general(struct wacom_wac *wacom)
                break;
 
        case 0x05:
-       case 0x07:
                /* Rotation packet */
                if (features->type >= INTUOS3S) {
                        /* I3 marker pen rotation */
@@ -888,61 +886,56 @@ static int wacom_intuos_general(struct wacom_wac *wacom)
                                ((t-1) / 2 + 450)) : (450 - t / 2) ;
                        input_report_abs(input, ABS_Z, t);
                } else {
-                       /* 4D mouse rotation packet */
+                       /* 4D mouse 2nd packet */
                        t = (data[6] << 3) | ((data[7] >> 5) & 7);
                        input_report_abs(input, ABS_RZ, (data[7] & 0x20) ?
                                ((t - 1) / 2) : -t / 2);
                }
                break;
 
-       /* 4D mouse, 2D mouse, marker pen rotation, tilt mouse, or Lens cursor 
packets */
        case 0x04:
+               /* 4D mouse 1st packet */
+               input_report_key(input, BTN_LEFT,   data[8] & 0x01);
+               input_report_key(input, BTN_MIDDLE, data[8] & 0x02);
+               input_report_key(input, BTN_RIGHT,  data[8] & 0x04);
+
+               input_report_key(input, BTN_SIDE,   data[8] & 0x20);
+               input_report_key(input, BTN_EXTRA,  data[8] & 0x10);
+               t = (data[6] << 2) | ((data[7] >> 6) & 3);
+               input_report_abs(input, ABS_THROTTLE, (data[8] & 0x08) ? -t : 
t);
+               break;
+
        case 0x06:
-       case 0x08:
-               if (features->type < INTUOS3S && type != 0x08) {
-                       /* 4D mouse packet */
-                       input_report_key(input, BTN_LEFT,   data[8] & 0x01);
-                       input_report_key(input, BTN_MIDDLE, data[8] & 0x02);
-                       input_report_key(input, BTN_RIGHT,  data[8] & 0x04);
+               /* I4 mouse */
+               input_report_key(input, BTN_LEFT,   data[6] & 0x01);
+               input_report_key(input, BTN_MIDDLE, data[6] & 0x02);
+               input_report_key(input, BTN_RIGHT,  data[6] & 0x04);
+               input_report_rel(input, REL_WHEEL, ((data[7] & 0x80) >> 7)
+                                - ((data[7] & 0x40) >> 6));
+               input_report_key(input, BTN_SIDE,   data[6] & 0x08);
+               input_report_key(input, BTN_EXTRA,  data[6] & 0x10);
 
-                       input_report_key(input, BTN_SIDE,   data[8] & 0x20);
-                       input_report_key(input, BTN_EXTRA,  data[8] & 0x10);
-                       t = (data[6] << 2) | ((data[7] >> 6) & 3);
-                       input_report_abs(input, ABS_THROTTLE, (data[8] & 0x08) 
? -t : t);
-               }
-               else if (wacom->tool[idx] == BTN_TOOL_MOUSE) {
-                       /* I4 mouse */
-                       if (features->type >= INTUOS4S && features->type <= 
INTUOSPL) {
-                               input_report_key(input, BTN_LEFT,   data[6] & 
0x01);
-                               input_report_key(input, BTN_MIDDLE, data[6] & 
0x02);
-                               input_report_key(input, BTN_RIGHT,  data[6] & 
0x04);
-                               input_report_rel(input, REL_WHEEL, ((data[7] & 
0x80) >> 7)
-                                                - ((data[7] & 0x40) >> 6));
-                               input_report_key(input, BTN_SIDE,   data[6] & 
0x08);
-                               input_report_key(input, BTN_EXTRA,  data[6] & 
0x10);
-
-                               input_report_abs(input, ABS_TILT_X,
-                                       ((data[7] << 1) & 0x7e) | (data[8] >> 
7));
-                               input_report_abs(input, ABS_TILT_Y, data[8] & 
0x7f);
-                       } else {
-                               /* 2D mouse packet */
-                               input_report_key(input, BTN_LEFT,   data[8] & 
0x04);
-                               input_report_key(input, BTN_MIDDLE, data[8] & 
0x08);
-                               input_report_key(input, BTN_RIGHT,  data[8] & 
0x10);
-                               input_report_rel(input, REL_WHEEL, (data[8] & 
0x01)
-                                                - ((data[8] & 0x02) >> 1));
-
-                               /* I3 2D mouse side buttons */
-                               if (features->type >= INTUOS3S && 
features->type <= INTUOS3L) {
-                                       input_report_key(input, BTN_SIDE,   
data[8] & 0x40);
-                                       input_report_key(input, BTN_EXTRA,  
data[8] & 0x20);
-                               }
+               input_report_abs(input, ABS_TILT_X,
+                       ((data[7] << 1) & 0x7e) | (data[8] >> 7));
+               input_report_abs(input, ABS_TILT_Y, data[8] & 0x7f);
+               break;
+
+       case 0x08:
+               if (wacom->tool[idx] == BTN_TOOL_MOUSE) {
+                       /* 2D mouse packet */
+                       input_report_key(input, BTN_LEFT,   data[8] & 0x04);
+                       input_report_key(input, BTN_MIDDLE, data[8] & 0x08);
+                       input_report_key(input, BTN_RIGHT,  data[8] & 0x10);
+                       input_report_rel(input, REL_WHEEL, (data[8] & 0x01)
+                                        - ((data[8] & 0x02) >> 1));
+
+                       /* I3 2D mouse side buttons */
+                       if (features->type >= INTUOS3S && features->type <= 
INTUOS3L) {
+                               input_report_key(input, BTN_SIDE,   data[8] & 
0x40);
+                               input_report_key(input, BTN_EXTRA,  data[8] & 
0x20);
                        }
                }
-               else if ((features->type < INTUOS3S || features->type == 
INTUOS3L ||
-                         features->type == INTUOS4L || features->type == 
INTUOS5L ||
-                         features->type == INTUOSPL) &&
-                        wacom->tool[idx] == BTN_TOOL_LENS) {
+               else if (wacom->tool[idx] == BTN_TOOL_LENS) {
                        /* Lens cursor packets */
                        input_report_key(input, BTN_LEFT,   data[8] & 0x01);
                        input_report_key(input, BTN_MIDDLE, data[8] & 0x02);
@@ -952,7 +945,9 @@ static int wacom_intuos_general(struct wacom_wac *wacom)
                }
                break;
 
+       case 0x07:
        case 0x09:
+       case 0x0b:
        case 0x0c:
        case 0x0d:
        case 0x0e:
diff --git a/3.7/wacom_wac.c b/3.7/wacom_wac.c
index c85ddd0..613855a 100644
--- a/3.7/wacom_wac.c
+++ b/3.7/wacom_wac.c
@@ -871,7 +871,6 @@ static int wacom_intuos_general(struct wacom_wac *wacom)
                break;
 
        case 0x0a:
-       case 0x0b:
                /* airbrush second packet */
                input_report_abs(input, ABS_WHEEL,
                                (data[6] << 2) | ((data[7] >> 6) & 3));
@@ -881,7 +880,6 @@ static int wacom_intuos_general(struct wacom_wac *wacom)
                break;
 
        case 0x05:
-       case 0x07:
                /* Rotation packet */
                if (features->type >= INTUOS3S) {
                        /* I3 marker pen rotation */
@@ -890,61 +888,56 @@ static int wacom_intuos_general(struct wacom_wac *wacom)
                                ((t-1) / 2 + 450)) : (450 - t / 2) ;
                        input_report_abs(input, ABS_Z, t);
                } else {
-                       /* 4D mouse rotation packet */
+                       /* 4D mouse 2nd packet */
                        t = (data[6] << 3) | ((data[7] >> 5) & 7);
                        input_report_abs(input, ABS_RZ, (data[7] & 0x20) ?
                                ((t - 1) / 2) : -t / 2);
                }
                break;
 
-       /* 4D mouse, 2D mouse, marker pen rotation, tilt mouse, or Lens cursor 
packets */
        case 0x04:
+               /* 4D mouse 1st packet */
+               input_report_key(input, BTN_LEFT,   data[8] & 0x01);
+               input_report_key(input, BTN_MIDDLE, data[8] & 0x02);
+               input_report_key(input, BTN_RIGHT,  data[8] & 0x04);
+
+               input_report_key(input, BTN_SIDE,   data[8] & 0x20);
+               input_report_key(input, BTN_EXTRA,  data[8] & 0x10);
+               t = (data[6] << 2) | ((data[7] >> 6) & 3);
+               input_report_abs(input, ABS_THROTTLE, (data[8] & 0x08) ? -t : 
t);
+               break;
+
        case 0x06:
-       case 0x08:
-               if (features->type < INTUOS3S && type != 0x08) {
-                       /* 4D mouse packet */
-                       input_report_key(input, BTN_LEFT,   data[8] & 0x01);
-                       input_report_key(input, BTN_MIDDLE, data[8] & 0x02);
-                       input_report_key(input, BTN_RIGHT,  data[8] & 0x04);
+               /* I4 mouse */
+               input_report_key(input, BTN_LEFT,   data[6] & 0x01);
+               input_report_key(input, BTN_MIDDLE, data[6] & 0x02);
+               input_report_key(input, BTN_RIGHT,  data[6] & 0x04);
+               input_report_rel(input, REL_WHEEL, ((data[7] & 0x80) >> 7)
+                                - ((data[7] & 0x40) >> 6));
+               input_report_key(input, BTN_SIDE,   data[6] & 0x08);
+               input_report_key(input, BTN_EXTRA,  data[6] & 0x10);
 
-                       input_report_key(input, BTN_SIDE,   data[8] & 0x20);
-                       input_report_key(input, BTN_EXTRA,  data[8] & 0x10);
-                       t = (data[6] << 2) | ((data[7] >> 6) & 3);
-                       input_report_abs(input, ABS_THROTTLE, (data[8] & 0x08) 
? -t : t);
-               }
-               else if (wacom->tool[idx] == BTN_TOOL_MOUSE) {
-                       /* I4 mouse */
-                       if (features->type >= INTUOS4S && features->type <= 
INTUOSPL) {
-                               input_report_key(input, BTN_LEFT,   data[6] & 
0x01);
-                               input_report_key(input, BTN_MIDDLE, data[6] & 
0x02);
-                               input_report_key(input, BTN_RIGHT,  data[6] & 
0x04);
-                               input_report_rel(input, REL_WHEEL, ((data[7] & 
0x80) >> 7)
-                                                - ((data[7] & 0x40) >> 6));
-                               input_report_key(input, BTN_SIDE,   data[6] & 
0x08);
-                               input_report_key(input, BTN_EXTRA,  data[6] & 
0x10);
-
-                               input_report_abs(input, ABS_TILT_X,
-                                       ((data[7] << 1) & 0x7e) | (data[8] >> 
7));
-                               input_report_abs(input, ABS_TILT_Y, data[8] & 
0x7f);
-                       } else {
-                               /* 2D mouse packet */
-                               input_report_key(input, BTN_LEFT,   data[8] & 
0x04);
-                               input_report_key(input, BTN_MIDDLE, data[8] & 
0x08);
-                               input_report_key(input, BTN_RIGHT,  data[8] & 
0x10);
-                               input_report_rel(input, REL_WHEEL, (data[8] & 
0x01)
-                                                - ((data[8] & 0x02) >> 1));
-
-                               /* I3 2D mouse side buttons */
-                               if (features->type >= INTUOS3S && 
features->type <= INTUOS3L) {
-                                       input_report_key(input, BTN_SIDE,   
data[8] & 0x40);
-                                       input_report_key(input, BTN_EXTRA,  
data[8] & 0x20);
-                               }
+               input_report_abs(input, ABS_TILT_X,
+                       ((data[7] << 1) & 0x7e) | (data[8] >> 7));
+               input_report_abs(input, ABS_TILT_Y, data[8] & 0x7f);
+               break;
+
+       case 0x08:
+               if (wacom->tool[idx] == BTN_TOOL_MOUSE) {
+                       /* 2D mouse packet */
+                       input_report_key(input, BTN_LEFT,   data[8] & 0x04);
+                       input_report_key(input, BTN_MIDDLE, data[8] & 0x08);
+                       input_report_key(input, BTN_RIGHT,  data[8] & 0x10);
+                       input_report_rel(input, REL_WHEEL, (data[8] & 0x01)
+                                        - ((data[8] & 0x02) >> 1));
+
+                       /* I3 2D mouse side buttons */
+                       if (features->type >= INTUOS3S && features->type <= 
INTUOS3L) {
+                               input_report_key(input, BTN_SIDE,   data[8] & 
0x40);
+                               input_report_key(input, BTN_EXTRA,  data[8] & 
0x20);
                        }
                }
-               else if ((features->type < INTUOS3S || features->type == 
INTUOS3L ||
-                         features->type == INTUOS4L || features->type == 
INTUOS5L ||
-                         features->type == INTUOSPL) &&
-                        wacom->tool[idx] == BTN_TOOL_LENS) {
+               else if (wacom->tool[idx] == BTN_TOOL_LENS) {
                        /* Lens cursor packets */
                        input_report_key(input, BTN_LEFT,   data[8] & 0x01);
                        input_report_key(input, BTN_MIDDLE, data[8] & 0x02);
@@ -954,7 +947,9 @@ static int wacom_intuos_general(struct wacom_wac *wacom)
                }
                break;
 
+       case 0x07:
        case 0x09:
+       case 0x0b:
        case 0x0c:
        case 0x0d:
        case 0x0e:
-- 
2.7.1


------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to