summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/caps.c6
-rw-r--r--src/core.c17
2 files changed, 14 insertions, 9 deletions
diff --git a/src/caps.c b/src/caps.c
index 1821bd7..0788acf 100644
--- a/src/caps.c
+++ b/src/caps.c
@@ -83,8 +83,10 @@ static int read_caps(struct mtdev_caps *cap, int fd)
83 83
84 cap->has_mtdata = has_mt_data(cap); 84 cap->has_mtdata = has_mt_data(cap);
85 85
86 if (cap->has_abs[MTDEV_TRACKING_ID]) 86 if (!cap->has_abs[MTDEV_TRACKING_ID]) {
87 cap->nullid = cap->abs[MTDEV_TRACKING_ID].minimum - 1; 87 cap->abs[MTDEV_TRACKING_ID].minimum = MT_ID_MIN;
88 cap->abs[MTDEV_TRACKING_ID].maximum = MT_ID_MAX;
89 }
88 90
89 default_fuzz(cap, MTDEV_POSITION_X, SN_COORD); 91 default_fuzz(cap, MTDEV_POSITION_X, SN_COORD);
90 default_fuzz(cap, MTDEV_POSITION_Y, SN_COORD); 92 default_fuzz(cap, MTDEV_POSITION_Y, SN_COORD);
diff --git a/src/core.c b/src/core.c
index 8df2477..55b62b6 100644
--- a/src/core.c
+++ b/src/core.c
@@ -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
338int mtdev_init(struct mtdev *dev) 338int 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