作为软件开发者,键盘可以说是我们最亲密的“朋友”之一。频繁的敲击键盘让定制键盘成为急需品,而软件工程师LÁSZLÓ MONDA为我们详细介绍了其制作“终极黑客键盘”的具体过程。 【编者按】软件工程师LÁSZLÓ MONDA为了解决每天频繁“奔走”于键盘各块件之间,创建了“终极黑客键盘”。该键盘分为左右两部分,拥有LED灯,而其中所涉及到的具体技术和过程,你可以在本文中找到答案。 以下为译文: 早在2007年8月的某一天工作中,我不禁意识到普通的PC键盘无法尽可能多的满足于我,每天,我的手指不得不在键盘各块件成百上千次的“奔走”,我想必须要有一个很好的解决办法。 当我想创造一个完美的黑客键盘并去实现它时,我才意识到,作为一名软件开发者,我对硬件是一无所知。(PS:这是多么痛的领悟) 我设法去学习一个全新的技能,同时说服我一位杰出的机械工程师朋友András V?lgyi加入到制作键盘的项目中,并投入足够的时间创建工作原型。如今,“终极黑客键盘”已经成为现实。 对于没有任何电子知识的软件背景,设计和构建一个强大的硬件设备是一个有趣和迷人的经验,在本文中我将描述这个电子杰作是如何工作的。对电子线路图有基本了解的你可以更容易的理解。 如何去构建一个键盘第一步:没有键的键盘 首先让我们做一个发出x字符(基于每秒一次)的USB键盘,Arduino Micro开发板是实现该目标的一个不错的选择,因为它的功能ATmega32U4microcontroller(一种AVR microcrontroller)和相同的处理器是UHK的大脑。 说到USB-capable AVR microcontrollers,用于AVR(LUFA)的轻量级USB框架是库的选择。它使得这些处理器成为打印机、MIDI设备、键盘或任何其他USB设备类型的“大脑”。 当设备插入USB端口时,设备会传递一些被称为USB描述符的特殊数据结构。这些描述符会告知主机所连接设备的类型和性质,并由一个树结构表示。一个设备可以实现的不止一个函数,而是多个。这让事情更加复杂。让我们看看UHK描述符的结构: 大多数键盘只暴露单一的键盘接口描述符,这是有道理的。然而UHK也会暴露鼠标接口描述符,因为用户可以指令键盘的任意键来控制鼠标指针,所以键盘可以当作鼠标使用。GenericHID接口服务相当于一个为所有特性键盘交换配置信息的通信通道。(你可以在这里看到在LUFA中完整的UHK实施和配置描述符:点此进入) 现在我们已经创建了描述符,下面代码则演示了其每秒一次发送x字符:
USB是一种查询协议,这意味着主机定期间隔(通常是125次/s)查询设备,以此来找出是否有任何新的数据发送。与此相关的回调是CALLBACK_HID_Device_CreateHIDReport()函数,在isSecondElapsed变量为1情况下向主机发送x字符的扫描码,isSecondElapsed在每秒的基础上循环的设置为1,回调时设置为0。 |