⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keyboard.h

📁 哈工大的几个人开发的操作系统pyos的部分源码
💻 H
字号:
#ifndef _PYOS_KEYBOARD_H_
#define _PYOS_KEYBOARD_H_

#include "system.h"
#include "buffer.h"

/* 定义键 */
enum enum_pyos_FunctionKey{ keyNotFunctionKey , keyF1 , keyF2 , keyF3 , keyF4 , keyF5 , keyF6 , keyF7 , keyF8 , keyF9 , keyF10 , 
                            keyF11 , keyF12 , keyInsert , keyHome , keyPageUp , keyDelete , keyEnd , keyPageDown ,
                            keyUpArrow , keyLeftArrow , keyDownArrow , keyRightArrow , keyCapsLock , keyShift , keyCtrl ,
                            keyAlt } ;
/* 定义状态键结构 */ 
struct struct_pyos_StateKey{
  bool Down ; // 表示键是被按下
  bool CtrlDown ; // 为true表示按下,下同
  bool AltDown ;
  bool ShiftDown ;
  bool CapsLockDown ; // 按奇数次表示按下,按偶数次表示弹起
  enum_pyos_FunctionKey FunctionKey ;
} ;

/* 定义键盘扫描码结构 
** 两字节,以利于处理一些扩展码
*/
struct struct_pyos_KeyboardScanCode{
  union{
    unsigned short volatile KeyboardScanCode ;
    struct{
      unsigned char volatile KeyboardScanCodeLowChar ;
      unsigned char volatile KeyboardScanCodeHighChar ;
    } ;
  } ;
} ;

const int KeyboardBufferMaxLength = 8 ;  // 缓冲区空间大小为 8 

/* 定义键盘类,处理键盘中断等事项 */
class class_pyos_Keyboard{
  friend class class_pyos_System ;  // 声明 class_pyos_System 为其友元类
  static bool ex ; // 临时变量,以标记此是否是一个扩展码
  
  public:
    /* 定义状态键 */
    static struct_pyos_StateKey StateKey ;
    /* 初始化键盘类,安装键盘中断处理函数 */
    static void Init() ;
    /* 中断处理函数 */
    static void HandleInterrupt() ;
    /* 翻译扫描码函数 */
    static char TraslateScanCodeToAsciiCode( struct_pyos_KeyboardScanCode scan_code ) ; // 处理键盘扫描码,返回一个Ascii值
    /* 开放键盘中断 */
    static void OpenInterrupt() ;
    /* 关闭键盘中断 */
    static void CloseInterrupt() ;
} ;

extern "C" void pyos_asm_interrupt_handle_for_keyboard() ;

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -