拿到 GH60 的艰辛与幸福之路

2015-01-13 21:32:59 +08:00
 haha1903

最近组了一个 GH60,过程相当波折,全过程大概有半个月吧,组键盘主要分成三步。

  1. 了解 GH60
  2. 组装 GH60
  3. 定制 GH60 固件

其中第3部分最最惊险,不过还是从第1步说起。

  1. 了解 GH60
    我之前使用 HHKB 有些年头了,看到 GH60 之后,基本上是以 HHKB 备份键盘的心态,准备拼一个玩玩,也是可有可无的东西吧。总体价格不能太离谱,不能弄个 2-3k 的壳子 + 板子,再弄个 1k 的 sp 二色,激动的再弄个 cc,那完蛋了,4-5k 的价格要被老婆打死的。心里的预算在 600-800 左右吧,最后一共花了 1259,超出了一些预算,主要花在壳子上了。

  2. 组装 GH60
    从得瑟的角度来看,这个键盘要有灯,最好还是彩虹的。既然有灯,就要有透光的键帽,我对原厂高度还是 OEM 高度没要求,但我希望这个键帽不要是 ABS 的,那就基本上只能是 PBT 的,毕竟 POM 的键帽还挺少的,而且也不好。总体色调黑色,我比较喜欢全黑色的。

在这个要求下,再加上预算问题。我选择了 IKBC 的 G104 黑色透光键帽,PBT 的,透光,价格比较便宜,taobao 能买到的价格大概 270 左右吧,我在 pcwaishe 买了个全新二手的,花了 180。这套键盘是 104 的,做工非常一般,不过介于 PBC 二色透光,其实也没什么选择的。

下一步,买 GH60 的板子,在 taobao 某卖家那里弄了一个 all in one 的方案,彩虹灯、GH60板子、五角 Cherry 青轴、大键位卫星轴,这是个无钢板的方案。

最后一步,买壳子。两个大选择,金属还是非金属。非金属的可以用 Poker 的壳子,塑料的,大概 70。或者定制的亚克力壳子,或者树脂,价格就完全不确定了。我要的是金属壳子,而且要低端,不能太贵,有几个选择吧。
1. 菜壳:就是 taobao 上最常见的阳极壳子,大概 350,也没用过,有一点点看不上。
2. Tex60壳子:据说是台湾产的,壳子底下比菜壳多了两个金属支架,原价 750,我 615 收了一个黑色的,其它颜色还有蓝色,银色等。
3. FMJ壳子:不知道哪里产的,比较有特点的是,壳子上有4个扑克牌的金属,价格较贵,要 1.5 左右。太贵了,不是我的菜啊。外观比较花,其实也不是我喜欢的。
4. KMac Happy/Mini:韩国产的,特别贵,是完整的方案,带板子的,价格 2.5K 左右。我要的是 GH60,不想要其它板子,而且价格也太贵了,不是我的菜啊。

基于性价比,买的 Tex60壳子,很低调,我喜欢。

买到之后安装键帽,然后直接就傻眼了。最下面一排装不上,因为没沟通好方案,导致我买的键帽和键盘几个地方不匹配。
1. 右上角是 Backspace,而 HHKB 是分开的两个键
2. 右 Shift 是个大的 Shift,大概是 3X Shift 吧。而 HHKB 是 1.75X Shift + 1X FN
3. 最下面一排完全不对,G104 应该是 6.25X 空格,板子上是 7X 的,左右也对不上。

没办法了,和卖家商量后,寄回去,免费帮我改改。对应上面的3点:
1. Backspace 一分二
2. Shift 一分二
3. 最下面一排,左3,右4,中间 6.25X 空格

经历了漫长的等待,重新寄过来。
在这个过程中,我到 taobao 上买了新的 1.75X Shift,IKBC 的。好像也没有别的选择。GMK 的 1.75 Shift 应该是原厂高度的,我也没法用。
组装成功!

  1. 定制 GH60 固件 这步太波折了,真是太波折了

回来之后,基本上是 Windows 键位,这肯定是无法满足我要求的,果断刷机。果断 google gh60 firmware,找到了(之前已经找到无数次)的 github tmk_keyboard 项目,clone 下来吧。

在 mac 下,只需要用 homebrew 把 crosspack 和 dfu-programmer 安装好就行了,前面的用来 build firmware,后面的用来将 build 的输出写到键盘里面去。

键盘后面有个按钮,按之前,键盘被识别成一个 GH60 USB 设备。Mac 下可以用命令 system_profiler SPUSBDataType 看 USB 设备列表,当然,也可以在系统报告里面看。按了那个按钮之后,键盘就变成一个 atmega32u4 设备,名字有一点儿区别,比如会带 DFU,表示在 DFU 模式下。这个状态下,就可以刷机了。

直接 make dfu KEYMAP=hhkb ,就行了,结果非常让人不爽,莫名其妙的打出几个字母,然后整个键盘全是乱的。

完了,这时候就想,要是不刷就好了,反复试了3个小时,还是没弄明白,放弃。等一位懂的同学,从香港回来,再弄!

这哥们终于回来了,发现,GH60 板子分很多种,如 Rev A, Rev B,我这个是 Rev CHN,要用 tmk_keyboard_custom 那个项目,才支持的。可以搜 gh60 rev chn,会找到那个 custom 的项目,在 keyboard/gh60 目录下,matrix.c 里面有支持 REV CHN 和 REV CNY 的代码,然后在 config.h 中,增加一句

define GH60_REV_CHN 1

就会开启 REV CHN build,从这时开始,我的键盘,就又能用了!

但是,还不够。因为有些键位是多出来的,比如 Backspace 拆开的两个键位,怎么才能知道这个键位的信息呢。这时候,就有一个工具了,在 Mac 下,叫 hid_listen.mac,执行了之后,会得到键盘的信息。还需要配合键盘的 Magic 键。Magic 键是左 Shift + 右 Shift,比如 Magic + x 就开启了 matrix debug,按下相应的键位,就会从 hid_listen.mac 的 console 上看到键位的位置和名称。太好用了,这样就很容易找到没有效果的键位了!

还有就是 Boot Magic Configuration 比较有用,就是在插 USB 之前,按住空格,然后再按相应的键,达到 Virtual DIP Switch 的效果。空格 + Backspace 比较实用,清空 EEPROM 数据。

到这里为止,其实大部分功能就已经可以工作了。最后就是优化功能了,把键盘配置成专人专用最顺手的工具。

补上我的配置吧,这个就要详细的参考 tmk 的文档了。

include "keymap_common.h"

/*
* HHKB Layout
/
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/
0: Default layer
* ,-----------------------------------------------------------.
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| | |
* |-----------------------------------------------------------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Bspc |
* |-----------------------------------------------------------|
* |Ctrl | A| S| D| F| G| H| J| K| L|Fn3| '|Return |
* |-----------------------------------------------------------|
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn |
* |-----------------------------------------------------------|
* | |Gui |Alt | Space | |Alt |Gui | |
*
-----------------------------------------------------------'
/
KEYMAP_HHKB(
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSLS, GRV, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \
LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, \
LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT,FN0, \
FN2 ,LALT,LGUI, SPC, RGUI,RALT,RCTL,FN1),
/
1: HHKB Fn layer
* ,-----------------------------------------------------------.
* |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
* |-----------------------------------------------------------|
* |Caps | | | | | | | |Psc|Slk|Pus|Up | | |
* |-----------------------------------------------------------|
* | |VoD|VoU|Mut|Ejc| | | /|Hom|PgU|Lef|Rig|Enter |
* |-----------------------------------------------------------|
* | | | | | | | +| -|End|PgD|Dow| | |
* |-----------------------------------------------------------|
* | | | | | | | | |
* -----------------------------------------------------------'
*/
KEYMAP_HHKB(
PWR, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS,UP, TRNS,TRNS, \
TRNS,VOLD,VOLU,MUTE,EJCT,TRNS,PAST,PSLS,HOME,PGUP,LEFT,RGHT, PENT, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PPLS,PMNS,END, PGDN,DOWN, TRNS,TRNS, \
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS),
/* 2: HHKB FN1 layer Mouse
* ,-----------------------------------------------------------.
* |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
* |-----------------------------------------------------------|
* |Caps | | | | | | | |Psc|Slk|Pus|Up | | |
* |-----------------------------------------------------------|
* | |VoD|VoU|Mut|Ejc| | *| /|Hom|PgU|Lef|Rig|Enter |
* |-----------------------------------------------------------|
* | | | | | | | +| -|End|PgD|Dow| | |
* |-----------------------------------------------------------|
* | | | | | | | | |
*
-----------------------------------------------------------'
*/
KEYMAP_HHKB(
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
TRNS,TRNS,BTN1,MS_U,BTN2,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
TRNS,TRNS,MS_L,MS_D,MS_R,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS, \
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS),
/
3: HHKB FN2 layer Idea
* ,-----------------------------------------------------------.
* |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
* |-----------------------------------------------------------|
* |Caps | | | | | | | |Psc|Slk|Pus|Up | | |
* |-----------------------------------------------------------|
* | |VoD|VoU|Mut|Ejc| | *| /|Hom|PgU|Lef|Rig|Enter |
* |-----------------------------------------------------------|
* | | | | | | | +| -|End|PgD|Dow| | |
* |-----------------------------------------------------------|
* | | | | | | | | |
* `-----------------------------------------------------------'
*/
KEYMAP_HHKB(
TRNS,FN11,FN3, TRNS,TRNS,TRNS,TRNS,FN4, FN12,FN5, FN6, TRNS,TRNS,TRNS,TRNS, \
TRNS,TRNS,FN7, END, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,UP, FN8, FN9, TRNS, \
TRNS,HOME,TRNS,TRNS,RGHT,TRNS,TRNS,TRNS,TRNS,FN10,TRNS,TRNS, TRNS, \
TRNS,TRNS,TRNS,PGUP,PGDN,LEFT,DOWN,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS, \
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS),
};

/*
* Fn action definition
*/
const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_LAYER_MOMENTARY(1),
[1] = ACTION_LAYER_MOMENTARY(2),
[2] = ACTION_LAYER_MOMENTARY(3),
[3] = ACTION_MODS_KEY(MOD_LCTL, KC_F2),
[4] = ACTION_MODS_KEY(MOD_LALT, KC_F7),
[5] = ACTION_MODS_KEY(MOD_LSFT, KC_F9),
[6] = ACTION_MODS_KEY(MOD_LSFT, KC_F10),
[7] = ACTION_MODS_KEY(MOD_LGUI, KC_F4),
[8] = ACTION_MODS_KEY(MOD_LGUI | MOD_LALT, KC_LEFT),
[9] = ACTION_MODS_KEY(MOD_LGUI | MOD_LALT, KC_RGHT),
[10] = ACTION_MODS_KEY(MOD_LGUI | MOD_LCTL, KC_L),
[11] = ACTION_MODS_KEY(MOD_LALT, KC_F1),
[12] = ACTION_MODS_KEY(MOD_LGUI, KC_F8),
};

我把比 HHKB 多出来的一个键,给 Intellij Idea 专用了,配置了一个层,专门给 Idea 的快捷键,实在是,再也不用鸡爪了!
右边那个多出来的,我现在只是简单的弄了个鼠标键,后续,可以考虑更加丰富的功能吧。

36755 次点击
所在节点    机械键盘
54 条回复
ooxxcc
2015-02-05 11:59:47 +08:00
@libotony 反正我是的,上面的固件可以用,不过没有对背光的支持,因为我的板子没背光。。你可以自己调
igboy
2015-02-05 12:23:31 +08:00
@libotony @ooxxcc 我的操作是先把caps Lock/Control 的键帽取下,按一下下面的按钮。此时系统应该可以识别出atmega32u4,装上相关驱动。
先刷固件gh60_Amj60.hex,板子是amj60的,只有杰少的群里面有固件,
http://pan.baidu.com/s/1hqu0EFi ,密码:au3e
然后刷配列,配列可以去 http://www.keyboard-layout-editor.com 生成,然后把raw data 拷贝到www.enjoyclick.org/tkg/ 里面,层模式选简单,标准,还是多合一,看你是怎么写配列的,选择GH60{Rev CHN),自己选择FN键的功能,下载 .eep文件,用工具把 eep文件刷到键盘里面。
应该就差不多了。
这是我的配列:
http://www.keyboard-layout-editor.com/#/layouts/4ff1bae6152305d7ff4c84e276d15777
tkg那里是选的简单

我是用的Archlinux,操作不是gui的

```` sh
sudo dfu-programmer atmega32u4 erase --debug 5
sudo dfu-programmer atmega32u4 flash gh60_Amj60.hex --debug 5
sudo dfu-programmer atmega32u4 flash-eep xxx.eep --debug 5
sudo dfu-programmer atmega32u4 start --debug 5

````
第一条命令,擦除原先的固件,加入 --debug 5 是为了打印更多的信息
第二条命令,输入 gh60_Amj60.hex 固件
第三条命令,输入配列
第四条命令,不知道怎么说,反正就是启动啦,键盘可以用了
libotony
2015-02-05 13:30:07 +08:00
@ooxxcc 第一条手抖了,我也不需要背光~
libotony
2015-02-05 13:33:14 +08:00
@igboy thx,还有一点不明白,多层的话,如何切换层,倒是知道自己编译tmk的话是可以知道如何弄
haha1903
2015-02-05 15:22:06 +08:00
@raptium 也买了,出了比较多的问题啊。比如,键不能用。

@libotony @igboy @ooxxcc 你们遇到了吗?
ooxxcc
2015-02-05 15:42:51 +08:00
@haha1903 我用自己的固件一切正常

对了,刷我那个要先把eep清空,当时我调的时候默认第五层坑死了


@libotony 它提供那个固件是通过刷eep来切换配列,具体你自己看里面的文档,反正我觉得不好用不如直接改源代码
haha1903
2015-02-05 17:46:29 +08:00
@ooxxcc 你现在刷是写 eep 还是直接改代码刷的?amj60 用的 tmk 和标准的不一样吧,用 CHN 的可以刷吗?
libotony
2015-02-05 18:12:04 +08:00
@ooxxcc 我的有问题,返回去了,今晚回家折腾,没搞过avr,如何清空eep?dfu-programmer可以清空?我用mac环境,我也想问,用tmk的固件eep还是可以用之前的方法刷?
libotony
2015-02-05 18:13:18 +08:00
@ooxxcc
@haha1903
我刚刚收到,只确认了打字没问题,今晚回家折腾折腾
igboy
2015-02-05 19:01:08 +08:00
@libotony 切换层的话在tkg那里可以选择fn的功能,fn的功能挺多的,可以瞬间开启1层,就是指fn加其他键输入1层的值,开启1层指的是键位映射变为1层的键位配置。

@haha1903 同样出现了,刚开始是esc键失效,寄回去 @ralf 发现是二级管断了,修好了又寄回来,之后发现左shift又有问题,现在是先用着,然后 ralf 重新帮我做个键盘,寄过来我再把坏的寄回去。

@ooxxcc eep清空怎么清? dfu-programmer atmega32u4 erase 会把 eep 也清空吗?
haha1903
2015-02-05 20:01:42 +08:00
@igboy 明白了,看来是通病,@raptium 的键盘问题和你的一模一样,esc 和左 shift 不能用。
使用 space + x + d 开启了 matrix debug,发现这两个键应该是物理上坏了。
haha1903
2015-02-05 20:04:56 +08:00
@igboy 可以看一下 https://github.com/tmk/tmk_keyboard,下面有清空的方法

General

Skip reading EEPROM to start with default configuration(ESC)
Clear configuration stored in EEPROM to reset configuration(Backspace)

就是插键盘之前,按住 Space 和 Backspace 就清了,下面还有好多这样的控制键,写 eep 的,你可以试一下。

除了 boot magic,如果左 shift 好用的话,magic command 更方便一些,不用插拨键盘。
ooxxcc
2015-02-05 21:24:58 +08:00
@haha1903 我刷了个空的eep进去。。。然后我之前贴了个github链接,有一个能用的tmk_keyboard版本
ooxxcc
2015-02-05 21:25:50 +08:00
@haha1903 刷了个空的eep进去

tkg那个要配置复杂一点的配置根本不可能,会很蛋疼
haha1903
2015-02-05 21:29:49 +08:00
@ooxxcc 给力,tkg 不是长久之计,可定制能力也明显不如刷固件来得好。
ooxxcc
2015-02-05 21:31:07 +08:00
@libotony 12楼

不清空eep的话tmk_keyboard会有奇怪的问题,当时我的问题是默认跑到layer 5,大部分建是乱的,花了一天调试,坑死了
ooxxcc
2015-02-05 21:32:07 +08:00
@haha1903 调了一天弄出来的,各种坑,反正我现在用起来很完美了。。
libotony
2015-02-06 09:38:53 +08:00
@ooxxcc 昨天回家编译了一下,有点事还没来得及刷呢,你的keymap我有个问题哈,你的空格右边怎么是三个键?另外我的没用最边上的两个ctrl,需要在keymap里写上么
ooxxcc
2015-02-06 10:01:32 +08:00
@libotony 我的键盘空格是7x,然后右边是三个键

留着也没啥问题,就是永远不会被触发到
libotony
2015-02-06 10:36:06 +08:00
@ooxxcc 编译完是有个eep文件的,估计你当时要把那个文件刷了就没问题了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/161887

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX