拿到 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 的快捷键,实在是,再也不用鸡爪了!
右边那个多出来的,我现在只是简单的弄了个鼠标键,后续,可以考虑更加丰富的功能吧。

36735 次点击
所在节点    机械键盘
54 条回复
Muninn
2015-01-14 01:36:33 +08:00
佩服啊...
我一直想搞个这样的 因为机械的手感真的比HHKB好...
前几天出来个团购的 但是我仔细看了 这几个地方确实和HHKB不一样. 就犹豫了下没买..

什么时候才能简单一点搞到一个 这个太小众了 估计没人做.
tywtyw2002
2015-01-14 13:15:11 +08:00
我在n个月之前就把gh60搞定了。

当时也忘了是买的谁的板子了,反正我也不关系灯不灯的问题。

壳子和键帽是直接350刀买了个二手的poker2。

先拆轴,然后在装轴,然后。。。。大概忙了快2天了才搞定。

刷固件但是是为了方便各种modkey,各种键盘流嘛。。。。。因为懒得改建,虽然调教xmodmap也不错,但是感觉在键盘level直接改建更快一些。

ooxxcc
2015-01-17 15:36:22 +08:00
求一下hid_listen.mac 的具体使用方式
ooxxcc
2015-01-17 22:12:13 +08:00
没太看懂第一行最右的键怎么配的,感觉好像不太对,矩阵少了一列
求详情
haha1903
2015-01-18 13:31:12 +08:00
@ooxxcc
在这里 https://www.pjrc.com/teensy/hid_listen.html 下载 hid_listen.mac,执行之后。
在键盘上 左shift+右shift+x

然后随便按个键,hid_listen.mac 上,就会显示哪个键位被按下,就可以去配置了。


第一排由于是帖过来的,好像有转义,少了字符。可以看一下这个
http://www.scalaone.com/?p=291
igboy
2015-01-19 20:40:26 +08:00
悲剧,同用tmk_keyboard 刷挂中T^T
haha1903
2015-01-19 22:29:40 +08:00
@igboy 看看板子型号,要对上。
igboy
2015-01-20 08:43:56 +08:00
@haha1903 amj60 pro v2.0算什么型号?
haha1903
2015-01-20 11:16:45 +08:00
@igboy 没找到这个型号
hncqp
2015-01-20 13:54:16 +08:00
@igboy amj 固件非开源,刷不了。不过能刷配列
@haha1903 不知道你在在mac上面有没有出现2指用不了和插上就出现垂直滚动条的情况
haha1903
2015-01-20 14:14:13 +08:00
@hncqp 遇到过,2指用不了,应该是指所有键都冲突吧。
我刷错固件之后,每次插上,都会打出几个字母,同时,全键盘冲突。
奇怪的是,我重启电脑(注意是电脑)之后,冲突问题就解决了。但接上出字母问题还在。
ooxxcc
2015-01-21 00:39:14 +08:00
ooxxcc
2015-01-21 00:40:12 +08:00
@hncqp 滚动条是mousekey的问题,屏蔽就好,另一个解决方案是系统偏好设置->通用 里面,把“显示滚动条”调到 “滚动时”
ooxxcc
2015-01-21 00:41:31 +08:00
@haha1903 我后来解决了。。团购的板子自己摸索出才知道是AMJ60版本,没源代码,刷出来都是乱的,各种坑,花了一天时间调。。
ooxxcc
2015-01-21 00:42:23 +08:00
igboy
2015-01-21 09:03:35 +08:00
@ooxxcc 回去试试
haha1903
2015-01-21 17:50:21 +08:00
@ooxxcc 超级给力!
libotony
2015-02-05 11:50:46 +08:00
libotony
2015-02-05 11:52:06 +08:00
@ooxxcc
@igboy
两位都是从@ralf那里买的吧,我也在找怎么刷固件呢,研究研究去
ooxxcc
2015-02-05 11:59:06 +08:00

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

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

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

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

© 2021 V2EX