orange's学习--第七章:g处理按键的意义单独出来
keyboard_read( )这个函数只是负责读取扫描码就可以了,至于如何处理,不应该是它的职责,因为只有更高层次的软件才能根据具体情况做出不同的反应。把处理按键的逻辑放到tty的in_process(u32 key)函数处理。
不管是单键还是组合键,都使用一个32位整型数key来表示。因为可打印字符的ASCII码是8位,而我们将特殊的按键定义成了FLAG_EXT和一个单字节数的和,也不超过9位(可参考keyboard.h),这样,我们还剩余很多位来表示Shift、Alt、Ctrl等键的状态,一个整型记载的信息足够我们了解当前的按键情况。
task_tty() ------------------>keyboard_read();
|
in_process() <---------------------------|
/*======================================================================*
task_tty
*======================================================================*/
PUBLIC void task_tty()
{
while (1) {
keyboard_read();
}
}
/*======================================================================*
in_process
*======================================================================*/
PUBLIC void in_process(u32 key)
{
char output[2] = {'\0', '\0'};
if (!(key & FLAG_EXT)) {
output[0] = key & 0xFF;
disp_str(output);
}
}