1use bitfield_struct::bitfield;
7use inspect::Inspect;
8use open_enum::open_enum;
9
10#[derive(Inspect)]
11#[bitfield(u8)]
12pub struct OutputPort {
13 pub reset: bool,
14 pub a20_gate: bool,
15 pub aux_clock: bool,
16 pub aux_data: bool,
17 pub keyboard_output_buffered: bool,
18 pub mouse_output_buffered: bool,
19 pub clock: bool,
20 pub data: bool,
21}
22
23open_enum! {
24 #[derive(Inspect)]
25 #[inspect(debug)]
26 pub enum ControllerCommand: u8 {
27 READ_COMMAND_BYTE = 0x20,
28 WRITE_COMMAND_BYTE = 0x60,
29 UNKNOWN_A1 = 0xA1, PWD_CHECK = 0xA4,
31 DISABLE_AUX_INTERFACE = 0xA7,
32 ENABLE_AUX_INTERFACE = 0xA8,
33 CHECK_AUX_INTERFACE = 0xA9,
34 SELF_TEST = 0xAA,
35 CHECK_INTERFACE = 0xAB,
36 DISABLE_KEYBOARD = 0xAD,
37 ENABLE_KEYBOARD = 0xAE,
38 READ_INPUT_PORT = 0xC0,
39 READ_OUT_INPUT_PORT_LO = 0xC1,
40 READ_OUT_INPUT_PORT_HI = 0xC2,
41 READ_OUTPUT_PORT = 0xD0,
42 WRITE_OUTPUT_PORT = 0xD1,
43 WRITE_OUTPUT_BUFFER = 0xD2,
44 WRITE_AUX_OUTPUT_BUFFER = 0xD3,
45 WRITE_AUX_DEVICE = 0xD4,
46 PULSE_OUTPUT_F0 = 0xF0,
47 PULSE_OUTPUT_F1 = 0xF1,
48 PULSE_OUTPUT_F2 = 0xF2,
49 PULSE_OUTPUT_F3 = 0xF3,
50 PULSE_OUTPUT_F4 = 0xF4,
51 PULSE_OUTPUT_F5 = 0xF5,
52 PULSE_OUTPUT_F6 = 0xF6,
53 PULSE_OUTPUT_F7 = 0xF7,
54 PULSE_OUTPUT_F8 = 0xF8,
55 PULSE_OUTPUT_F9 = 0xF9,
56 PULSE_OUTPUT_FA = 0xFA,
57 PULSE_OUTPUT_FB = 0xFB,
58 PULSE_OUTPUT_FC = 0xFC,
59 PULSE_OUTPUT_FD = 0xFD,
60 PULSE_OUTPUT_FE = 0xFE,
61 PULSE_OUTPUT_FF = 0xFF,
62 }
63}
64
65#[derive(Inspect)]
66#[bitfield(u8)]
67pub struct KeyboardStatus {
68 pub output_buffer_full: bool,
69 pub input_buffer_full: bool,
70 pub keyboard_self_test: bool,
71 pub input_buffer_for_controller: bool,
72 pub keyboard_unlocked: bool,
73 pub output_buffer_for_mouse: bool,
74 pub timeout_error: bool,
75 pub parity_error: bool,
76}
77
78#[derive(Inspect)]
79#[bitfield(u8)]
80pub struct CommandFlag {
81 pub allow_keyboard_interrupts: bool,
82 pub allow_mouse_interrupts: bool,
83 pub keyboard_self_test: bool,
84 pub unused: bool,
85 pub disable_keyboard: bool,
86 pub disable_mouse: bool,
87 pub enable_scan_code: bool,
88 pub unused2: bool,
89}