Ultibo API
C/C++ API for Ultibo Core
Loading...
Searching...
No Matches
ps2.h
Go to the documentation of this file.
1/*
2 * This file is part of the Ultibo project, https://ultibo.org/
3 *
4 * The MIT License (MIT)
5 *
6 * Copyright (c) 2026 Garry Wood <garry@softoz.com.au>
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a copy
9 * of this software and associated documentation files (the "Software"), to deal
10 * in the Software without restriction, including without limitation the rights
11 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 * copies of the Software, and to permit persons to whom the Software is
13 * furnished to do so, subject to the following conditions:
14 *
15 * The above copyright notice and this permission notice shall be included in
16 * all copies or substantial portions of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 * THE SOFTWARE.
25 */
26#ifndef _ULTIBO_PS2_H
27#define _ULTIBO_PS2_H
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
33#include "ultibo/globalconst.h"
34
37#define PS2_KEYBOARD_COMMAND_SET_LEDS 0xED
38#define PS2_KEYBOARD_COMMAND_ECHO 0xEE
39#define PS2_KEYBOARD_COMMAND_SCANCODE 0xF0
40#define PS2_KEYBOARD_COMMAND_IDENTIFY 0xF2
41#define PS2_KEYBOARD_COMMAND_SET_RATE_DELAY 0xF3
42#define PS2_KEYBOARD_COMMAND_ENABLE_SCAN 0xF4
43#define PS2_KEYBOARD_COMMAND_DISABLE_SCAN 0xF5
44#define PS2_KEYBOARD_COMMAND_SET_DEFAULTS 0xF6
45#define PS2_KEYBOARD_COMMAND_SET_ALL_TYPEMATIC_ONLY 0xF7
46#define PS2_KEYBOARD_COMMAND_SET_ALL_MAKE_RELEASE 0xF8
47#define PS2_KEYBOARD_COMMAND_SET_ALL_MAKE_ONLY 0xF9
48#define PS2_KEYBOARD_COMMAND_SET_ALL_MAKE_TYPEMATIC 0xFA
49#define PS2_KEYBOARD_COMMAND_SET_TYPEMATIC_ONLY 0xFB
50#define PS2_KEYBOARD_COMMAND_SET_MAKE_RELEASE 0xFC
51#define PS2_KEYBOARD_COMMAND_SET_MAKE_ONLY 0xFD
52#define PS2_KEYBOARD_COMMAND_RESEND 0xFE
53#define PS2_KEYBOARD_COMMAND_RESET 0xFF
54
55#define PS2_KEYBOARD_SET_LEDS_SCROLLLOCK (1 << 0)
56#define PS2_KEYBOARD_SET_LEDS_NUMLOCK (1 << 1)
57#define PS2_KEYBOARD_SET_LEDS_CAPSLOCK (1 << 2)
58
59#define PS2_KEYBOARD_SCANCODE_GET 0
60#define PS2_KEYBOARD_SCANCODE_SET1 1
61#define PS2_KEYBOARD_SCANCODE_SET2 2
62#define PS2_KEYBOARD_SCANCODE_SET3 3
63
64#define PS2_KEYBOARD_SET_REPEAT_RATE_MASK 0x0F
65#define PS2_KEYBOARD_SET_DELAY_MASK 0x70
67
68#define PS2_KEYBOARD_SET_REPEAT_RATE_30_0 0x00
69#define PS2_KEYBOARD_SET_REPEAT_RATE_26_7 0x01
70#define PS2_KEYBOARD_SET_REPEAT_RATE_24_0 0x02
71#define PS2_KEYBOARD_SET_REPEAT_RATE_21_8 0x03
72#define PS2_KEYBOARD_SET_REPEAT_RATE_20_7 0x04
73#define PS2_KEYBOARD_SET_REPEAT_RATE_18_5 0x05
74#define PS2_KEYBOARD_SET_REPEAT_RATE_17_1 0x06
75#define PS2_KEYBOARD_SET_REPEAT_RATE_16_0 0x07
76#define PS2_KEYBOARD_SET_REPEAT_RATE_15_0 0x08
77#define PS2_KEYBOARD_SET_REPEAT_RATE_13_3 0x09
78#define PS2_KEYBOARD_SET_REPEAT_RATE_12_0 0x0A
79#define PS2_KEYBOARD_SET_REPEAT_RATE_10_9 0x0B
80#define PS2_KEYBOARD_SET_REPEAT_RATE_10_0 0x0C
81#define PS2_KEYBOARD_SET_REPEAT_RATE_9_2 0x0D
82#define PS2_KEYBOARD_SET_REPEAT_RATE_8_6 0x0E
83#define PS2_KEYBOARD_SET_REPEAT_RATE_8_0 0x0F
84#define PS2_KEYBOARD_SET_REPEAT_RATE_7_5 0x10
85#define PS2_KEYBOARD_SET_REPEAT_RATE_6_7 0x11
86#define PS2_KEYBOARD_SET_REPEAT_RATE_6_0 0x12
87#define PS2_KEYBOARD_SET_REPEAT_RATE_5_5 0x13
88#define PS2_KEYBOARD_SET_REPEAT_RATE_5_0 0x14
89#define PS2_KEYBOARD_SET_REPEAT_RATE_4_6 0x15
90#define PS2_KEYBOARD_SET_REPEAT_RATE_4_3 0x16
91#define PS2_KEYBOARD_SET_REPEAT_RATE_4_0 0x17
92#define PS2_KEYBOARD_SET_REPEAT_RATE_3_7 0x18
93#define PS2_KEYBOARD_SET_REPEAT_RATE_3_3 0x19
94#define PS2_KEYBOARD_SET_REPEAT_RATE_3_0 0x1A
95#define PS2_KEYBOARD_SET_REPEAT_RATE_2_7 0x1B
96#define PS2_KEYBOARD_SET_REPEAT_RATE_2_5 0x1C
97#define PS2_KEYBOARD_SET_REPEAT_RATE_2_3 0x1D
98#define PS2_KEYBOARD_SET_REPEAT_RATE_2_1 0x1E
99#define PS2_KEYBOARD_SET_REPEAT_RATE_2_0 0x1F
100
101#define PS2_KEYBOARD_SET_DELAY_250 0x00
102#define PS2_KEYBOARD_SET_DELAY_500 0x10
103#define PS2_KEYBOARD_SET_DELAY_750 0x20
104#define PS2_KEYBOARD_SET_DELAY_1000 0x30
105
107#define PS2_MOUSE_COMMAND_RESET 0xFF
108#define PS2_MOUSE_COMMAND_RESEND 0xFE
109#define PS2_MOUSE_COMMAND_SET_DEFAULTS 0xF6
110#define PS2_MOUSE_COMMAND_DISABLE_REPORT 0xF5
111#define PS2_MOUSE_COMMAND_ENABLE_REPORT 0xF4
112#define PS2_MOUSE_COMMAND_SET_SAMPLE_RATE 0xF3
113#define PS2_MOUSE_COMMAND_GET_DEVICE_ID 0xF2
114#define PS2_MOUSE_COMMAND_SET_REMOTE_MODE 0xF0
115#define PS2_MOUSE_COMMAND_SET_WRAP_MODE 0xEE
116#define PS2_MOUSE_COMMAND_RESET_WRAP_MODE 0xEC
117#define PS2_MOUSE_COMMAND_READ_DATA 0xEB
118#define PS2_MOUSE_COMMAND_SET_STREAM_MODE 0xEA
119#define PS2_MOUSE_COMMAND_STATUS_REQUEST 0xE9
120#define PS2_MOUSE_COMMAND_SET_RESOLUTION 0xE8
121
122#define PS2_MOUSE_COMMAND_SAMPLE_RATE_10 10
123#define PS2_MOUSE_COMMAND_SAMPLE_RATE_20 20
124#define PS2_MOUSE_COMMAND_SAMPLE_RATE_40 40
125#define PS2_MOUSE_COMMAND_SAMPLE_RATE_60 60
126#define PS2_MOUSE_COMMAND_SAMPLE_RATE_80 80
127#define PS2_MOUSE_COMMAND_SAMPLE_RATE_100 100
128#define PS2_MOUSE_COMMAND_SAMPLE_RATE_200 200
129
130#define PS2_MOUSE_COMMAND_RESOLUTION_1 0x00
131#define PS2_MOUSE_COMMAND_RESOLUTION_2 0x01
132#define PS2_MOUSE_COMMAND_RESOLUTION_4 0x02
133#define PS2_MOUSE_COMMAND_RESOLUTION_5 0x03
134
136#define PS2_RESPONSE_NONE 0x00
137#define PS2_RESPONSE_SELF_TEST_PASS 0xAA
138#define PS2_RESPONSE_ECHO 0xEE
139#define PS2_RESPONSE_ACK 0xFA
140#define PS2_RESPONSE_SELFTEST_FAIL1 0xFC
141#define PS2_RESPONSE_SELFTEST_FAIL2 0xFD
142#define PS2_RESPONSE_RESEND 0xFE
143#define PS2_RESPONSE_ERROR 0xFF
144
146#define PS2_MOUSE_BITS_YO (1 << 7)
147#define PS2_MOUSE_BITS_XO (1 << 6)
148#define PS2_MOUSE_BITS_YS (1 << 5)
149#define PS2_MOUSE_BITS_XS (1 << 4)
150#define PS2_MOUSE_BITS_AO (1 << 3)
151#define PS2_MOUSE_BITS_BM (1 << 2)
152#define PS2_MOUSE_BITS_BR (1 << 1)
153#define PS2_MOUSE_BITS_BL (1 << 0)
154
156#define PS2_SCANCODE_MAKE 0
157#define PS2_SCANCODE_BREAK 1
158
160#define PS2_SCANCODE_PC104_COUNT 104
161#define PS2_SCANCODE_ACPI_COUNT 3
162#define PS2_SCANCODE_MULTIMEDIA_COUNT 18
163#define PS2_SCANCODE_COUNT PS2_SCANCODE_PC104_COUNT + PS2_SCANCODE_ACPI_COUNT + PS2_SCANCODE_MULTIMEDIA_COUNT
164
166typedef uint8_t PS2_SCANCODE_DATA[PS2_SCANCODE_COUNT * 2][10];
167
171{
172 uint8_t scancodeset;
173 uint8_t scancode[8];
174};
175
176
180{
181 uint8_t mousebits;
182 uint8_t mousex;
183 uint8_t mousey;
184};
185
187
194uint32_t STDCALL keyboard_leds_to_ps2_leds(uint32_t leds, uint8_t *ps2leds);
195
203uint32_t STDCALL keyboard_rate_and_delay_to_ps2_typematic(uint32_t rate, uint32_t delay, uint8_t *ps2typematic);
204
212uint32_t STDCALL ps2_keyboard_scancode_match(PS2_KEYBOARD_SCANCODE *keyboardscancode, int32_t *index);
213
221uint32_t STDCALL ps2_keyboard_scancode_to_scan_code(PS2_KEYBOARD_SCANCODE *keyboardscancode, int32_t index, uint16_t *scancode);
222
229uint32_t STDCALL ps2_keyboard_scancode_to_modifiers(PS2_KEYBOARD_SCANCODE *keyboardscancode, int32_t index, uint32_t *modifiers);
230
237uint32_t STDCALL mouse_sample_rate_to_ps2_sample_rate(uint32_t rate, uint8_t *ps2rate);
238
247uint32_t STDCALL ps2_mouse_packet_to_mouse_data(PS2_MOUSE_PACKET *mousepacket, MOUSE_DATA *mousedata, uint32_t flags, uint32_t rotation);
248
249#ifdef __cplusplus
250}
251#endif
252
253#endif // _ULTIBO_PS2_H
#define STDCALL
Definition globaltypes.h:45
struct _MOUSE_DATA MOUSE_DATA
Definition mouse.h:157
#define PS2_SCANCODE_COUNT
Definition ps2.h:163
uint32_t STDCALL ps2_keyboard_scancode_to_modifiers(PS2_KEYBOARD_SCANCODE *keyboardscancode, int32_t index, uint32_t *modifiers)
Return the Keyboard Modifiers flags for a PS/2 scancode value.
struct _PS2_KEYBOARD_SCANCODE PS2_KEYBOARD_SCANCODE
Definition ps2.h:169
uint32_t STDCALL ps2_keyboard_scancode_to_scan_code(PS2_KEYBOARD_SCANCODE *keyboardscancode, int32_t index, uint16_t *scancode)
Return the Keyboard Scan Code value for a PS/2 scancode value.
struct _PS2_MOUSE_PACKET PS2_MOUSE_PACKET
Definition ps2.h:178
uint32_t STDCALL keyboard_leds_to_ps2_leds(uint32_t leds, uint8_t *ps2leds)
Map the Keyboard LED values to the PS/2 Keyboard LED values.
uint32_t STDCALL keyboard_rate_and_delay_to_ps2_typematic(uint32_t rate, uint32_t delay, uint8_t *ps2typematic)
Translate the Keyboard Repeat Rate and Delay values to the PS/2 Keyboard Typematic value.
uint32_t STDCALL ps2_mouse_packet_to_mouse_data(PS2_MOUSE_PACKET *mousepacket, MOUSE_DATA *mousedata, uint32_t flags, uint32_t rotation)
Translate a PS/2 Mouse Packet into a Mouse Data structure.
uint32_t STDCALL mouse_sample_rate_to_ps2_sample_rate(uint32_t rate, uint8_t *ps2rate)
Translate a Mouse Sample Rate value to the PS/2 Mouse Sample Rate value.
uint8_t PS2_SCANCODE_DATA[PS2_SCANCODE_COUNT *2][10]
Definition ps2.h:166
uint32_t STDCALL ps2_keyboard_scancode_match(PS2_KEYBOARD_SCANCODE *keyboardscancode, int32_t *index)
Check a set of scancode bytes against the specified PS/2 Scancode set for a match.
Definition ps2.h:171
uint8_t scancodeset
Definition ps2.h:172
uint8_t scancode[8]
Definition ps2.h:173
Definition ps2.h:180
uint8_t mousebits
Bits (See PS2_MOUSE_BITS_* above).
Definition ps2.h:181
uint8_t mousey
Y-Axis Movement Value (Relative).
Definition ps2.h:183
uint8_t mousex
X-Axis Movement Value (Relative).
Definition ps2.h:182