]>
Commit | Line | Data |
---|---|---|
730518f2 MCC |
1 | .. include:: <isonum.txt> |
2 | ||
3 | =================== | |
4 | The userio Protocol | |
5 | =================== | |
6 | ||
7 | ||
8 | :Copyright: |copy| 2015 Stephen Chandler Paul <thatslyude@gmail.com> | |
9 | ||
10 | Sponsored by Red Hat | |
11 | ||
12 | ||
13 | Introduction | |
14 | ============= | |
15 | ||
16 | This module is intended to try to make the lives of input driver developers | |
5523662e SCP |
17 | easier by allowing them to test various serio devices (mainly the various |
18 | touchpads found on laptops) without having to have the physical device in front | |
19 | of them. userio accomplishes this by allowing any privileged userspace program | |
20 | to directly interact with the kernel's serio driver and control a virtual serio | |
21 | port from there. | |
22 | ||
730518f2 MCC |
23 | Usage overview |
24 | ============== | |
25 | ||
26 | In order to interact with the userio kernel module, one simply opens the | |
5523662e SCP |
27 | /dev/userio character device in their applications. Commands are sent to the |
28 | kernel module by writing to the device, and any data received from the serio | |
29 | driver is read as-is from the /dev/userio device. All of the structures and | |
30 | macros you need to interact with the device are defined in <linux/userio.h> and | |
31 | <linux/serio.h>. | |
32 | ||
730518f2 MCC |
33 | Command Structure |
34 | ================= | |
35 | ||
36 | The struct used for sending commands to /dev/userio is as follows:: | |
5523662e SCP |
37 | |
38 | struct userio_cmd { | |
39 | __u8 type; | |
40 | __u8 data; | |
41 | }; | |
42 | ||
730518f2 MCC |
43 | ``type`` describes the type of command that is being sent. This can be any one |
44 | of the USERIO_CMD macros defined in <linux/userio.h>. ``data`` is the argument | |
5523662e SCP |
45 | that goes along with the command. In the event that the command doesn't have an |
46 | argument, this field can be left untouched and will be ignored by the kernel. | |
47 | Each command should be sent by writing the struct directly to the character | |
48 | device. In the event that the command you send is invalid, an error will be | |
49 | returned by the character device and a more descriptive error will be printed | |
50 | to the kernel log. Only one command can be sent at a time, any additional data | |
51 | written to the character device after the initial command will be ignored. | |
5523662e | 52 | |
730518f2 MCC |
53 | To close the virtual serio port, just close /dev/userio. |
54 | ||
55 | Commands | |
56 | ======== | |
57 | ||
58 | USERIO_CMD_REGISTER | |
59 | ~~~~~~~~~~~~~~~~~~~ | |
5523662e | 60 | |
730518f2 | 61 | Registers the port with the serio driver and begins transmitting data back and |
5523662e SCP |
62 | forth. Registration can only be performed once a port type is set with |
63 | USERIO_CMD_SET_PORT_TYPE. Has no argument. | |
64 | ||
730518f2 MCC |
65 | USERIO_CMD_SET_PORT_TYPE |
66 | ~~~~~~~~~~~~~~~~~~~~~~~~ | |
67 | ||
68 | Sets the type of port we're emulating, where ``data`` is the port type being | |
5523662e SCP |
69 | set. Can be any of the macros from <linux/serio.h>. For example: SERIO_8042 |
70 | would set the port type to be a normal PS/2 port. | |
71 | ||
730518f2 MCC |
72 | USERIO_CMD_SEND_INTERRUPT |
73 | ~~~~~~~~~~~~~~~~~~~~~~~~~ | |
74 | ||
75 | Sends an interrupt through the virtual serio port to the serio driver, where | |
76 | ``data`` is the interrupt data being sent. | |
77 | ||
78 | Userspace tools | |
79 | =============== | |
5523662e | 80 | |
730518f2 | 81 | The userio userspace tools are able to record PS/2 devices using some of the |
5523662e SCP |
82 | debugging information from i8042, and play back the devices on /dev/userio. The |
83 | latest version of these tools can be found at: | |
84 | ||
85 | https://github.com/Lyude/ps2emu |