orange's学习--第七章:g处理按键的意义单独出来

keyboard_read(  )这个函数只是负责读取扫描码就可以了,至于如何处理,不应该是它的职责,因为只有更高层次的软件才能根据具体情况做出不同的反应。把处理按键的逻辑放到tty的in_process(u32 key)函数处理。

不管是单键还是组合键,都使用一个32位整型数key来表示。因为可打印字符的ASCII码是8位,而我们将特殊的按键定义成了FLAG_EXT和一个单字节数的和,也不超过9位(可参考keyboard.h),这样,我们还剩余很多位来表示Shift、Alt、Ctrl等键的状态,一个整型记载的信息足够我们了解当前的按键情况。

orange's学习--第七章:g处理按键的意义单独出来_第1张图片

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);
        }
}

 

你可能感兴趣的:(orang's,于渊著)