Lines Matching refs:dsc

68 static void _delete(lv_libinput_t * dsc);
136 lv_libinput_t * dsc = lv_malloc_zeroed(sizeof(lv_libinput_t)); in lv_libinput_create() local
137 LV_ASSERT_MALLOC(dsc); in lv_libinput_create()
138 if(dsc == NULL) return NULL; in lv_libinput_create()
140 dsc->libinput_context = libinput_path_create_context(&interface, NULL); in lv_libinput_create()
141 if(!dsc->libinput_context) { in lv_libinput_create()
143 _delete(dsc); in lv_libinput_create()
147 dsc->libinput_device = libinput_path_add_device(dsc->libinput_context, dev_path); in lv_libinput_create()
148 if(!dsc->libinput_device) { in lv_libinput_create()
149 _delete(dsc); in lv_libinput_create()
153 dsc->libinput_device = libinput_device_ref(dsc->libinput_device); in lv_libinput_create()
154 if(!dsc->libinput_device) { in lv_libinput_create()
155 _delete(dsc); in lv_libinput_create()
159 dsc->fd = libinput_get_fd(dsc->libinput_context); in lv_libinput_create()
162 dsc->fds[0].fd = dsc->fd; in lv_libinput_create()
163 dsc->fds[0].events = POLLIN; in lv_libinput_create()
164 dsc->fds[0].revents = 0; in lv_libinput_create()
168 lv_xkb_init(&(dsc->xkb), names); in lv_libinput_create()
174 _delete(dsc); in lv_libinput_create()
179 lv_indev_set_driver_data(indev, dsc); in lv_libinput_create()
182 pthread_mutex_init(&dsc->event_lock, NULL); in lv_libinput_create()
183 pthread_create(&dsc->worker_thread, NULL, _poll_thread, dsc); in lv_libinput_create()
308 lv_libinput_t * dsc = (lv_libinput_t *)data; in _poll_thread() local
315 rc = poll(dsc->fds, nfds, timeout); in _poll_thread()
321 if(dsc->deinit) { in _poll_thread()
322 dsc->deinit = false; /* Signal that we're done */ in _poll_thread()
329 libinput_dispatch(dsc->libinput_context); in _poll_thread()
330 pthread_mutex_lock(&dsc->event_lock); in _poll_thread()
331 while((event = libinput_get_event(dsc->libinput_context)) != NULL) { in _poll_thread()
332 _read_pointer(dsc, event); in _poll_thread()
333 _read_keypad(dsc, event); in _poll_thread()
336 pthread_mutex_unlock(&dsc->event_lock); in _poll_thread()
343 lv_libinput_event_t * _get_event(lv_libinput_t * dsc) in _get_event() argument
345 if(dsc->start == dsc->end) { in _get_event()
349 lv_libinput_event_t * evt = &dsc->points[dsc->start]; in _get_event()
351 if(++dsc->start == LV_LIBINPUT_MAX_EVENTS) in _get_event()
352 dsc->start = 0; in _get_event()
357 bool _event_pending(lv_libinput_t * dsc) in _event_pending() argument
359 return dsc->start != dsc->end; in _event_pending()
362 lv_libinput_event_t * _create_event(lv_libinput_t * dsc) in _create_event() argument
364 lv_libinput_event_t * evt = &dsc->points[dsc->end]; in _create_event()
366 if(++dsc->end == LV_LIBINPUT_MAX_EVENTS) in _create_event()
367 dsc->end = 0; in _create_event()
372 if(dsc->end == dsc->start) { in _create_event()
374 if(++dsc->start == LV_LIBINPUT_MAX_EVENTS) in _create_event()
375 dsc->start = 0; in _create_event()
385 lv_libinput_t * dsc = lv_indev_get_driver_data(indev); in _read() local
386 LV_ASSERT_NULL(dsc); in _read()
388 pthread_mutex_lock(&dsc->event_lock); in _read()
390 lv_libinput_event_t * evt = _get_event(dsc); in _read()
393 evt = &dsc->last_event; /* indev expects us to report the most recent state */ in _read()
398 data->continue_reading = _event_pending(dsc); in _read()
400 dsc->last_event = *evt; /* Remember the last event for the next call */ in _read()
402 pthread_mutex_unlock(&dsc->event_lock); in _read()
409 static void _read_pointer(lv_libinput_t * dsc, struct libinput_event * event) in _read_pointer() argument
440 evt = _create_event(dsc); in _read_pointer()
458 dsc->slots[slot].point = evt->point; in _read_pointer()
459 dsc->slots[slot].pressed = evt->pressed; in _read_pointer()
474 if(slot == 0 && dsc->slots[1].pressed == LV_INDEV_STATE_PRESSED) { in _read_pointer()
482 synth_evt->point = dsc->slots[0].point; in _read_pointer()
485 evt = _create_event(dsc); in _read_pointer()
487 evt->point = dsc->slots[0].point; in _read_pointer()
490 synth_evt = _create_event(dsc); in _read_pointer()
492 synth_evt->point = dsc->slots[1].point; in _read_pointer()
494 else if(slot == 1 && dsc->slots[0].pressed == LV_INDEV_STATE_PRESSED) { in _read_pointer()
501 evt->point = dsc->slots[1].point; in _read_pointer()
504 lv_libinput_event_t * synth_evt = _create_event(dsc); in _read_pointer()
506 synth_evt->point = dsc->slots[0].point; in _read_pointer()
510 evt->point = dsc->slots[slot].point; in _read_pointer()
513 dsc->slots[slot].pressed = evt->pressed; in _read_pointer()
516dsc->pointer_position.x = (int32_t)LV_CLAMP(0, dsc->pointer_position.x + libinput_event_pointer_ge… in _read_pointer()
518dsc->pointer_position.y = (int32_t)LV_CLAMP(0, dsc->pointer_position.y + libinput_event_pointer_ge… in _read_pointer()
520 evt->point.x = dsc->pointer_position.x; in _read_pointer()
521 evt->point.y = dsc->pointer_position.y; in _read_pointer()
522 evt->pressed = dsc->pointer_button_down; in _read_pointer()
534 evt->pressed = dsc->pointer_button_down; in _read_pointer()
539dsc->pointer_button_down = button_state == LIBINPUT_BUTTON_STATE_RELEASED ? LV_INDEV_STATE_RELEASE… in _read_pointer()
541 evt->point.x = dsc->pointer_position.x; in _read_pointer()
542 evt->point.y = dsc->pointer_position.y; in _read_pointer()
543 evt->pressed = dsc->pointer_button_down; in _read_pointer()
550 static void _read_keypad(lv_libinput_t * dsc, struct libinput_event * event) in _read_keypad() argument
557 evt = _create_event(dsc); in _read_keypad()
562 … evt->key_val = lv_xkb_process_key(&(dsc->xkb), code, key_state == LIBINPUT_KEY_STATE_PRESSED); in _read_keypad()
618 lv_libinput_event_t * release_evt = _create_event(dsc); in _read_keypad()
642 static void _delete(lv_libinput_t * dsc) in _delete() argument
644 if(dsc->fd) in _delete()
645 dsc->deinit = true; in _delete()
649 if(!dsc->deinit) in _delete()
654 if(dsc->deinit) { in _delete()
656 pthread_cancel(dsc->worker_thread); in _delete()
659 if(dsc->libinput_device) { in _delete()
660 libinput_path_remove_device(dsc->libinput_device); in _delete()
661 libinput_device_unref(dsc->libinput_device); in _delete()
664 if(dsc->libinput_context) { in _delete()
665 libinput_unref(dsc->libinput_context); in _delete()
669 lv_xkb_deinit(&(dsc->xkb)); in _delete()
672 lv_free(dsc); in _delete()