keyboard.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #pragma once
  2. #include "../../common/glib.h"
  3. // 定义键盘循环队列缓冲区大小为100bytes
  4. #define keyboard_buffer_size 100
  5. /**
  6. * @brief 键盘循环队列缓冲区结构体
  7. *
  8. */
  9. struct keyboard_input_buffer
  10. {
  11. unsigned char *ptr_head;
  12. unsigned char *ptr_tail;
  13. int count;
  14. unsigned char buffer[keyboard_buffer_size];
  15. };
  16. #define PORT_KEYBOARD_DATA 0x60
  17. #define PORT_KEYBOARD_STATUS 0x64
  18. #define PORT_KEYBOARD_CONTROL 0x64
  19. #define KEYBOARD_COMMAND_WRITE 0x60 // 向键盘发送配置命令
  20. #define KEYBOARD_COMMAND_READ 0x20 // 读取键盘的配置值
  21. #define KEYBOARD_PARAM_INIT 0x47 // 初始化键盘控制器的配置值
  22. // ========= 检测键盘输入/输出缓冲区是否已满
  23. #define KEYBOARD_FLAG_OUTBUF_FULL 0x01 // 键盘的输出缓冲区已满标志位
  24. #define KEYBOARD_FLAG_INBUF_FULL 0x02 // 键盘的输入缓冲区已满标志位
  25. // 等待向键盘控制器写入信息完成
  26. #define wait_keyboard_write() while (io_in8(PORT_KEYBOARD_STATUS) & KEYBOARD_FLAG_INBUF_FULL)
  27. // 等待从键盘控制器读取信息完成
  28. #define wait_keyboard_read() while (io_in8(PORT_KEYBOARD_STATUS) & KEYBOARD_FLAG_OUTBUF_FULL)
  29. /**
  30. * @brief 初始化键盘驱动程序的函数
  31. *
  32. */
  33. void keyboard_init();
  34. /**
  35. * @brief 键盘驱动卸载函数
  36. *
  37. */
  38. void keyboard_exit();