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

📄 keyboard.c

📁 是经典的UNIX的部分源代码
💻 C
字号:
#include "interrupt.h"
#include "io.h"
#include "message.h"
#include "kernel.h"

/*****************************************************
* 下面是声明                                         *
*****************************************************/

void keyboard_asm_handle_for_keyboard_interrupt() ;

void keyboard_handle_for_keyboard_interrupt() ;


/*****************************************************
* 下面是定义                                         *
*****************************************************/

static const int KEYBOARD_KEYBOARD_INTERRUPT_NUMBER = 0x21 ;
static const int KEYBOARD_KEYBOARD_INTERRUPT_IRQ_NUMBER = 1 ;

static int keyboard_is_extention_key_scan_code ;
/*****************************************************
* 下面是函数的实现                                   *
*****************************************************/

void keyboard_init()
{
  keyboard_is_extention_key_scan_code = 0 ;

  // 安装中断处理函数
  interrupt_install_handle_for_interrupt( KEYBOARD_KEYBOARD_INTERRUPT_NUMBER , keyboard_asm_handle_for_keyboard_interrupt ) ;

  // 设置中断屏蔽字
  interrupt_set_interrupt_mask_word( KEYBOARD_KEYBOARD_INTERRUPT_IRQ_NUMBER , 1 ) ;
}

// 键盘中断处理函数
void keyboard_handle_for_keyboard_interrupt()
{
  unsigned char ch = io_read_from_io_port( 0x60 ) ;

  // 先过滤掉特殊字节,扩展码,及弹起键
  if( ch == 0x0 || ch > 0x80){ // 0x0 表示按键产生错误 > 0x80 表示弹起键(包括 0xe0 的扩展键)
    return ; 
  }
  else{ 
    // 翻译键盘消息,并构造一个消息,发送给内核
    switch( ch ){
      case 0x1 :
        ch = 'r' ; // 本来是 ESC 键,这里用 R 表示
        break ;
      case 0x17 :
        ch = 'i' ;
        break ;
      case 0x24 :
        ch = 'j' ;
        break ;
      case 0x25 :
        ch = 'k' ;
        break ;
      case 0x26 :
        ch = 'l' ;
        break ;
      default :
        ch = 0 ;
    }
    if( ch ){
      struct message_message_struct message ;
      message.message_type = MESSAGE_KEYBOARD_MESSAGE ;
      message.key = ch ;
      message_put_message( &kernel_message_queue , message ) ;
    }
  }
}

⌨️ 快捷键说明

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