ps2avrGB键盘刷QMK固件
先聊点题外话,鬼知道为什么我就进了客制化的大坑。
如果是新人,请记得我的经验:客制化不省钱!客制化让键盘适应你,而不是你适应键盘!
ps2avrGB是韩国人开发的主控套件,国内也有很多人用这个做了定制化的开发,比如麦田外设的板子。(pcb上有mt字样)
ps2avrGB的官方刷板应用是BootmapperClient,github上luizribeiro为它做了qmk的适配。
qmk顶顶大名,就不用多介绍了,基于chibiOS系统,支持模拟鼠标,可以一键进入刷机模式。总之功能特别强大!
没错!你的键盘里跑着一个操作系统!!!还能代替鼠标!!!
我买的是麦田的白色pcb的gh60板子,所以我只能以这个为例,记录下刷板子的过程。
我的板子没上灯,所以关于灯光的设置都没有,如果你看得懂qmk文档可以自己加灯光配置。
本文会默认读者已经有了一定的动手能力。毕竟你都搞客制化了,哪有纯菜鸟会玩这个?对吧。
本文会默认读者能读懂英文教程,别怕,翻译软件站在你身后!
动手前请先看下全文,如果大多看不懂,请不要操作,键盘会变砖的!!!
动手前请先看下全文,如果大多看不懂,请不要操作,键盘会变砖的!!!
动手前请先看下全文,如果大多看不懂,请不要操作,键盘会变砖的!!!
如果真的发生的悲剧,键盘变砖,你可以在github上给qmk提issue。
但是我不会对此负责,也不保证能帮助你修复键盘
今天是2018-01-26,如果时间过去太久这个教程可能已经失效了
刷板子准备
在刷板子之前需要做好如下的准备:
- 1.把github上的luizriberiro的qmk项目clone到本地,并且配置好编译环境。
- 2.下载BootmapperClient,最新的版本最好。
- 3.找到进入键盘刷机模式(DFU模式)的方法。
qmk的开发环境我是在ubuntu环境下搭建的,qmk有详细教程,只要搭建好编译环境就可以,不用管烧录工具。
我的bootmapperClient版本是v0.10.0
ps2avrGB进入刷机模式通常有两种:
韩国的键盘是断开连接线,按住左ctrl或者U或者esc,然后再连接。
一些国内客制化键盘是断开连接线,短接电路板上的两个接口,再连接。
我的pcb是要短接电路板的,在电路板侧边缘有标p1的两个接口,我用镊子短接。
一定注意不能用usb扩展口接键盘,电脑识别不出来的。
进入刷机模式成功的标志就是连接电脑之后,键盘所有按键都没反应,变砖是部分按键没反应。
生成刷机文件步骤
首先要修改qmk的代码以适配自己的键盘配列表。
首先编辑config.h,适配键盘的配列。
在#endif前添加如下内容:
/* mouse settings*/ //定义模拟鼠标参数,单位毫秒
#define MOUSEKEY_DELAY 150 //鼠标连续移动延迟,过大笨拙,过小发飘
#define MOUSEKEY_INTERVAL 20 //鼠标刷新间隔
#define MOUSEKEY_MAX_SPEED 2 //鼠标最大速度
#define MOUSEKEY_TIME_TO_MAX 2 //鼠标到达最大速的时间
#define MOUSEKEY_WHEEL_MAX_SPEED 2 //鼠标滚轮最大速度
#define MOUSEKEY_WHEEL_TIME_TO_MAX 2 //鼠标滚轮到达最大速度的时间
再编辑ps2avrGB.h文件,适配键盘的配列。
在#endif前添加如下内容:
#define MY_KEYMAP( \
K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3F, \
K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E, \
K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, K5B, K5C, K5E, \
K61, K63, K64, K65, K66, K67, K68, K69, K6A, K6B, K6C, K6E, \
K71, K72, K73, K78, K7A, K7B, K7D, K7E \
){ \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
{ K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, KC_NO, K3F }, \
{ K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E, KC_NO }, \
{ K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, K5B, K5C, KC_NO, K5E, KC_NO }, \
{ K61, KC_NO, K63, K64, K65, K66, K67, K68, K69, K6A, K6B, K6C, KC_NO, K6E, KC_NO }, \
{ K71, K72, K73, KC_NO, KC_NO, KC_NO, KC_NO, K78, KC_NO, K7A, K7B, KC_NO, K7D, K7E, KC_NO } \
}
配置的方法其实挺简单的。格式如下:
#define MY_KEYMAP( \
K11, K12, K13, \
K21, K23 \
){ \
{ KC_11, KC_12, KC_13 }, \
{ KC_21, KC_NO, KC_23 } \
}
上面的矩阵是我们的键盘轴排列方式,下面的矩阵是这些轴焊接在了哪里。
比如我们设置了一个2x3的键盘矩阵,在上面焊了五个轴,排列如第一个矩阵。
在第二个矩阵一一对应的,配置轴焊接的位置,没有焊轴的位置用NO占位。
以上是我的怕pcb的布局,每个人习惯不同,布局都不同,可能需要微调。
建立/root/qmk/qmk_firmware/keyboards/ps2avrGB/keymaps/mykeymap文件夹,最后的mykeymap可以任意改名。
进入新建的文件夹,建立keymap.c文件。内容如下:
#include "ps2avrGB.h"
#include "action_layer.h"
#include "rgblight.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = MY_KEYMAP(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_FN0,
KC_FN1, KC_RGUI, KC_LALT, KC_SPC, KC_FN2, KC_APP, KC_CAPS, KC_INS
),
[1] = MY_KEYMAP(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[2] = MY_KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[3] = MY_KEYMAP(
RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_WH_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_BTN2, KC_WH_D, KC_BTN1, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
};
const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_LAYER_MOMENTARY(1),
[1] = ACTION_LAYER_MOMENTARY(2),
[2] = ACTION_LAYER_MOMENTARY(3),
};
这里的键位设置是和ps2avrGB.h里的设置对应的。应该很容易看懂。
默认键盘在第0层状态,按下FN0键进入第一层,按下FN1进入第二层,以此类推。
KC_TRNS表示透明,比如字母K键。按下FN1和K键,从第0层进入第2层,KC_TRNS会透明映射到下面第0层,输出还是K。
KC_MS_L就是鼠标模拟向左移动,具体的keycode可以参考qmk的keycode文档。
第三层的左上角RESET键表示进入刷机(DFU)模式,有了这个键就不用每次都短接了。
最后回到qmk_firmware,执行下面的命令:
make ps2avrGB
大概会有一个这样的回显:
Making ps2avrGB with keymap default [OK]
Making ps2avrGB with keymap luizribeiro [OK]
Making ps2avrGB with keymap mykeyboard [OK]
成功之后会生成ps2avrGB_mykeyboard.hex文件,就是我们的目标文件了。
刷板子步骤
刷板子我是在windows平台上进行的,linux当然也可以,不过我没成功。
通过按键或者短接,让键盘的板子进入刷机模式,连接电脑,打开bootmapperClient。
右上角选option,左下角的utils里点firm up,弹出的窗口中选中ps2avrGB_mykeyboard.hex,刷机开始。
没问题的话会弹出一个对话框,在跑马灯显示一堆二进制地址,不到10秒对话框消失,刷机完成。
如果刷机成功,以后再刷的时候按reset键就可以进去刷机模式了,不用每次都短接。
第一次配列肯定是会有问题的,用一段时间发现不方便再改,慢慢你的键盘就会进化出最适合你的配列。
可能会遇到的问题
可能会遇到的最大的问题就是运气问题,我的板子变砖过,连上电脑不识别过。
装驱动把其他设备驱动装坏过,编译debug一天没成果过。
不过基本都是因为小问题,运气好的话是不会遇到的。
运气不好的话,恭喜你!因为专家就是把能遇到的问题都遇到了一遍的人。