diff options
Diffstat (limited to 'src/core.c')
| -rw-r--r-- | src/core.c | 17 |
1 files changed, 10 insertions, 7 deletions
| @@ -89,9 +89,9 @@ static void solve(struct mtdev_state *state, const struct mtdev_caps *caps, | |||
| 89 | /* update matched contacts and create new ones */ | 89 | /* update matched contacts and create new ones */ |
| 90 | foreach_bit(i, touch) { | 90 | foreach_bit(i, touch) { |
| 91 | j = n2s[i]; | 91 | j = n2s[i]; |
| 92 | id = j >= 0 ? sid[j] : caps->nullid; | 92 | id = j >= 0 ? sid[j] : MT_ID_NULL; |
| 93 | while (id == caps->nullid) | 93 | if (id == MT_ID_NULL) |
| 94 | id = ++state->lastid; | 94 | id = state->lastid++ & MT_ID_MAX; |
| 95 | nid[i] = id; | 95 | nid[i] = id; |
| 96 | } | 96 | } |
| 97 | } | 97 | } |
| @@ -125,7 +125,7 @@ static void assign_tracking_id(struct mtdev_state *state, | |||
| 125 | solve(state, caps, sid, sx, sy, sn, nid, nx, ny, size, touch); | 125 | solve(state, caps, sid, sx, sy, sn, nid, nx, ny, size, touch); |
| 126 | for (i = 0; i < size; i++) { | 126 | for (i = 0; i < size; i++) { |
| 127 | data[i].abs[MTDEV_TRACKING_ID] = | 127 | data[i].abs[MTDEV_TRACKING_ID] = |
| 128 | GETBIT(touch, i) ? nid[i] : caps->nullid; | 128 | GETBIT(touch, i) ? nid[i] : MT_ID_NULL; |
| 129 | prop[i] |= BITMASK(MTDEV_TRACKING_ID); | 129 | prop[i] |= BITMASK(MTDEV_TRACKING_ID); |
| 130 | } | 130 | } |
| 131 | } | 131 | } |
| @@ -289,10 +289,10 @@ static void apply_typeA_changes(struct mtdev_state *state, | |||
| 289 | filter_data(state, caps, &data[i], prop[i], slot); | 289 | filter_data(state, caps, &data[i], prop[i], slot); |
| 290 | push_slot_changes(state, &data[i], prop[i], slot, syn); | 290 | push_slot_changes(state, &data[i], prop[i], slot, syn); |
| 291 | SETBIT(used, slot); | 291 | SETBIT(used, slot); |
| 292 | id = caps->nullid; | 292 | id = MT_ID_NULL; |
| 293 | break; | 293 | break; |
| 294 | } | 294 | } |
| 295 | if (id != caps->nullid) { | 295 | if (id != MT_ID_NULL) { |
| 296 | slot = firstbit(unused); | 296 | slot = firstbit(unused); |
| 297 | push_slot_changes(state, &data[i], prop[i], slot, syn); | 297 | push_slot_changes(state, &data[i], prop[i], slot, syn); |
| 298 | SETBIT(used, slot); | 298 | SETBIT(used, slot); |
| @@ -304,7 +304,7 @@ static void apply_typeA_changes(struct mtdev_state *state, | |||
| 304 | foreach_bit(slot, state->used & ~used) { | 304 | foreach_bit(slot, state->used & ~used) { |
| 305 | struct mtdev_slot tdata = state->data[slot]; | 305 | struct mtdev_slot tdata = state->data[slot]; |
| 306 | bitmask_t tprop = BITMASK(MTDEV_TRACKING_ID); | 306 | bitmask_t tprop = BITMASK(MTDEV_TRACKING_ID); |
| 307 | tdata.abs[MTDEV_TRACKING_ID] = caps->nullid; | 307 | tdata.abs[MTDEV_TRACKING_ID] = MT_ID_NULL; |
| 308 | push_slot_changes(state, &tdata, tprop, slot, syn); | 308 | push_slot_changes(state, &tdata, tprop, slot, syn); |
| 309 | } | 309 | } |
| 310 | state->used = used; | 310 | state->used = used; |
| @@ -337,10 +337,13 @@ static void convert_A_to_B(struct mtdev_state *state, | |||
| 337 | 337 | ||
| 338 | int mtdev_init(struct mtdev *dev) | 338 | int mtdev_init(struct mtdev *dev) |
| 339 | { | 339 | { |
| 340 | int i; | ||
| 340 | memset(dev, 0, sizeof(struct mtdev)); | 341 | memset(dev, 0, sizeof(struct mtdev)); |
| 341 | dev->state = calloc(1, sizeof(struct mtdev_state)); | 342 | dev->state = calloc(1, sizeof(struct mtdev_state)); |
| 342 | if (!dev->state) | 343 | if (!dev->state) |
| 343 | return -ENOMEM; | 344 | return -ENOMEM; |
| 345 | for (i = 0; i < DIM_FINGER; i++) | ||
| 346 | dev->state->data[i].abs[MTDEV_TRACKING_ID] = MT_ID_NULL; | ||
| 344 | return 0; | 347 | return 0; |
| 345 | } | 348 | } |
| 346 | 349 | ||
