适配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

字符返回值字符返回值字符返回值字符返回值
s000esc01102203
304405506607
70880990A00B
+0C0Dbs0Etab0F
q10w11e12r13
t14y15u16i17
o18p19}1A^1B
enter1Cctrl1Da1Es1F
字符返回值字符返回值字符返回值字符返回值
d20f21g22h23
j24k25l26|27
{28para29shift2A,2B
z2Cx2Dc2Ev2F
b30n31m32,33
.34-35rshift36*37
alt38sp39caps3Af13B
f23Cf33Df43Ef53F
字符返回值字符返回值字符返回值字符返回值
f640f741f842f943
f1044num45scr46home47
up48pgup49-4Aleft4B
n54Cright4D+4Eend4F
dn50pgdn51ins52del53
sysreq54?55<56f1157
f1258595A5B
字符返回值字符返回值字符返回值字符返回值
9Cunctrl9D9E9F
A8A9unlshiftAAAB
B4B5unfshiftB6B7
unaltB8B9uncapsBABB
e0E0e1E1E2E3

支持拓展键

说明:因为默认是从缓冲区读取一个u8大小的字符,但是有的键盘码占两位(甚至三位),所以我们要做特殊处理

特别注意:E0拓展键

需读取两个字符,即第一个u8字符为E0,还要继续读取一个u8字符才能知道这个码对应的是什么。

Rctrl、RAlt键

当这些键按下的时候,我们需要处理他们和crtl和win的矛盾关系

如crtl和Rctrl同时按下怎么办?可能需要加两个判断

U_ARROW、L_ARROW、D_ARROW、R_ARROW等键

updownleftright
键码通码E0 75E0 72E0 6BE0 74
inshomepgupdel
E0 70E0 6CE0 7DE0 71
endpgdnKP /Kp end
E0 69E0 7AE0 4AE0 5A

小数字键盘上的键处理

字符*-+0123
键码通码7C7B797069727A
字符456789
键码通码6B73746C757D

特别注意:E1拓展键-pause

需读取三个字符

特别注意:F0断码

需读取两个字符,且对于ctrl、shift、alt键的断码输出对应的值

支持系统input接口

目前想法是将读取到的字符存入KeyboardBuffer缓冲区,然后在其他部分可以调用该缓冲区