适配arceos的X86键盘驱动需求
支持ps2键盘
即能从键盘特定端口读入数据,处理中断等
支持keymap
建立键盘码和返回值的映射表
键盘码参考文件https://wenku.baidu.com/view/438682116edb6f1aff001fb2?aggId=4566dd740d22590102020740be1e650e53eacf4f&fr=catalogMain_text_ernie_recall_backup_new%3Awk_recommend_main_graph&wkts=1699936794712&bdQuery=ps2%E9%94%AE%E7%9B%98%E7%BC%96%E7%A0%81
返回值参考文件https://github.com/Wangzhike/HIT-Linux-0.11/blob/master/linux-0.11/kernel/chr_drv/keyboard.S
字符 | 返回值 | 字符 | 返回值 | 字符 | 返回值 | 字符 | 返回值 |
---|---|---|---|---|---|---|---|
s0 | 00 | esc | 01 | 1 | 02 | 2 | 03 |
3 | 04 | 4 | 05 | 5 | 06 | 6 | 07 |
7 | 08 | 8 | 09 | 9 | 0A | 0 | 0B |
+ | 0C | ‘ | 0D | bs | 0E | tab | 0F |
q | 10 | w | 11 | e | 12 | r | 13 |
t | 14 | y | 15 | u | 16 | i | 17 |
o | 18 | p | 19 | } | 1A | ^ | 1B |
enter | 1C | ctrl | 1D | a | 1E | s | 1F |
字符 | 返回值 | 字符 | 返回值 | 字符 | 返回值 | 字符 | 返回值 |
---|---|---|---|---|---|---|---|
d | 20 | f | 21 | g | 22 | h | 23 |
j | 24 | k | 25 | l | 26 | | | 27 |
{ | 28 | para | 29 | shift | 2A | , | 2B |
z | 2C | x | 2D | c | 2E | v | 2F |
b | 30 | n | 31 | m | 32 | , | 33 |
. | 34 | - | 35 | rshift | 36 | * | 37 |
alt | 38 | sp | 39 | caps | 3A | f1 | 3B |
f2 | 3C | f3 | 3D | f4 | 3E | f5 | 3F |
字符 | 返回值 | 字符 | 返回值 | 字符 | 返回值 | 字符 | 返回值 |
---|---|---|---|---|---|---|---|
f6 | 40 | f7 | 41 | f8 | 42 | f9 | 43 |
f10 | 44 | num | 45 | scr | 46 | home | 47 |
up | 48 | pgup | 49 | - | 4A | left | 4B |
n5 | 4C | right | 4D | + | 4E | end | 4F |
dn | 50 | pgdn | 51 | ins | 52 | del | 53 |
sysreq | 54 | ? | 55 | < | 56 | f11 | 57 |
f12 | 58 | 59 | 5A | 5B |
字符 | 返回值 | 字符 | 返回值 | 字符 | 返回值 | 字符 | 返回值 |
---|---|---|---|---|---|---|---|
9C | unctrl | 9D | 9E | 9F | |||
A8 | A9 | unlshift | AA | AB | |||
B4 | B5 | unfshift | B6 | B7 | |||
unalt | B8 | B9 | uncaps | BA | BB | ||
e0 | E0 | e1 | E1 | E2 | E3 |
支持拓展键
说明:因为默认是从缓冲区读取一个u8大小的字符,但是有的键盘码占两位(甚至三位),所以我们要做特殊处理
特别注意:E0拓展键
需读取两个字符,即第一个u8字符为E0,还要继续读取一个u8字符才能知道这个码对应的是什么。
Rctrl、RAlt键
当这些键按下的时候,我们需要处理他们和crtl和win的矛盾关系
如crtl和Rctrl同时按下怎么办?可能需要加两个判断
U_ARROW、L_ARROW、D_ARROW、R_ARROW等键
up | down | left | right | |
---|---|---|---|---|
键码通码 | E0 75 | E0 72 | E0 6B | E0 74 |
ins | home | pgup | del | |
E0 70 | E0 6C | E0 7D | E0 71 | |
end | pgdn | KP / | Kp end | |
E0 69 | E0 7A | E0 4A | E0 5A |
小数字键盘上的键处理
字符 | * | - | + | 0 | 1 | 2 | 3 |
---|---|---|---|---|---|---|---|
键码通码 | 7C | 7B | 79 | 70 | 69 | 72 | 7A |
字符 | 4 | 5 | 6 | 7 | 8 | 9 | |
键码通码 | 6B | 73 | 74 | 6C | 75 | 7D |
特别注意:E1拓展键-pause
需读取三个字符
特别注意:F0断码
需读取两个字符,且对于ctrl、shift、alt键的断码输出对应的值
支持系统input接口
目前想法是将读取到的字符存入KeyboardBuffer缓冲区,然后在其他部分可以调用该缓冲区