diff options
Diffstat (limited to 'src/grail-api.c')
| -rw-r--r-- | src/grail-api.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/src/grail-api.c b/src/grail-api.c index e3b8125..cbd2da4 100644 --- a/src/grail-api.c +++ b/src/grail-api.c | |||
| @@ -70,16 +70,16 @@ static void tp_sync(struct touch_engine *engine, | |||
| 70 | struct touch_frame *frame = &engine->frame; | 70 | struct touch_frame *frame = &engine->frame; |
| 71 | grail_mask_t filtered[DIM_EV_TYPE_BYTES]; | 71 | grail_mask_t filtered[DIM_EV_TYPE_BYTES]; |
| 72 | int nevent = 0; | 72 | int nevent = 0; |
| 73 | gin_frame_begin(ge, frame->time); | 73 | gin_frame_begin(ge, frame); |
| 74 | gru_recognize(ge, frame); | 74 | gru_recognize(ge, frame); |
| 75 | gin_frame_end(ge, filtered); | 75 | gin_frame_end(ge, filtered, sizeof(filtered), frame); |
| 76 | if (!ge->event) { | 76 | if (!ge->event) { |
| 77 | evbuf_clear(&x->evbuf); | 77 | evbuf_clear(&x->evbuf); |
| 78 | return; | 78 | return; |
| 79 | } | 79 | } |
| 80 | while (!evbuf_empty(&x->evbuf)) { | 80 | while (!evbuf_empty(&x->evbuf)) { |
| 81 | evbuf_get(&x->evbuf, &ev); | 81 | evbuf_get(&x->evbuf, &ev); |
| 82 | if (grail_get_mask(filtered, ev.type)) | 82 | if (grail_mask_get(filtered, ev.type)) |
| 83 | continue; | 83 | continue; |
| 84 | ge->event(ge, &ev); | 84 | ge->event(ge, &ev); |
| 85 | nevent++; | 85 | nevent++; |
| @@ -98,27 +98,27 @@ int grail_open(struct grail *ge, int fd) | |||
| 98 | ret = gin_init(ge); | 98 | ret = gin_init(ge); |
| 99 | if (ret) | 99 | if (ret) |
| 100 | goto freemem; | 100 | goto freemem; |
| 101 | ret = gru_init(ge); | ||
| 102 | if (ret) | ||
| 103 | goto freedev; | ||
| 104 | ret = touch_dev_open(&x->dev, fd); | 101 | ret = touch_dev_open(&x->dev, fd); |
| 105 | if (ret) | 102 | if (ret) |
| 106 | goto freegru; | 103 | goto freegin; |
| 104 | ret = gru_init(ge, &x->dev.caps); | ||
| 105 | if (ret) | ||
| 106 | goto freedev; | ||
| 107 | x->fd = fd; | 107 | x->fd = fd; |
| 108 | x->mutex = c_mutex; | 108 | x->mutex = c_mutex; |
| 109 | x->wait = c_wait; | 109 | x->wait = c_wait; |
| 110 | ret = pthread_create(&x->thread, NULL, grail_thread, x); | 110 | ret = pthread_create(&x->thread, NULL, grail_thread, x); |
| 111 | if (ret) | 111 | if (ret) |
| 112 | goto freetouch; | 112 | goto freegru; |
| 113 | ge->impl = x; | 113 | ge->impl = x; |
| 114 | touch_engine_init(&x->engine, tp_event, tp_sync, ge); | 114 | touch_engine_init(&x->engine, tp_event, tp_sync, ge); |
| 115 | touch_engine_attach(&x->engine, &x->dev); | 115 | touch_engine_attach(&x->engine, &x->dev); |
| 116 | return 0; | 116 | return 0; |
| 117 | freetouch: | ||
| 118 | touch_dev_close(&x->dev, fd); | ||
| 119 | freegru: | 117 | freegru: |
| 120 | gru_destroy(ge); | 118 | gru_destroy(ge); |
| 121 | freedev: | 119 | freedev: |
| 120 | touch_dev_close(&x->dev, fd); | ||
| 121 | freegin: | ||
| 122 | gin_destroy(ge); | 122 | gin_destroy(ge); |
| 123 | freemem: | 123 | freemem: |
| 124 | free(x); | 124 | free(x); |
| @@ -134,8 +134,8 @@ void grail_close(struct grail *ge, int fd) | |||
| 134 | pthread_cond_signal (&x->wait); | 134 | pthread_cond_signal (&x->wait); |
| 135 | pthread_mutex_unlock(&x->mutex); | 135 | pthread_mutex_unlock(&x->mutex); |
| 136 | touch_engine_detach(&x->engine, &x->dev); | 136 | touch_engine_detach(&x->engine, &x->dev); |
| 137 | touch_dev_close(&x->dev, fd); | ||
| 138 | gru_destroy(ge); | 137 | gru_destroy(ge); |
| 138 | touch_dev_close(&x->dev, fd); | ||
| 139 | gin_destroy(ge); | 139 | gin_destroy(ge); |
| 140 | free(ge->impl); | 140 | free(ge->impl); |
| 141 | ge->impl = 0; | 141 | ge->impl = 0; |
