[bootlin/training-materials updates] master: Kernel input: add input_report/input_sync example (e9c14542)

Michael Opdenacker michael.opdenacker at bootlin.com
Wed Sep 4 10:15:02 CEST 2019


Repository : https://github.com/bootlin/training-materials
On branch  : master
Link       : https://github.com/bootlin/training-materials/commit/e9c145420fce1c07ed1731e43420642d9a002d4e

>---------------------------------------------------------------

commit e9c145420fce1c07ed1731e43420642d9a002d4e
Author: Michael Opdenacker <michael.opdenacker at bootlin.com>
Date:   Wed Sep 4 10:15:02 2019 +0200

    Kernel input: add input_report/input_sync example
    
    Signed-off-by: Michael Opdenacker <michael.opdenacker at bootlin.com>


>---------------------------------------------------------------

e9c145420fce1c07ed1731e43420642d9a002d4e
 slides/kernel-input/kernel-input.tex | 34 ++++++++++++++++++++++++++++++----
 1 file changed, 30 insertions(+), 4 deletions(-)

diff --git a/slides/kernel-input/kernel-input.tex b/slides/kernel-input/kernel-input.tex
index b9488aeb..81b29532 100644
--- a/slides/kernel-input/kernel-input.tex
+++ b/slides/kernel-input/kernel-input.tex
@@ -107,9 +107,8 @@ struct input_dev {
   \end{itemize}
 \end{frame}
 
-\begin{frame}[fragile]{Input subsystem API 3/3}
-  \begin{itemize}
-  \item The events are sent by the driver to the event handler using
+\begin{frame}{Input subsystem API 3/3}
+    The events are sent by the driver to the event handler using
     \code{input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value);}
     \begin{itemize}
     \item The event types are documented in \kerneldoctext{input/event-codes.txt}
@@ -122,7 +121,34 @@ struct input_dev {
     \item The input subsystem provides other wrappers such as
       \kfunc{input_report_key}, \kfunc{input_report_abs}, ...
     \end{itemize}
-  \end{itemize}
+\end{frame}
+
+
+\begin{frame}[fragile]{Example from drivers/hid/usbhid/usbmouse.c}
+  \begin{block}{}
+  \begin{minted}[fontsize=\scriptsize]{c}
+static void usb_mouse_irq(struct urb *urb)
+{
+        struct usb_mouse *mouse = urb->context;
+        signed char *data = mouse->data;
+        struct input_dev *dev = mouse->dev;
+        ...
+
+        input_report_key(dev, BTN_LEFT,   data[0] & 0x01);
+        input_report_key(dev, BTN_RIGHT,  data[0] & 0x02);
+        input_report_key(dev, BTN_MIDDLE, data[0] & 0x04);
+        input_report_key(dev, BTN_SIDE,   data[0] & 0x08);
+        input_report_key(dev, BTN_EXTRA,  data[0] & 0x10);
+
+        input_report_rel(dev, REL_X,     data[1]);
+        input_report_rel(dev, REL_Y,     data[2]);
+        input_report_rel(dev, REL_WHEEL, data[3]);
+
+        input_sync(dev);
+        ...
+}
+  \end{minted}
+  \end{block}
 \end{frame}
 
 \begin{frame}[fragile]{Polled input subclass}




More information about the training-materials-updates mailing list