changelog shortlog graph tags branches changeset files revisions annotate raw help

Mercurial > core / 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
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)))