Coverage report: /home/ellis/comp/core/ffi/evdev/pkg.lisp

KindCoveredAll%
expression021 0.0
branch00nil
Key
Not instrumented
Conditionalized out
Executed
Not executed
 
Both branches taken
One branch taken
Neither branch taken
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
 #|
11
   evdev is the generic input event interface. It passes the events
12
 generated in the kernel straight to the program, with timestamps. The
13
 API is still evolving, but should be usable now. It's described in
14
 section 5. 
15
 
16
   This should be the way for GPM and X to get keyboard and mouse
17
 events. It allows for multihead in X without any specific multihead
18
 kernel support. The event codes are the same on all architectures and
19
 are hardware independent.
20
 
21
   The devices are in /dev/input:
22
 
23
         crw-r--r--   1 root     root      13,  64 Apr  1 10:49 event0
24
         crw-r--r--   1 root     root      13,  65 Apr  1 10:50 event1
25
         crw-r--r--   1 root     root      13,  66 Apr  1 10:50 event2
26
         crw-r--r--   1 root     root      13,  67 Apr  1 10:50 event3
27
         ...
28
 
29
 And so on up to event31.
30
 |#
31
 
32
 ;;; Code:
33
 (defpackage :evdev/input
34
   (:use :cl :std :sb-alien)
35
   (:export
36
    #:input-event
37
    #:input-absinfo))
38
 
39
 (defpackage :evdev
40
   (:use :cl :std :sb-alien :evdev/input)
41
   (:export
42
    :load-evdev
43
    #:libevdev-new
44
    #:libevdev-new-from-fd
45
    :libevdev-read-flag
46
    #:libevdev-free
47
    #:libevdev-set-fd
48
    #:libevdev))
49
 
50
 (in-package :evdev)
51
 (define-alien-loader evdev "/usr/lib/")
52
 
53
 (define-alien-type libevdev (struct libevdev))
54
 
55
 (define-alien-enum (libevdev-read-flag unsigned-char)
56
                    :sync 1
57
                    :normal 2
58
                    :force-sync 4
59
                    :blocking 8)
60
 
61
 (defar libevdev-new (* libevdev))
62
 
63
 (defar libevdev-new-from-fd int
64
   (fd int)
65
   (dev (* (* libevdev))))
66
 
67
 (defar libevdev-free void
68
   (dev (* libevdev)))
69
 
70
 (define-alien-enum (libevdev-log-priority unsigned-char)
71
                    :error 10
72
                    :info 20
73
                    :debug 30)
74
 
75
 
76
 ;; close enough
77
 (define-alien-type va-list (struct va-list
78
                                    (gp-offset unsigned-int)
79
                                    (fp-offset unsigned-int)
80
                                    (overflow-arg-area (* t))
81
                                    (reg-save-area (* t))))
82
 
83
 (define-alien-type libevdev-log-function 
84
   (function void
85
             libevdev-log-priority
86
             (* t)
87
             c-string
88
             int
89
             c-string
90
             c-string
91
             va-list))
92
 
93
 (defar libevdev-set-log-function void
94
   (logfunc libevdev-log-function)
95
   (data (* t)))
96
 
97
 (defar libevdev-set-log-priority void
98
   (priority libevdev-log-priority))
99
 
100
 (defar libevdev-get-log-priority libevdev-log-priority)
101
 
102
 (define-alien-type libevdev-device-log-function
103
   (function void
104
             (* libevdev)
105
             libevdev-log-priority
106
             (* t)
107
             c-string
108
             int
109
             c-string
110
             c-string
111
             va-list))
112
 
113
 (defar libevdev-set-device-log-function void
114
   (dev (* libevdev))
115
   (logfunc libevdev-device-log-function)
116
   (priority libevdev-log-priority)
117
   (data (* t)))
118
 
119
 (define-alien-enum (libevdev-grab-mode unsigned-char)
120
                    :grab 3
121
                    :ungrab 4)
122
 
123
 (defar libevdev-grab int
124
   (dev (* libevdev))
125
   (grab libevdev-grab-mode))
126
 
127
 (defar libevdev-set-fd int
128
   (dev (* libevdev))
129
   (fd int))
130
 
131
 (defar libevdev-get-fd int
132
   (dev (* libevdev)))