友善之臂mini2440:
1、
mini2440/Src/Drivers/Keybd/Pddlist下的pddlist.cpp定义了指向的键盘驱动入口:
PFN_KEYBD_PDD_ENTRY g_rgpfnPddEntries[] = {
PS2_NOP_Entry,
Matrix_Entry,
NULL
};
2、
mini2440/Src/Drivers/Keybd/Kbdcommon下kbd.cpp实现了上述驱动入口中引用的Matrix_Entry接口函数,建议仔细阅读该源文件。
同时,kbd.cpp中还调用了当前路径下s3c2440kbd.hpp中定义的一些被调用函数,这些函数完成了键盘驱动中的功能函数,于s3c2440kbd.cpp中实现。
3、
mini2440/Src/Drivers/Keybd目录下有几个目录,其中ppdlist和Kbdcommon不做赘述,其他5个目录对应不同键盘布局的实现,这里只实现了Matrix_0409,具体布局对应的扫描-虚拟键盘码的映射实现,请阅读源代码。
安凯8801:
1、
AK780X/SRC/DRIVERS/KEYBD下有4个目录,究竟哪个目录是有效的键盘驱动目录呢?可以根据该目录下的dirs文件确认,查看内容为:
DIRS= /
kbdak3810us /
# kbdak3810jpn1 /
# kbdak3810jpn2 /
# kbdak3810kor /
可知kbdak3810us有效,该目录下的桩文件内容是#include "bsp_ps2keybd.c",指向了PS2键盘驱动。
2、
AK780X/SRC/BSP_CONFIG/8801_EPC_V2下实现了bsp_ps2keybd.c,实现了ps2鼠标和键盘的相关函数(貌似只是引脚连接信息的初始化函数),注:其对应的.h文件bsp_ps2keybd.h位于AK780X/SRC/INC/BSPINC下。
然而对这些函数进行调用的驱动程序位于AK780X/SRC/AK_PRIVATE/DRIVERS/KEYBD,这样,我们就可以参考上面mini2440的思路继续梳理。
3、
AK780X/SRC/AK_PRIVATE/DRIVERS/KEYBD/PDDLIST下的PddList.cpp定义了指向的键盘驱动入口:
PFN_KEYBD_PDD_ENTRY g_rgpfnPddEntries[] = {
PS2_NOP_Entry,
// Matrix_Entry,
PS2_Anyka_Entry,
NULL
};
4、
AK780X/SRC/AK_PRIVATE/DRIVERS/KEYBD/KBDCOMMON下的ps2entry.cpp实现了上述驱动入口中引用的PS2_Anyka_Entry接口函数。
同时还调用了分析步骤2中所说的bsp_ps2keybd.h中定义的引脚连接初始函数以及AK780X/SRC/AK_PRIVATE/DRIVERS/KEYBD/INC下几个.h和.hpp文件中定义的ps2驱动功能函数。这些函数都在ps2entry.cpp的所在目录AK780X/SRC/AK_PRIVATE/DRIVERS/KEYBD/KBDCOMMON下的几个cpp文件中实现了。
5、
AK780X/SRC/AK_PRIVATE/DRIVERS/KEYBD下还有几个目录,用于实现矩阵键盘驱动的。已被dirs文件屏蔽,可以考虑通过相关修改启动矩阵键盘的驱动。
=====================================================
继续分析,如何将安凯8801改为矩阵驱动键盘: