使用GDK3开发魔法键盘

目标

把GDK3开发成一个特殊的键盘设备,使其自动发送键盘事件,这时从用户的角度,有趣的事情发生了:电脑的键盘像会魔法一样自己打字。


思路

修改GDK3中运行的程序,让GDK3自动发送敲击键盘的命令,并使用其他主机测试发送行为。


开发过程

1 . 引入gekm项目源码,我们在gekm项目的基础上开发。


2 . 测试原本的gekm项目,只有当原本的项目功能和逻辑均正确时,我们才可以在在他基础上开发新项目。

a . 打开GNU工具

b . 引入gcc gdb等编译调试工具的路径:

export PATH=/d/gedu_work/GNU/bin/:$PATH

c . 切换到项目所在的工作目录:

cd /d/gedu_work/gdk3/sdk/src/gekm/

d . 开始编译

make -s

e . 烧录运行

!program D:\\gedu_work\\gdk3\\sdk\\src\\gekm\\gekm.hex
!reset

f . 检查GDK3是否可以作为usb设备被识别

打开usbview软件,观察主机接入GDK3的USB端口。(usbview 是一个usb设备查看器,能够对系统中全部的USB设备进行枚举,可以查看每个设备的详细信息)。

g . 至此,测试完毕,原本的gekm项目一切正常。


3 . 测试完毕之后,我们可以在项目原有的基础上开发魔法键盘项目了。

a . 编写自己的键盘发送函数,并在主函数中调用这个发送函数。(代码仅供参考)

void KB_Send_Data(void)
{
    // 测试发送 gedu
    uint8_t KB_Data[8] = {0, 0, KC_G, KC_E, KC_D, KC_U, 0, 0};
    uint8_t KB_Empty[8] = {0};

    // 开始发送数据
    Delay_Ms(700);  // Delay_Ms() 函数是延时
    USBHD_Endp_DataUp(DEF_UEP1, KB_Data, sizeof(KB_Data), DEF_UEP_CPY_LOAD);
    Delay_Ms(700);
    USBHD_Endp_DataUp(DEF_UEP1, KB_Empty, sizeof(KB_Empty), DEF_UEP_CPY_LOAD);
    Delay_Ms(700);
}

b . 重新编译程序 -> 重新烧录 -> 重启GDK3

c . 打开键盘测试工具或文本编辑器


看到上述结果就说明魔法键盘开发成功了。而这个魔法键盘不仅支持发送单个字母,同时也支持发送 shift Ctrl Alt等,所以我们可以利用这个特性开发更好玩的项目,例如发送一套游戏里的连招,或者发送一些有意义的文字。


总结:

由于我本身专业知识不够扎实,并且也缺少嵌入式的开发经验,所以刚开始做这个项目的时总想着追根溯源,想着先看明白,先理清思路再动手,所以就这样,傻傻的看了半天也没什么实质性的进展,张老师指点道:你有任何想法和思路就去尝试啊,不要在这里空想,想法能不能成只有做了才能验证,你在这里空想是没有结果的。于是我每遇到一个想法,就上手测试一下,并记录下来。在这个验证的过程中,我对这个项目的理解逐渐加深,同时我也明白,动手实践远比脑袋空想来的实际。

最后,放一张GDK3的照片。

作者:李宜桐  创建时间:2023-01-05 11:39
最后编辑:李宜桐  更新时间:2024-02-02 17:39