changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > core / annotate lisp/ffi/evdev/pkg.lisp

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