1 use bitfield_struct::bitfield; 2 3 pub mod ps2_device; 4 5 /// PS2键盘控制器的状态寄存器 6 #[bitfield(u8)] 7 pub struct Ps2StatusRegister { 8 /// 输出缓冲区满标志 9 /// 10 /// (必须在尝试从 IO 端口 0x60 读取数据之前设置) 11 pub outbuf_full: bool, 12 13 /// 输入缓冲区满标志 14 /// 15 /// (在尝试向 IO 端口 0x60 或 IO 端口 0x64 写入数据之前必须清除) 16 pub inbuf_full: bool, 17 18 /// 系统标志 19 /// 20 /// 如果系统通过自检 (POST),则意味着在复位时被清除并由固件设置(通过 PS/2 控制器配置字节) 21 pub system_flag: bool, 22 23 /// 命令/数据标志 24 /// 25 /// (0 = 写入输入缓冲区的数据是 PS/2 设备的数据,1 = 写入输入缓冲区的数据是 PS/2 控制器命令的数据) 26 pub command_data: bool, 27 28 /// 未知标志1 29 /// 30 /// 可能是“键盘锁”(现代系统中更可能未使用) 31 pub unknown1: bool, 32 33 /// 未知标志2 34 /// 35 /// 可能是“接收超时”或“第二个 PS/2 端口输出缓冲区已满” 36 pub unknown2: bool, 37 /// 超时错误标志 38 /// 39 /// 超时错误(0 = 无错误,1 = 超时错误) 40 pub timeout_error: bool, 41 42 /// 奇偶校验错误标志 43 /// 44 /// (0 = 无错误,1 = 奇偶校验错误) 45 pub parity_error: bool, 46 } 47