1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- .. include:: <isonum.txt>
- ===================
- The userio Protocol
- ===================
- :Copyright: |copy| 2015 Stephen Chandler Paul <thatslyude@gmail.com>
- Sponsored by Red Hat
- Introduction
- =============
- This module is intended to try to make the lives of input driver developers
- easier by allowing them to test various serio devices (mainly the various
- touchpads found on laptops) without having to have the physical device in front
- of them. userio accomplishes this by allowing any privileged userspace program
- to directly interact with the kernel's serio driver and control a virtual serio
- port from there.
- Usage overview
- ==============
- In order to interact with the userio kernel module, one simply opens the
- /dev/userio character device in their applications. Commands are sent to the
- kernel module by writing to the device, and any data received from the serio
- driver is read as-is from the /dev/userio device. All of the structures and
- macros you need to interact with the device are defined in <linux/userio.h> and
- <linux/serio.h>.
- Command Structure
- =================
- The struct used for sending commands to /dev/userio is as follows::
- struct userio_cmd {
- __u8 type;
- __u8 data;
- };
- ``type`` describes the type of command that is being sent. This can be any one
- of the USERIO_CMD macros defined in <linux/userio.h>. ``data`` is the argument
- that goes along with the command. In the event that the command doesn't have an
- argument, this field can be left untouched and will be ignored by the kernel.
- Each command should be sent by writing the struct directly to the character
- device. In the event that the command you send is invalid, an error will be
- returned by the character device and a more descriptive error will be printed
- to the kernel log. Only one command can be sent at a time, any additional data
- written to the character device after the initial command will be ignored.
- To close the virtual serio port, just close /dev/userio.
- Commands
- ========
- USERIO_CMD_REGISTER
- ~~~~~~~~~~~~~~~~~~~
- Registers the port with the serio driver and begins transmitting data back and
- forth. Registration can only be performed once a port type is set with
- USERIO_CMD_SET_PORT_TYPE. Has no argument.
- USERIO_CMD_SET_PORT_TYPE
- ~~~~~~~~~~~~~~~~~~~~~~~~
- Sets the type of port we're emulating, where ``data`` is the port type being
- set. Can be any of the macros from <linux/serio.h>. For example: SERIO_8042
- would set the port type to be a normal PS/2 port.
- USERIO_CMD_SEND_INTERRUPT
- ~~~~~~~~~~~~~~~~~~~~~~~~~
- Sends an interrupt through the virtual serio port to the serio driver, where
- ``data`` is the interrupt data being sent.
- Userspace tools
- ===============
- The userio userspace tools are able to record PS/2 devices using some of the
- debugging information from i8042, and play back the devices on /dev/userio. The
- latest version of these tools can be found at:
- https://github.com/Lyude/ps2emu
|