mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-09 23:46:48 +00:00
47 lines
1.3 KiB
C
47 lines
1.3 KiB
C
#pragma once
|
|
|
|
#include "../../common/glib.h"
|
|
|
|
// 定义键盘循环队列缓冲区大小为100bytes
|
|
#define keyboard_buffer_size 100
|
|
|
|
/**
|
|
* @brief 键盘循环队列缓冲区结构体
|
|
*
|
|
*/
|
|
struct keyboard_input_buffer
|
|
{
|
|
unsigned char *ptr_head;
|
|
unsigned char *ptr_tail;
|
|
int count;
|
|
unsigned char buffer[keyboard_buffer_size];
|
|
};
|
|
|
|
#define PORT_KEYBOARD_DATA 0x60
|
|
#define PORT_KEYBOARD_STATUS 0x64
|
|
#define PORT_KEYBOARD_CONTROL 0x64
|
|
|
|
#define KEYBOARD_COMMAND_WRITE 0x60 // 向键盘发送配置命令
|
|
#define KEYBOARD_COMMAND_READ 0x20 // 读取键盘的配置值
|
|
#define KEYBOARD_PARAM_INIT 0x47 // 初始化键盘控制器的配置值
|
|
|
|
// ========= 检测键盘输入/输出缓冲区是否已满
|
|
#define KEYBOARD_FLAG_OUTBUF_FULL 0x01 // 键盘的输出缓冲区已满标志位
|
|
#define KEYBOARD_FLAG_INBUF_FULL 0x02 // 键盘的输入缓冲区已满标志位
|
|
|
|
// 等待向键盘控制器写入信息完成
|
|
#define wait_keyboard_write() while (io_in8(PORT_KEYBOARD_STATUS) & KEYBOARD_FLAG_INBUF_FULL)
|
|
// 等待从键盘控制器读取信息完成
|
|
#define wait_keyboard_read() while (io_in8(PORT_KEYBOARD_STATUS) & KEYBOARD_FLAG_OUTBUF_FULL)
|
|
|
|
/**
|
|
* @brief 初始化键盘驱动程序的函数
|
|
*
|
|
*/
|
|
void keyboard_init();
|
|
|
|
/**
|
|
* @brief 键盘驱动卸载函数
|
|
*
|
|
*/
|
|
void keyboard_exit(); |