2019年02月23日

【自作キーボード】0からはじめるminiAxeビルドログ(3ファームウェア編)

自作キーボードの魅力は、
物理配列を自由にできることと、
論理配列を自由にできることだ。

前半は、
理想に近いキットをそのまま使う、キットを改造する、完全自作、
のレイヤーがある。

後半は、
デフォルトファームウェアを利用、
デフォルトを利用して、DvorakJやかえうちなどで配列変更、
ファームウェアを書き換えてプログラミング、
のレイヤーがある。

まずは、デフォルトのファームウェアを焼こう。


僕は最終的にファームウェア内に薙刀式を埋め込みたいが、
今のところ難しいので、
「普通のキーボード」として設定して、
DvorakJで薙刀式を実装している。



まずはデフォルトのファームウェアを焼き、
使ってみて、何が自分の理想と違うのか考えて、
どういうキーマップにしたいかを考える。

これは、いつもの配列作りと同じだ。
実装がDvorakJだけでなく、qmk_firmwareに拡張されただけのこと。

正確にkeymap.cをいじるには色々と勉強が必要っぽい。
しかし、あるやつの交換くらいなら簡単だろう。

keymapフォルダの中に、伝統にしたがいoookaフォルダをつくり、
そこにdefaultからkeymap.cをコピーして、これをいじることにする。
昔のファイルを履歴的に保存するためにoldフォルダもつくり、
ナンバリングして保管もする。


まず、薙刀式に必要なスペースキーが、両方の親指にないので、
親指キーを、
Ctrl、Lower、SP/Shift、SP/Shift、Raise、BS/Alt
のようにとりあえず設定してつかってみた。

LowerとRaiseの頭文字は、
LeftとRightと同じだと気づいた。これなら覚えやすいかも。

しかし、
SP/Shiftの設定が、DvorakJのSandS設定と干渉するのか、
シフトを取りこぼしたりする。
なので、SP単独とすることに。

そうするとDvorakJを立ち上げていないときにShiftキーがなくなる。
GUI(Win)やAltは僕はほとんど使わないが、ないのも困るだろう。


デフォルトのキーマップを眺めると、
他と押すことで機能するモデファイアを6個も集めてあり、
ワンショットモデファイアにすることで単打と押しっぱなしをわけ、
しかも最低限であるようにしている。

GUI(Win。MacにつなぐとCommand)、
Ctrl
Shift
Alt(MacにつなぐとOption)
の4つと、
レイヤー切り替えのLower、Raiseで計6か。

むむ。巧みな親指設計だ。

しかもGUIとAltは単打とシフトのように使う、
もともとワンショットモデファイアキーである。

この単打はどうするんだ、とデフォルトマップを眺めると、
Lowerレイヤーにいることに気づく。
なかなかテクニカルだぞ。

https://github.com/qmk/qmk_firmware/blob/master/keyboards/miniaxe/keymaps/default/keymap.c



で、いろいろ考えた末、
GUI、Alt、Shift、Ctrlのモデファイヤは親指に何も考えず残し、
SP二個も単打として残すことにする。

Lower、Raiseを、薙刀式ではほとんど利用しない、
TYに移植しようという考え方だ。

薙刀式では必要な記号や操作は編集モードに用意されているので、
記号や制御系をほとんど使わない。
使うのは、
横書き時、プログラムを多少いじるとき、
Macにつないでローマ字を打つ予定の時、
くらいだと判断し、
TYをLower、Raiseとしても、そこまで嫌ではないと決断した。

(なんなら、miniAxeは文章書き専用キーボードとして、
別用途は別のキーボードを繋ぐと割り切ってもいい)


ということで、以下のようなキーマップを設定した。

miniAxe_keymap.jpg

そのソース:keymap.c

Lowerに制御系、Raiseに記号系。記号系はUS配列準拠。

数字段は、
上段だとLower、Raiseに干渉し、
中段だと記号系に干渉するので、一列空いている下段とした。

LをおしながらでもRをおしながらでも数字が連続して入力できるように、
両方においてある。
数字段のシフトはさらにシフトキーを押しながらになるが、
頻度を考えればそこまで嫌ではない、と割り切った。
エンジニアには別の選択肢があると思われる。


keymap.cをいじるのには、フリーエディタmeryを使用。
フォントはcourier newの12ptあたりが、等幅でみやすい。

ErgoDoxのキーマップをいじる時に見るチートシート
https://qiita.com/ReSTARTR/items/970354940f49c67fb9fd

https://github.com/qmk/qmk_firmware/blob/master/keyboards/ergo42/keymaps/hdbx/keymap.c

https://leico.github.io/TechnicalNote/QMK/key-customize

などを参考にした。



以下、ハマったところ:

Tキーを単打でKC_T、押しっぱなしでレイヤー移動Lowerにするには、
LT()を使えばいいはず。
なので最初、
LT(LOWER, KC_T)
と書いたがうごかない。

LT(_LOWER, KC_T)
とレイヤー名に定義されたものでないとダメのようだ。
コンパイル時に警告してくれないからOKだと思ったよ…

その影響で、Lower、Raiseに一時いけなくなる不具合が出た。

ここで思わぬ大問題。
ソフトリセットキー、L+R+Zができなくなっていた!
つまり、書き込めなくなってしまったのだ!

(リセットキーによってBootLoaderが立ち上がるように、
QFP内に書き込まれているそうだ。
BootLoaderがなんなのかわからないが、
書き込み開始プログラムであることは予測はつく)

裏面のタクトスイッチを、
クリップの先をまっすぐにしてダブルクリック。
しかしこれが全くできない。
そういえばmeishiのときもダブルクリックが超難しかった。

ネジをあけ、半田不良を疑い、テスターでチェックし、
ボタンを押した時のみ導通するところまで確認するのに一時間。

しかし何回ダブルクリックしても書き込めない。
ダブルクリックの間隔を早くできない。爪で押すべきか、指の腹で押すべきか。

しかも、右にもタクトスイッチついてたよね?
両方ハードボタンでリセット必要なの?
ビルドガイドにははじめての書き込みにはリセット不要とあるものの、
その後の書き込みの仕様が書いてない…

結局、
proMicroはピンの2回の素早いショートでBootLoaderを8秒間有効にする、
という情報を得、
クリップを曲げてタクトスイッチの両端をショートさせるような器具をつくり、
左のだけちょんちょんと触れる(秒2打くらい)と、
書き込みがはじまりました…

この激闘で4時間を溶かした。
誰も指導者がいない状況下で、
やったこともないことを成功させるのはきつい…
電子工作やハードをやるのは、俺はじめてなのに…


ということで、LOWER、RAISEをいじる前に、
KC_Qの代わりにRESETを置いておいて、
万が一に備える、という癖がつく。
どうせQはしばらく文章には使わないし。

いまだに怖いので、Raise+PにRESETは置いたままになっております。




さあ、これでminiAxe打ち放題だ!


…と思ったら、
20gの底打ちが意外と痛いことや、
横が完全に空いてるのでホコリなどが怖いことに気づく。

で、チークを切ったり削ったりして、木枠をつくることに。
これは得意の木工なので、
材料買うところから土日でできました。
木材的には500円程度です。

完成版がこちら。
http://oookaworks.seesaa.net/article/464203119.html


いまのところパームレストがいらないのは、
親指キーを、OEMプロファイルの下段キーや中段キーを逆付けしているからかも。


qmk_firmwareにはたくさんの別の機能がある。
Nicolaを実装した人のソースを見ると、
だいぶややこしいことをしていて、
これを解読できるようにならないといけない。
3キー同時押しってあるんやろか…

これらをマスターしたら、次のビルドログになります。



追記:
結局TYのLower、Raiseが使いにくかったので、
TYをGUI、ALTにして、親指を、
Ent/Ctrl, Lower, SP, SP, Raise, BS/Shift
とすることにしました。
GUI、ALTのワンショット用は、Lower, Raiseレイヤーに置くことに。
記号やら数字やらを調整中……

posted by おおおかとしひこ at 19:18| Comment(0) | カタナ式 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。