在 Mac OSX 上編譯 GH60 RevCHN Firmware - 鍵盤

Edward Lewis avatar
By Edward Lewis
at 2015-03-18T13:02

Table of Contents

版上有在 Windows / Linux 上刷 GH60 的教學,前幾天自己在 Mac 上
試了一段時間,來分享一下在 Mac OSX 上編譯和刷 GH60 RevCHN 的韌體的心得

這篇主要是在 Mac OSX 上,用 keyboard-layout-editor + tkg 生出 layout 的 .c 檔
再用 kairyu/tmk_keyboard_custom 編譯,刷上 GH60

同步發表在 http://blog.dm4.tw/blog/2015/03/17/build-gh60-revchn-on-mac/

### 參考資料

- http://www.v2ex.com/t/161887
- https://www.ptt.cc/bbs/Key_Mou_Pad/M.1426361327.A.EEB.html
- https://www.ptt.cc/bbs/Key_Mou_Pad/M.1390542876.A.073.html
- https://github.com/tmk/tmk_keyboard
- https://github.com/kairyu/tmk_keyboard_custom
- http://www.keyboard-layout-editor.com/
- http://www.enjoyclick.org/tkg/

### 步驟

根據 http://www.v2ex.com/t/161887 首先要先用 brew 裝 crosspack 和
dfu-programmer ,不過因為時間過太久,有點忘記詳細的安裝指令,
crosspack 需要 `brew tap` 的樣子。

裝完之後可以來載 source ,因為 tmk/tmk_keyboard 不支援 RevCHN ,
所以要用 tmk_keyboard_custom

```
git clone https://github.com/kairyu/tmk_keyboard_custom.git
```

需要在 `config.h` 加上設定,來切換成 GH60 RevCHN

```
cd keyboard/gh60
vim config.h
```

在檔案裡加上(如果你不確定加在哪,加到 `#define CONFIG_H` 下面就可以了)

```
#define GH60_REV_CHN
```

本來以為這樣就可以了,沒想到一直刷失敗,後來看了 http://www.v2ex.com/t/161887
https://www.ptt.cc/bbs/Key_Mou_Pad/M.1426361327.A.EEB.html 兩篇,發現
應該是要清空 EEPROM 的問題(可是我硬體知識不足,根本不知道那是什麼啊啊啊)

文章裡提到的解法是「在插入 usb 前,按住 backspace 與 space 」,不過我有找到
Makefie 裡有個設定,刪掉(註解掉)也是可以的,和大家分享一下:

```
vim Makefile
```

把下面這行刪掉

```
KEYMAP_IN_EEPROM_ENABLE = yes # Read keymap from eeprom
```

接下來就插上鍵盤, OSX 應該會抓到一隻 GH60 ,可以用
`system_profiler SPUSBDataType` 指令檢查一下

```
(master) [~/workspace/tmk_keyboard_custom/keyboard/gh60] system_profiler SPUSBDataType
...
GH60:

Product ID: 0x6060
Vendor ID: 0xfeed
Version: 0.01
Speed: Up to 12 Mb/sec
Manufacturer: geekhack
Location ID: 0x14100000 / 15
Current Available (mA): 500
Current Required (mA): 100
```

按一下背面的按鈕會進入 dfu 模式,這時候 OSX 應該會抓到一個 Atmel 的設備

```
(master) [~/workspace/tmk_keyboard_custom/keyboard/gh60] system_profiler SPUSBDataType
...
ATm32U4DFU:

Product ID: 0x2ff4
Vendor ID: 0x03eb (Atmel Corporation)
Version: 0.00
Serial Number: 1.0.0
Speed: Up to 12 Mb/sec
Manufacturer: ATMEL
Location ID: 0x14100000 / 16
Current Available (mA): 500
Current Required (mA): Unknown (Device has not been configured)
```

然後就可以直接試刷預設的 poker layout 看看

```
make dfu
```

如果成功,在一堆 `avr-gcc` 的編譯訊之後,會看到

```
dfu-programmer atmega32u4 erase
Checking memory from 0x0 to 0x6FFF... Not blank at 0x1.
Erasing flash... Success
Checking memory from 0x0 to 0x6FFF... Empty.
dfu-programmer atmega32u4 flash gh60_lufa.hex
Checking memory from 0x0 to 0x69FF... Empty.
0% 100% Programming 0x6A00 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
0% 100% Reading 0x7000 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
Validating... Success
0x6A00 bytes written into 0x7000 bytes memory (94.64%).
dfu-programmer atmega32u4 reset
```

這樣子最基本的 layout 就成功了,如果不確定是不是真的有刷進去,
可以改一下 `keymap_poker.c` 裡的 layout 看是不是真的刷進去了
(例如把 `Q` 改成 `X` 之類的)

再來就可以自訂 layout 了,本來想很硬派的直接寫 c code ,不過覺得
code 裡很難排版,最後還是用 keyboard-layout-editor (KLE) 和
TMK Keymap Generator (TKG) 來生成 c code ,我用的 layout 是:

- Layer 0 (Default)
- http://www.keyboard-layout-editor.com/#/layouts/cc85b037963edc17fe98f84e970e3ca4
- Layer 1 (Fn1 層)
- http://www.keyboard-layout-editor.com/#/layouts/243985ccfe04859cdb078166f60cb781
- Layer 2 (Fn0 層)
- http://www.keyboard-layout-editor.com/#/layouts/e9453e67d6a099406e002812aaca8687

然後在 TKG 上的設定為:

- Keyboard
- GH60 (RevCHN)
- Layer Mode
- Normal
- Number of Layers
- 3
- Fn0
- Layer action > Momentary layer 2
- Fn1
- Layer action > Toggle layer 1

這裡要注意,我把 Fn0 層放在 layer 2 ,是因為 key mapping 會從高層讀到低層,
如果把 Fn1 層換到 layer 2 , Fn0 換到 layer 1 ,這樣子在切到 Fn1 層之後,
按著 Fn0 也沒辦法切到 Fn0 層(同樣的問題在
https://www.ptt.cc/bbs/Key_Mou_Pad/M.1390542876.A.073.html 也有解釋)

接著就在 TKG 下載 `.c` 檔,把載下來的 `keymap.c` 放到資料夾下並改名
,就可以準備刷了

```
mv ~/Downloads/keymap.c ./keymap_tkg.c
make KEYMAP=tkg dfu
```

這時候如果你看到以下的 error 的話

```
keymap_tkg.c:29:78: error: macro "KEYMAP_TKG" requires 62 arguments, but only 61 given
LCTL,LALT,LGUI, SPC, FN0, RGUI,RALT,RCTL),
```

是因為 TKG 生 `.c` 檔的時候好像有 bug ,載下來的檔案,裡面的

```
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 MINS,EQL, BSPC, \
```

`0` 和 `MINS` 中間少了 `,` ,所以改成

```
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, \
```

再編一次應該就 ok 了

### 後記

有一些 Fn action 現在還沒摸熟,看起來可以送 key / macro 的樣子,看到
https://github.com/kairyu/tmk_keyboard_custom/blob/master/keyboard/hhkb/keymap_hasu.c
有一些 function / macro 的用法還沒研究。

另外雖然編起來了,不過因為底層不熟,還不太清楚架構,希望研究一下之後可以
把它和藍牙發射器接起來,之前的 #1J7o5CLS 這篇是嘗試接上 Arduino 會有點
latency ,不知道如果直接讓 GH60 送訊號給藍牙模組會不會比較好。

不過……我現在連 GH60 多的 pin 在哪裡都不知道 XDDD
要成功用 UART 送 HID report 給藍牙模組看來還有得努力

--
Tags: 鍵盤

All Comments

Rae avatar
By Rae
at 2015-03-20T09:02
五體投地
Jacob avatar
By Jacob
at 2015-03-23T04:07
趕快推!(不然會被發現我看不懂)
Ophelia avatar
By Ophelia
at 2015-03-27T06:37
看不懂但我還是來推一個XD
Andrew avatar
By Andrew
at 2015-03-27T11:41
希望樓主弄懂XD想上小紅點+藍芽模組XDD
Xanthe avatar
By Xanthe
at 2015-03-30T02:28
快推~~
Enid avatar
By Enid
at 2015-03-31T17:56
有神人快推
Ivy avatar
By Ivy
at 2015-04-02T22:07
推強者~
Linda avatar
By Linda
at 2015-04-06T11:38
趕快推!(不然會被發現我連Mac都沒)
Damian avatar
By Damian
at 2015-04-08T10:55
藍芽模組可以挑4.0的作嗎?我就不用做了XD
Queena avatar
By Queena
at 2015-04-09T12:43
@@ 完全看不懂
Kristin avatar
By Kristin
at 2015-04-12T18:17
推!
Emma avatar
By Emma
at 2015-04-14T21:26
太強了 @@
Faithe avatar
By Faithe
at 2015-04-16T15:09
有神快推
Andy avatar
By Andy
at 2015-04-19T11:59
有幫上忙真是太好了,我抱著沒人鳥的心態發教學的orz
Daph Bay avatar
By Daph Bay
at 2015-04-21T13:10
十分感謝樓上的教學 <(_ _)> 幫了很大的忙
James avatar
By James
at 2015-04-24T17:06
都markdown了,可以在github或logdown弄個好讀版XD
Hedwig avatar
By Hedwig
at 2015-04-26T05:36
其實是從我 octopress 搬過來改成 ptt 好讀版 XD
Blanche avatar
By Blanche
at 2015-04-28T17:09
照做中

Ducky Shine4 白色版本(開箱)

Erin avatar
By Erin
at 2015-03-17T19:39
網頁好讀版。 https://www.ptt.cc/bbs/Key_Mou_Pad/M.1426592366.A.E0C.html 朝思暮想的鍵盤終於到了, (當初有要賣的消息就打電話請老闆留了), 它是Ducky Shine 4的白色版本, 剛剛從佳傳拿回來的熱騰騰開箱! Shine4的箱子,比其他鍵盤 ...

新手想要買個茶軸鍵盤

Charlotte avatar
By Charlotte
at 2015-03-17T18:33
小弟是個新手 想買個機械鍵盤來練打字速度 原本是覺得青軸的段落感和聲音都很不錯 不過在店裡試用後實在太大聲了... 想說茶軸比較小聲一些 由於預算有限 希望能選一支2000-3000左右的 目前是看中 1. CMSTORM QUICKFIRE TK/XT 2. Tesoro Durandal ...

透明鍵帽/Filco中刻鍵帽

Jake avatar
By Jake
at 2015-03-17T16:12
在發表讓售文時,請注意是否已經看過買賣規定裡的注意事項 需滿足五篇鍵鼠相關討論文章 + 版友自介這兩項條件 如未達到,請移駕至Hardwaresale版或是forsale版販售 違反規定直接劣退 請注意 沒問題之後可用 Ctrl + Y 來刪除本字串,感謝各位的配合 「欲售鍵鼠名稱」 1.透明鍵帽 108 ...

Filco Minila Air & Realforce 86U & Leopold FC660M 紅軸

Hedy avatar
By Hedy
at 2015-03-17T13:59
「欲售鍵鼠名稱」 1. Filco Minila Air 紅軸 2. Leopold FC660M 黑殼黑色PBT雷雕鍵帽 紅軸 已售出 3. Realforce 86U 白 壓力分區 「欲售價格」 1. $3500 ...

Topre Type Heaven, filco 牛皮護腕墊

Iris avatar
By Iris
at 2015-03-17T12:41
◎硬體型號: 1.Topre Type Heaven 靜電容式鍵盤 (徵到,感謝) 2.filco 牛皮護腕墊 大 ◎徵求價格: 1.3000+運費另付 2.1500+運費另付 ◎參考網頁: 1.http://www.inpad.com.tw/goods.php?act=viewandamp;no= ...