684
|
1
|
;;; pkg.lisp --- libevdev FFI |
|
2
|
|
|
3
|
;; |
|
4
|
|
|
5
|
;;; Commentary: |
|
6
|
|
|
7
|
;; note that we also wrap the linux input subsystem linux/input.h which does |
|
8
|
;; not require loading of the libevdev shared library. See input.lisp. |
|
9
|
|
|
10
|
;;; Code: |
|
11
|
(defpackage :evdev/input |
|
12
|
(:use :cl :std :sb-alien) |
|
13
|
(:export |
|
14
|
#:input-event |
|
15
|
#:input-absinfo)) |
|
16
|
|
|
17
|
(defpackage :evdev |
|
18
|
(:use :cl :std :sb-alien :evdev/input) |
|
19
|
(:export)) |
|
20
|
|
|
21
|
(in-package :evdev) |
|
22
|
(define-alien-loader "evdev" t "/usr/lib/") |
|
23
|
|
|
24
|
(define-alien-type libevdev (struct libevdev)) |
|
25
|
|
|
26
|
(define-alien-enum (libevdev-read-flag unsigned-char) |
|
27
|
:sync 1 |
|
28
|
:normal 2 |
|
29
|
:force-sync 4 |
|
30
|
:blocking 8) |
|
31
|
|
|
32
|
(define-alien-routine libevdev-new (* libevdev)) |
|
33
|
|
|
34
|
(define-alien-routine libevdev-new-from-fd int |
|
35
|
(fd int) |
|
36
|
(dev (* (* libevdev)))) |
|
37
|
|
|
38
|
(define-alien-routine libevdev-free void |
|
39
|
(dev (* libevdev))) |
|
40
|
|
|
41
|
(define-alien-enum (libevdev-log-priority unsigned-char) |
|
42
|
:error 10 |
|
43
|
:info 20 |
|
44
|
:debug 30) |
|
45
|
|
|
46
|
|
|
47
|
;; close enough |
|
48
|
(define-alien-type va-list (struct va-list |
|
49
|
(gp-offset unsigned-int) |
|
50
|
(fp-offset unsigned-int) |
|
51
|
(overflow-arg-area (* t)) |
|
52
|
(reg-save-area (* t)))) |
|
53
|
|
|
54
|
(define-alien-type libevdev-log-function |
|
55
|
(function void |
|
56
|
libevdev-log-priority |
|
57
|
(* t) |
|
58
|
c-string |
|
59
|
int |
|
60
|
c-string |
|
61
|
c-string |
|
62
|
va-list)) |
|
63
|
|
|
64
|
(define-alien-routine libevdev-set-log-function void |
|
65
|
(logfunc libevdev-log-function) |
|
66
|
(data (* t))) |
|
67
|
|
|
68
|
(define-alien-routine libevdev-set-log-priority void |
|
69
|
(priority libevdev-log-priority)) |
|
70
|
|
|
71
|
(define-alien-routine libevdev-get-log-priority libevdev-log-priority) |
|
72
|
|
|
73
|
(define-alien-type libevdev-device-log-function |
|
74
|
(function void |
|
75
|
(* libevdev) |
|
76
|
libevdev-log-priority |
|
77
|
(* t) |
|
78
|
c-string |
|
79
|
int |
|
80
|
c-string |
|
81
|
c-string |
|
82
|
va-list)) |
|
83
|
|
|
84
|
(define-alien-routine libevdev-set-device-log-function void |
|
85
|
(dev (* libevdev)) |
|
86
|
(logfunc libevdev-device-log-function) |
|
87
|
(priority libevdev-log-priority) |
|
88
|
(data (* t))) |
|
89
|
|
|
90
|
(define-alien-enum (libevdev-grab-mode unsigned-char) |
|
91
|
:grab 3 |
|
92
|
:ungrab 4) |
|
93
|
|
|
94
|
(define-alien-routine libevdev-grab int |
|
95
|
(dev (* libevdev)) |
|
96
|
(grab libevdev-grab-mode)) |
|
97
|
|
|
98
|
(define-alien-routine libevdev-set-fd int |
|
99
|
(dev (* libevdev)) |
|
100
|
(fd int)) |
|
101
|
|
|
102
|
(define-alien-routine libevdev-get-fd int |
|
103
|
(dev (* libevdev))) |