⌨️

SPLIT_USB_DETECTのデメリットと緩和法

2021/03/13に公開

Pro Micro互換機の幾つかに、純正のような電源の逆流とでもいうべき現象が起こるモノが確認されました。この記事はその現象と対策を紹介した以下の記事の枝葉を掘り下げるモノです。

上記の記事では解決策として紹介しているSPLIT_USB_DETECTを設定することによる影響を無視できるものとしています。確かに通常使用ではその通り無視してよいほどの差ですが、実際に発生するその差異を知っておくことはQMK Firmwareと付き合う上で損にはなりません。では早速その差異を見ていきましょう

LEDの点灯タイミングがズレる

SPLIT_USB_DETECTを設定すると子側のキーボードではUSBが繋がっていないことを判定するために一定時間待機します。その間に親側は起動しRGB Lighting機能等によるLEDアニメーションを開始します。そして子側はUSBの判定が終わったあとでLEDアニメーションを開始するのでLEDの点灯タイミングがズレるのです。

ただ幸いなことに数秒もすると親子間でタイミングの調整が行われ自動的にLEDアニメーションが同期します。

しかしもしも2台のPro Microの動作タイミングに同期を仮定した拡張機能を自作していた場合にはSPLIT_USB_DETECTの影響を受け自動的に補正されず、動作タイミングがズレ意図しない挙動をする可能性があります。そのようなケースではRGB LightningとSpilt機能の実装を参考に同期を取り直すコードを書き足すと良いでしょう。

子側の起動に時間がかかる

前述したように子側のキーボードはUSBが繋がっていないことを判定するために一定の時間を要します。そのためファームウェアや特殊なキーマップを開発してテストしたい時のような、自作キーボードを何度も再起動するようなケースではこの待ち時間がストレスになります。

この待ち時間はデフォルトでは2秒に設定されておりSPLIT_USB_TIMEOUT_POLLを定義することでミリ秒単位でカスタマイズできます。SPLIT_USB_TIMEOUT_POLLを書く場所はconfig.hで、例えば以下のように記述することでこの時間を500ミリ秒に短縮できます。

#define SPLIT_USB_DETECT
#define SPLIT_USB_TIMEOUT_POOL 500

以上、どちらも些細なことで普通に使ってる分にはまったく問題になりません。しかし自分で設計したキーボードのファームを書いているときや、カスタマイズで特殊なキーマップを定義している場合などは、こういう問題が起こりうるんだということを頭の片隅にでも置いておくと、ちょっと助かることがあるかもしれません。

Discussion