到这里好像硬件改造全部完毕,万事俱备,只欠东风。不过,其实改造工作到这里才刚刚开始。硬件改造这事倒是毛毛雨,剩下来的从写固件对于我这个软件盲来说基本算是个够浩大的工程了,硬件其实很早就弄完了,写固件断断续续的写了好几个月。就上学的时候听老师讲过几个语法,基本都忘光光,让搞软件的同事又指导了下,然后开始裸写代码,翻阅各种案例,下载ps/2总线详细规范。因为选的是一个通用的mcu,不是给普通键盘专用的那种主控,那种都封装好ps/2协议了,只要写很少的代码扫描矩阵发送给总线控制器就行了,这个通用的家伙不行,只能自己看总线协议,一点点用软件写出这个协议,不过这样也好,不会像专用键盘芯片那样只能对ps/2总线做一些简单的设定,我可以最大限度的自由配置ps/2参数。诸如通信频率,发送速度等等。对于职业软件人员来说写这点东西估计不算啥,不过对我来说是够折腾的了,光完成ps/2协议,实现一个最普通的键盘,就花了一两个月的时间才完成。搞定最基本的东西以后,开始搞上层建筑了
一直一来就想做一个完全硬件编程的编程键盘,虽然cherry也有可编程键盘,8113,2100之类的,不过8113虽然是硬件存储配置,但是还得借助软件来编程,2100虽然纯硬件编程,不过功能不够强大,外形也不适合使用。其他各家oem厂家做的可编程键盘也都是歪瓜裂枣,更不肖说他们悲惨的做工,所以都直接无视了。而且这些键盘最大的硬伤就是不能在宏里面按键间插入延时,不能插入延时,编程功能在游戏中就形同虚设了。而且也少有全键盘可编程的键盘,基本都是只特定的一些编程键可以变成而已,好像带连发设置的键盘也没有,哎,键盘厂家的研发也只不过是混口饭吃,永远不会知道玩家最想要的是什么。
废话了半天,说说我想做的功能吧,就是做一个全键盘可编程的键盘,纯硬件编程,不需要软件配合,省的换了机器还要装软件编程的尴尬。还有就是纯硬件存储编程数据,这样换了任何机器编程数据都还在,不依赖pc机。这样一来随时随地编程数据都在,随时随地都能再编程。另外就一套编程数据有点少,根据本次选的主控,除了默认的标准键盘配置外,可以分别存储4套硬件配置,可以直接热切换,即时生效。
硬件规格
配置数:默认标准us键位一套,全键盘独立可编程4套,可随时热切换
每个键编程容量:任意一套编程配置中,全键盘任意键的编程容量均为最大43个键,任意键之间均可插入任意不超过65535毫秒的延时,也就是任意键之间均可插入任意不大于65秒的延时,时间精确到毫秒。
scroll lock键实在是没有用,被改用途做配置切换键,cherry键则用于编程按键。默认标准us配置下,scroll lock灯灭,整个键盘处于不可编程状况。要切换至其他四套可编程配置,先按一下scroll lock键,然后按小键盘区的1,2,3,4选择想要进入的配置,进入后scroll lock灯亮,表示进入可编程配置。如想进去其他套配置,依法炮制即可,想回到默认us不可编程配置,选0即可。
很多人应该认为按一个键是一个事件,其实是两个,按下去是一个,放手是另外一个,你按一个键,按下去键盘会告诉pc机你按下去了 ,你放手,键盘同样还会告诉pc机你放手了,打字的话可能不会太注意到这个事情,不过玩模拟器和游戏就很容易发现这个事情了,飞机类的和横板通关类的模拟器很明显了,一直按住不会一直出拳或者发子弹,就是因为只发了通码,pc机只认为你按了一下,需要不停的按键,也就是发一下通码再发一下断码才表示一直在按键,才能达到连发的目的。另外模拟器里还经常有蓄力的操作,其实很多很日常的招式也都需要蓄力才能发的出来。我基本不玩pc游戏了,只是还整天玩三国志2的街机,拿个最简单的招式来讲解,wasd是上下左右,j是拳,k是跳,下上+拳,最普通的招式,用手放这个招式很好放,但是用模拟器自带的宏,可能很多人都写不出来,简单的写成swj顺序的发出这三个键是发不出这个招式的。需要大概写成sssswwwj这样才能放出这个招式,也就是说按住下现需要蓄一会,再按上和拳。了解了通断码的重要性,就可以知道应该怎么设计编程系统了
如何编程:很简单,在默认us配置下,也就是scroll lock灯灭的情况下,是不允许编程的,想要编程按键,先按上面说的方法进入一套可编程配置,比如说第一套,先按scroll lock,再按数字区的1,scroll lock亮起,表示键盘处于可编程配置。其实每套可编程配置再没编程的默认情况下,就是一个普通的us键盘,只是处于编程请款下全键盘的键都是可编程的,你可以把任意键拿来编程,当然,剩下的没有经过编程的键还是那个键在us键盘里的功能。比如说我想编程u键,先按cherry键,听到蜂鸣器滴的一声,编程按键的时候的每个按键操作都会有蜂鸣器确认。然后接下来按u键,表示要对u键进行编程。接下来有三个关键字,一个是M(make),一个是B(break),一个是R(repeat),按m表示接下来的输入的是通码,b表示要输断码,r表示输入一个需要连发的键,也就是只要这个键处于按下状态,就会不停的发这个键的通断码,来达到在游戏里连发的目的。要插入延时的话,按T关键字,然后用小键盘输入需要的延时,单位是毫秒,输入完毕再以T结尾表示延时输入完毕,最后编程完毕以后再按一下cherry键表示改键编程结束。
废话了这么多,来个实际例子吧,吞食天地三国志2里面,模拟器设置为wasd是上下左右,j是拳,k是跳,我想设置一个放下上拳的宏,不加延时的话,用键盘编程的话应该输入这个M S B S M W B W M J B J,也就是先发s的通码,再发s的断码,然后是w,然后是j,这就是普通不支持插入延时和区分通断码的编程键盘的模式。只能按顺序连续的发出你所编程的字符,将这个宏录制到按键R上,看下面视频 Flash: http://player.youku。com/player.php/sid/XMTg2MzYyNjc2/v.swf
由于没有设置延时,由于键盘很迅速的连续发出这几个键,导致模拟器根本就没响应出来,所以并没有放出想要的招式,实际上只是向下走了一下,然后向上走了一下,然后出了一拳。不过键盘发的太快了,模拟器还没有反应过来,反应过来走的距离也太小了,可能看不出效果,把每个键之间都插入一个1秒的延时就可以很容易的看出效果了。应该输入这个M S T 1000 T B S M W B W T 1000 T M J B J,将这个宏录制到按键T上,看下面视频 Flash: http://player.youku。com/player.php/sid/XMTg2MzY0NjI0/v.swf
这下很明显的看出效果了,向下走了一下,然后向上走了一下,然后出了一拳
下面来看看,如果通过区分通断码和加入延时来发出这个招式,先想一下手的操作,先按住下一会,虽然可能你玩的时候只是觉得我并没有可以的去蓄力,但是人的反应时间都是秒级的,键盘的通讯时间都是毛毫秒级的,如果键盘按顺序迅速发出下上拳的话,你可能下都还没按下去。所以你的操作对于电脑来说就是蓄了力的。所以看我们手的操作:先按下,稍等一会会,放掉下,然后去按上,然后稍稍等一下,右手去按拳。等招式发出以后,按上和按拳的手一起释放。其实按完上以后去按拳的这个时间差很微妙,也就是为啥新手刚上来不是那么容易很准确的发出下上拳,习惯一段时间以后就很容易放出来,就是因为习惯了那个时间差。搞清楚手怎么发招式,把模型归纳出来:先发s的通码,延时75毫秒,再发s的断码(这个操作表示s键被按下了75毫秒,也就是蓄了75毫秒,这个时间是实验出来的,不过游戏里的蓄力一般都是几十到一两百毫秒,很容易就可以实验出来),接着马上发w的通码,延时25毫秒,接下来不发w的断码,而是发出j的通码,(表示按w,但是不放手,25毫秒以后再按下j,发完j的通码以后,招式应该就放出来了),然后延时一个无所谓的时间,还是75毫秒好了,然后发出w的断码和j的的断码。编程应该输入这个M S T 75 T B S M W T 25 T M J T 75 T B W B J ,将这个宏录制到按键F上,看看下面的演示视频 Flash: http://player.youku。com/player.php/sid/XMTg2MzYyOTA0/v.swf
很轻松就放出了下上拳的招式。可见区分通断码和加延时的作用,可以完美模拟手的操作,只要人手能按出来的,这个新固件都可以模拟出来。
下面随便演示下连发,这个很简单,用关键字R 再加上你想要连发那个按键就行了,将这个宏录制到按键G上,看看下面的演示视频 Flash: http://player.youku。com/player.php/sid/XMTg2MzYzMDMy/v.swf
其实还有个关键字W,用来输入win的多媒体键,因为键盘上也没有多媒体键,所以没有办法通过按键来编程按键,所以先按w,然后按下表直接输入多媒体键的扫描码就行了,实际上这个功能也赋予了键盘输出任何非标键码的能力,如果键盘不是用于windows系统,用于别的系统,你也可以自定义别的系统需要的键码,或者配合上层软件来设置一些对你有意义但是系统不会做出相应的键码来。这个对我来说意义不大,就不演示了
灯也都改成呼吸灯了,用软件实现的,三个灯同步呼吸,灭就是灭,亮就是呼吸,呼吸快慢和方式可以软件调节,本来三个灯都是翠绿的,不过在scroll lock被赋予了新的任务以后,为了以示区别,把它弄成蓝灯了 Flash: http://player.youku。com/player.php/sid/XMTg2MzYzMTY4/v.swf
到这里基本好像算是完成改造了,以后剩下的工作就是慢慢给固件添加更多想要的新功能,其实还有蛮多高级功能可以添加的。固件改造只能演示下功能,没有硬件改造那么多花骚的图片,不过其实大部分时间都花在了写固件上,四五个月是有。费了这么大的劲终于算是基本改造完毕,不过这也是为今后的工作打个基础,还是值得的。实际上利用这个新主控板,已经可以救活任何古董或者非标接口的薄膜、机械类键盘了,软硬件都完全自控了,下次就可以在此基础上完全从新做一个更完美的键盘了。