summaryrefslogtreecommitdiff
path: root/src/hwdata.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/hwdata.c')
-rw-r--r--src/hwdata.c33
1 files changed, 13 insertions, 20 deletions
diff --git a/src/hwdata.c b/src/hwdata.c
index cd93fe0..aa4c271 100644
--- a/src/hwdata.c
+++ b/src/hwdata.c
@@ -15,7 +15,12 @@ bool read_hwdata(struct HWData *hw, const struct input_event* ev)
15 case EV_SYN: 15 case EV_SYN:
16 switch (ev->code) { 16 switch (ev->code) {
17 case SYN_REPORT: 17 case SYN_REPORT:
18 hw->nread = 0;
18 return 1; 19 return 1;
20 case SYN_MT_REPORT:
21 hw->nread++;
22 hw->nfinger = hw->nread;
23 break;
19 } 24 }
20 break; 25 break;
21 case EV_KEY: 26 case EV_KEY:
@@ -38,44 +43,32 @@ bool read_hwdata(struct HWData *hw, const struct input_event* ev)
38 else 43 else
39 CLEARBIT(hw->button, MT_BUTTON_RIGHT); 44 CLEARBIT(hw->button, MT_BUTTON_RIGHT);
40 break; 45 break;
41 case BTN_MT_REPORT_PACKET:
42 hw->in_packet = ev->value;
43 if (ev->value)
44 hw->nfinger = 0;
45 break;
46 case BTN_MT_REPORT_FINGER:
47 hw->in_finger = ev->value;
48 if (!ev->value && hw->nfinger < DIM_FINGER)
49 hw->nfinger++;
50 break;
51 } 46 }
52 break; 47 break;
53 case EV_ABS: 48 case EV_ABS:
54 if (!hw->in_packet || !hw->in_finger) 49 if (hw->nread == DIM_FINGER)
55 break;
56 if (hw->nfinger == DIM_FINGER)
57 break; 50 break;
58 switch (ev->code) { 51 switch (ev->code) {
59 case ABS_MT_TOUCH_MAJOR: 52 case ABS_MT_TOUCH_MAJOR:
60 hw->finger[hw->nfinger].touch_major = ev->value; 53 hw->finger[hw->nread].touch_major = ev->value;
61 break; 54 break;
62 case ABS_MT_TOUCH_MINOR: 55 case ABS_MT_TOUCH_MINOR:
63 hw->finger[hw->nfinger].touch_minor = ev->value; 56 hw->finger[hw->nread].touch_minor = ev->value;
64 break; 57 break;
65 case ABS_MT_WIDTH_MAJOR: 58 case ABS_MT_WIDTH_MAJOR:
66 hw->finger[hw->nfinger].width_major = ev->value; 59 hw->finger[hw->nread].width_major = ev->value;
67 break; 60 break;
68 case ABS_MT_WIDTH_MINOR: 61 case ABS_MT_WIDTH_MINOR:
69 hw->finger[hw->nfinger].width_minor = ev->value; 62 hw->finger[hw->nread].width_minor = ev->value;
70 break; 63 break;
71 case ABS_MT_ORIENTATION: 64 case ABS_MT_ORIENTATION:
72 hw->finger[hw->nfinger].orientation = ev->value; 65 hw->finger[hw->nread].orientation = ev->value;
73 break; 66 break;
74 case ABS_MT_POSITION_X: 67 case ABS_MT_POSITION_X:
75 hw->finger[hw->nfinger].position_x = ev->value; 68 hw->finger[hw->nread].position_x = ev->value;
76 break; 69 break;
77 case ABS_MT_POSITION_Y: 70 case ABS_MT_POSITION_Y:
78 hw->finger[hw->nfinger].position_y = ev->value; 71 hw->finger[hw->nread].position_y = ev->value;
79 break; 72 break;
80 } 73 }
81 break; 74 break;