changelog shortlog graph tags branches changeset files revisions annotate raw help

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

changeset 685: ebe3315b7add
parent: 29fe829a7ac3
author: Richard Westhaver <ellis@rwest.io>
date: Sun, 29 Sep 2024 22:44:52 -0400
permissions: -rw-r--r--
description: evdev/kbd fully operational, rustls and blake3 cleanups
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  #:libevdev-new
21  #:libevdev-new-from-fd
22  #:libevdev-free
23  #:libevdev-set-fd))
24 
25 (in-package :evdev)
26 (define-alien-loader "evdev" t "/usr/lib/")
27 
28 (define-alien-type libevdev (struct libevdev))
29 
30 (define-alien-enum (libevdev-read-flag unsigned-char)
31  :sync 1
32  :normal 2
33  :force-sync 4
34  :blocking 8)
35 
36 (define-alien-routine libevdev-new (* libevdev))
37 
38 (define-alien-routine libevdev-new-from-fd int
39  (fd int)
40  (dev (* (* libevdev))))
41 
42 (define-alien-routine libevdev-free void
43  (dev (* libevdev)))
44 
45 (define-alien-enum (libevdev-log-priority unsigned-char)
46  :error 10
47  :info 20
48  :debug 30)
49 
50 
51 ;; close enough
52 (define-alien-type va-list (struct va-list
53  (gp-offset unsigned-int)
54  (fp-offset unsigned-int)
55  (overflow-arg-area (* t))
56  (reg-save-area (* t))))
57 
58 (define-alien-type libevdev-log-function
59  (function void
60  libevdev-log-priority
61  (* t)
62  c-string
63  int
64  c-string
65  c-string
66  va-list))
67 
68 (define-alien-routine libevdev-set-log-function void
69  (logfunc libevdev-log-function)
70  (data (* t)))
71 
72 (define-alien-routine libevdev-set-log-priority void
73  (priority libevdev-log-priority))
74 
75 (define-alien-routine libevdev-get-log-priority libevdev-log-priority)
76 
77 (define-alien-type libevdev-device-log-function
78  (function void
79  (* libevdev)
80  libevdev-log-priority
81  (* t)
82  c-string
83  int
84  c-string
85  c-string
86  va-list))
87 
88 (define-alien-routine libevdev-set-device-log-function void
89  (dev (* libevdev))
90  (logfunc libevdev-device-log-function)
91  (priority libevdev-log-priority)
92  (data (* t)))
93 
94 (define-alien-enum (libevdev-grab-mode unsigned-char)
95  :grab 3
96  :ungrab 4)
97 
98 (define-alien-routine libevdev-grab int
99  (dev (* libevdev))
100  (grab libevdev-grab-mode))
101 
102 (define-alien-routine libevdev-set-fd int
103  (dev (* libevdev))
104  (fd int))
105 
106 (define-alien-routine libevdev-get-fd int
107  (dev (* libevdev)))