From e4f4678346b6a782a6bf978a25d9f1823fdd185e Mon Sep 17 00:00:00 2001 From: Eugene Zaikonnikov Date: Fri, 27 Dec 2024 15:23:50 +0100 Subject: [PATCH 1/5] fix the slot types to make keyboard events work --- evdev.lisp | 2 -- 1 file changed, 2 deletions(-) diff --git a/evdev.lisp b/evdev.lisp index 2f65d08..2d3d674 100644 --- a/evdev.lisp +++ b/evdev.lisp @@ -223,12 +223,10 @@ based on the return value of (machine-type) in SBCL.")) :REPEAT.") (name :initarg :name :accessor :name - :type symbol :documentation "The human-readable name for the key. Every key event has one.") (glyph :initarg :glyph :accessor :glyph - :type symbol :documentation "The character code point for this key. May be NIL.")) (:documentation "An INPUT-EVENT that contains keyboard-specific state data.")) From 66fc39b42230d8d65a6538366bc9af621696851c Mon Sep 17 00:00:00 2001 From: Eugene Zaikonnikov Date: Fri, 27 Dec 2024 15:27:18 +0100 Subject: [PATCH 2/5] fix dangling parens --- evdev.lisp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/evdev.lisp b/evdev.lisp index 2d3d674..d7cc545 100644 --- a/evdev.lisp +++ b/evdev.lisp @@ -168,17 +168,13 @@ linux/include/uapi/linux/input.h.") (24 . (:name ABS_PRESSURE)) (40 . (:name ABS_MISC))) :test #'equal - :documentation "Absolute device values for pointer and tablet hardware." -) + :documentation "Absolute device values for pointer and tablet hardware.") (define-constant +input-rel-codes+ '((8 . (:name REL_WHEEL))) :test #'equal - :documentation "Relative motion types." -) + :documentation "Relative motion types.") - -(cond ((equal (machine-type) "X86") (define-unsigned unsigned-long-int 4)) ((equal (machine-type) "X86-64") (define-unsigned unsigned-long-int 8)) From 6838e1b10f0909748c75bdaaa39091a414625845 Mon Sep 17 00:00:00 2001 From: Eugene Zaikonnikov Date: Fri, 27 Dec 2024 15:29:20 +0100 Subject: [PATCH 3/5] add x86 and arm32 support on ccl --- evdev.lisp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/evdev.lisp b/evdev.lisp index d7cc545..a489cda 100644 --- a/evdev.lisp +++ b/evdev.lisp @@ -175,10 +175,12 @@ linux/include/uapi/linux/input.h.") :test #'equal :documentation "Relative motion types.") +(cond ((member (machine-type) '("X86" "armv7l") :test #'equal) (define-unsigned unsigned-long-int 4)) - ((equal (machine-type) "X86-64") + ((member (machine-type) '("X86-64" "x86_64") :test #'equal) (define-unsigned unsigned-long-int 8)) (t 4)) + (define-unsigned unsigned-short 2) (define-unsigned unsigned-int 4) From 2cef42c884c27dbe04c22129830027266998ff4e Mon Sep 17 00:00:00 2001 From: Eugene Zaikonnikov Date: Mon, 30 Dec 2024 14:51:15 +0100 Subject: [PATCH 4/5] add WITH-EVDEV-DEVICES to handle input from several evdevs at once --- evdev.lisp | 21 +++++++++++++++++++++ package.lisp | 1 + 2 files changed, 22 insertions(+) diff --git a/evdev.lisp b/evdev.lisp index a489cda..fbf939e 100644 --- a/evdev.lisp +++ b/evdev.lisp @@ -346,3 +346,24 @@ condition is signaled." for ,event-var = (read-event ,stream) while ,event-var do (progn ,@body))))) + +(defmacro with-evdev-devices ((event-var &rest device-paths) + &body body) + "Opens DEVICE-PATHS for reading, combine individual stream events into +EVENT-VAR and calls BODY for each event passed in. DEVICE-PATHS must +exist, otherwise an error condition is signaled." + (let ((concatenated (gensym)) + (inputs (gensym))) + `(let* ((,inputs (loop for device-path in ',device-paths + collecting (open device-path + :element-type '(unsigned-byte 8) + :direction :input + :if-does-not-exist :error))) + (,concatenated (apply #'make-concatenated-stream ,inputs))) + (unwind-protect + (loop + for ,event-var = (read-event ,concatenated) + while ,event-var + do (progn ,@body)) + (dolist (s (concatenated-stream-streams ,concatenated)) + (close s)))))) diff --git a/package.lisp b/package.lisp index e86b367..35be918 100644 --- a/package.lisp +++ b/package.lisp @@ -4,6 +4,7 @@ (:use #:cl #:binary-types #:alexandria #:local-time #:cl-event-handler) (:documentation "Linux keyboard event input driver.") (:export #:with-evdev-device + #:with-evdev-devices #:input-event #:keyboard-event From 0fe425bd12b9a6b233f856b82b008ed68ff55503 Mon Sep 17 00:00:00 2001 From: Eugene Zaikonnikov Date: Tue, 31 Dec 2024 17:40:55 +0100 Subject: [PATCH 5/5] use trivial-features for word size determination --- cl-evdev.asd | 1 + evdev.lisp | 7 ++----- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/cl-evdev.asd b/cl-evdev.asd index 7e7f140..0063e02 100644 --- a/cl-evdev.asd +++ b/cl-evdev.asd @@ -8,6 +8,7 @@ :depends-on (#:binary-types #:alexandria #:local-time + #:trivial-features #:cl-event-handler) :components ((:file "package") (:file "evdev"))) diff --git a/evdev.lisp b/evdev.lisp index fbf939e..cda8410 100644 --- a/evdev.lisp +++ b/evdev.lisp @@ -175,11 +175,8 @@ linux/include/uapi/linux/input.h.") :test #'equal :documentation "Relative motion types.") -(cond ((member (machine-type) '("X86" "armv7l") :test #'equal) - (define-unsigned unsigned-long-int 4)) - ((member (machine-type) '("X86-64" "x86_64") :test #'equal) - (define-unsigned unsigned-long-int 8)) - (t 4)) +#+32-bit(define-unsigned unsigned-long-int 4) +#+64-bit(define-unsigned unsigned-long-int 8) (define-unsigned unsigned-short 2) (define-unsigned unsigned-int 4)