diff options
Diffstat (limited to 'src/hwdata.c')
-rw-r--r-- | src/hwdata.c | 33 |
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) case EV_SYN: switch (ev->code) { case SYN_REPORT: + hw->nread = 0; return 1; + case SYN_MT_REPORT: + hw->nread++; + hw->nfinger = hw->nread; + break; } break; case EV_KEY: @@ -38,44 +43,32 @@ bool read_hwdata(struct HWData *hw, const struct input_event* ev) else CLEARBIT(hw->button, MT_BUTTON_RIGHT); break; - case BTN_MT_REPORT_PACKET: - hw->in_packet = ev->value; - if (ev->value) - hw->nfinger = 0; - break; - case BTN_MT_REPORT_FINGER: - hw->in_finger = ev->value; - if (!ev->value && hw->nfinger < DIM_FINGER) - hw->nfinger++; - break; } break; case EV_ABS: - if (!hw->in_packet || !hw->in_finger) - break; - if (hw->nfinger == DIM_FINGER) + if (hw->nread == DIM_FINGER) break; switch (ev->code) { case ABS_MT_TOUCH_MAJOR: - hw->finger[hw->nfinger].touch_major = ev->value; + hw->finger[hw->nread].touch_major = ev->value; break; case ABS_MT_TOUCH_MINOR: - hw->finger[hw->nfinger].touch_minor = ev->value; + hw->finger[hw->nread].touch_minor = ev->value; break; case ABS_MT_WIDTH_MAJOR: - hw->finger[hw->nfinger].width_major = ev->value; + hw->finger[hw->nread].width_major = ev->value; break; case ABS_MT_WIDTH_MINOR: - hw->finger[hw->nfinger].width_minor = ev->value; + hw->finger[hw->nread].width_minor = ev->value; break; case ABS_MT_ORIENTATION: - hw->finger[hw->nfinger].orientation = ev->value; + hw->finger[hw->nread].orientation = ev->value; break; case ABS_MT_POSITION_X: - hw->finger[hw->nfinger].position_x = ev->value; + hw->finger[hw->nread].position_x = ev->value; break; case ABS_MT_POSITION_Y: - hw->finger[hw->nfinger].position_y = ev->value; + hw->finger[hw->nread].position_y = ev->value; break; } break; |