summaryrefslogtreecommitdiff
path: root/src/grail-api.c
diff options
context:
space:
mode:
authorHenrik Rydberg <rydberg@euromail.se>2010-08-19 20:03:15 +0200
committerHenrik Rydberg <rydberg@euromail.se>2010-08-19 20:03:15 +0200
commita704984e03d28b4be40e12c43be1b163bc9e09e2 (patch)
treec4720a59aa77918ffef742d7ec7ef2a7e2eda16e /src/grail-api.c
parentcb2cad3b8c506a08a6bdad548a10ff47f85ef38b (diff)
Simplify touch machinery
To be able to model touch information uniformly across all supported devices, the semantics of the touch attributes has to be treated explicitly. Drop the generic touch property array and replace it by an actual structure. In addition, the touch-engine abstraction turned out to not be needed, so drop it as well. Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
Diffstat (limited to 'src/grail-api.c')
-rw-r--r--src/grail-api.c46
1 files changed, 25 insertions, 21 deletions
diff --git a/src/grail-api.c b/src/grail-api.c
index 7c054a9..afd97b9 100644
--- a/src/grail-api.c
+++ b/src/grail-api.c
@@ -33,16 +33,15 @@
33 33
34struct grail_impl { 34struct grail_impl {
35 struct touch_dev dev; 35 struct touch_dev dev;
36 struct touch_engine engine;
37 struct evbuf evbuf; 36 struct evbuf evbuf;
38 int filter_abs; 37 int filter_abs;
39 int hack_status; 38 int hack_status;
40}; 39};
41 40
42static void tp_event(struct touch_engine *engine, 41static void tp_event(struct touch_dev *dev,
43 const struct input_event *ev) 42 const struct input_event *ev)
44{ 43{
45 struct grail *ge = engine->priv; 44 struct grail *ge = dev->priv;
46 struct grail_impl *x = ge->impl; 45 struct grail_impl *x = ge->impl;
47 evbuf_put(&x->evbuf, ev); 46 evbuf_put(&x->evbuf, ev);
48} 47}
@@ -62,14 +61,14 @@ static int extra_filtered(const struct input_event *ev)
62 return 0; 61 return 0;
63} 62}
64 63
65static void tp_sync(struct touch_engine *engine, 64static void tp_sync(struct touch_dev *dev,
66 const struct input_event *syn) 65 const struct input_event *syn)
67{ 66{
68 struct input_event ev; 67 struct input_event ev;
69 struct grail *ge = engine->priv; 68 struct grail *ge = dev->priv;
70 struct grail_impl *x = ge->impl; 69 struct grail_impl *x = ge->impl;
71 struct gesture_recognizer *gru = ge->gru; 70 struct gesture_recognizer *gru = ge->gru;
72 struct touch_frame *frame = &engine->frame; 71 struct touch_frame *frame = &dev->frame;
73 grail_mask_t filtered[DIM_EV_TYPE_BYTES]; 72 grail_mask_t filtered[DIM_EV_TYPE_BYTES];
74 int dofilt, hack, nevent = 0; 73 int dofilt, hack, nevent = 0;
75 gin_frame_begin(ge, frame); 74 gin_frame_begin(ge, frame);
@@ -120,22 +119,27 @@ int grail_open(struct grail *ge, int fd)
120 if (!x) 119 if (!x)
121 return -ENOMEM; 120 return -ENOMEM;
122 ge->impl = x; 121 ge->impl = x;
123 ret = gin_init(ge); 122
123 ret = touch_dev_open(&x->dev, fd);
124 if (ret) 124 if (ret)
125 goto freemem; 125 goto freemem;
126 ret = touch_dev_open(&x->dev, fd); 126 x->dev.event = tp_event;
127 x->dev.sync = tp_sync;
128 x->dev.priv = ge;
129
130 ret = gin_init(ge);
127 if (ret) 131 if (ret)
128 goto freegin; 132 goto freedev;
133
129 ret = gru_init(ge); 134 ret = gru_init(ge);
130 if (ret) 135 if (ret)
131 goto freedev; 136 goto freegin;
132 touch_engine_init(&x->engine, tp_event, tp_sync, ge); 137
133 touch_engine_attach(&x->engine, &x->dev);
134 return 0; 138 return 0;
135 freedev:
136 touch_dev_close(&x->dev, fd);
137 freegin: 139 freegin:
138 gin_destroy(ge); 140 gin_destroy(ge);
141 freedev:
142 touch_dev_close(&x->dev, fd);
139 freemem: 143 freemem:
140 free(x); 144 free(x);
141 ge->impl = 0; 145 ge->impl = 0;
@@ -146,10 +150,9 @@ void grail_close(struct grail *ge, int fd)
146{ 150{
147 struct grail_impl *x = ge->impl; 151 struct grail_impl *x = ge->impl;
148 void *status; 152 void *status;
149 touch_engine_detach(&x->engine, &x->dev);
150 gru_destroy(ge); 153 gru_destroy(ge);
151 touch_dev_close(&x->dev, fd);
152 gin_destroy(ge); 154 gin_destroy(ge);
155 touch_dev_close(&x->dev, fd);
153 free(ge->impl); 156 free(ge->impl);
154 ge->impl = 0; 157 ge->impl = 0;
155} 158}
@@ -169,9 +172,10 @@ int grail_pull(struct grail *ge, int fd)
169void grail_get_units(const struct grail *ge, 172void grail_get_units(const struct grail *ge,
170 struct grail_coord *min, struct grail_coord *max) 173 struct grail_coord *min, struct grail_coord *max)
171{ 174{
172 const struct touch_dev_caps *caps = &ge->impl->dev.caps; 175 const struct touch_caps *caps = &ge->impl->dev.caps;
173 min->x = caps->info[TP_POS_X].minimum; 176 min->x = caps->min_x;
174 min->y = caps->info[TP_POS_Y].minimum; 177 min->y = caps->min_y;
175 max->x = caps->info[TP_POS_X].maximum; 178 max->x = caps->max_x;
176 max->y = caps->info[TP_POS_Y].maximum; 179 max->y = caps->max_y;
177} 180}
181