見出し画像

NX Macro ControllerのBluetooth修正パッチを作った&ドライバの話

(2022/9/7追記)
NX Macro Controller v2.06がリリースされましたので、不具合がない限りはこの記事のパッチはあてないでください。

ご挨拶

ご無沙汰しています。ゲーム好きの和菓子ことみずようかん(@AT12806379)です。
サンブレイクも発売してからもうすぐ一月が経過しようとしています。
久しぶりにマカ錬金スレと自動化スレを覗いたところ、NX Macro Controllerを用いてマクロを作成しているユーザーが「Bluetoothだと一部ボタンが押下できなかったり連打になったりする」という報告をしていました。
気になって検証してみると、確かにHOMEボタンが効かなかったり、連打になる現象が確認できました。(以前はこんなことあったっけか…?)
という事で修正したバージョンを公開したのでパッチノート的な記事です。

ダウンロードとインストール

(2022/08/11追記)
2022/07/31の不具合がモンハン側で表示されるペアリング画面で発生する事が確認されたため修正
(2022/08/03追記)
コントローラーの色の送信順が正しくなかった不具合を修正
python等でこのDLLを扱いやすくするexampleを追加
(2022/07/31追記)
想定していない箇所でNFC周りの呼び出しが行われ、連打やボタン二度押しが発生する不具合を修正
(2022/07/30追記)
接続ログを取るdebug版を公開しました。patchedを使っても不具合が残る方はdebug版で詳細なログを共有してください。(詳細はREADMEにて)

インストール方法はREADMEにも書いてありますが、NXのインストール先(デフォは"C:\Program Files (x86)\NX Macro Controller")にbtkeyLib.dllを上書き保存でokです。

修正内容と原因

・HOMEボタンが押せなかったり、ボタンが連打になるバグを修正
・NFC周りの処理改善
・ライブラリの更新

連打になるバグの原因はBluetooth側とNX側の噛み合わせ(わかりやすい言葉が見つからない…)が悪くなって起こるようです。
NXはボタンの押下状態を一秒間にかなりの頻度でBluetooth側に送信してきますが、その際に押下時間も10ms分として送信してきます。
そしてBluetooth側には押下時間が経過したらそのボタンのフラグを解除するコードが書かれています。
ではNXが押下状態を10msおきに正確にBluetooth側に伝達できているかというとそうではないようで、以下のような循環が連打バグを生んでいました。

NX側から10ms分の押下状態が送られる

Bluetooth側はそれに設定

10msを超えたのでボタンの押下解除

一番上に戻る

という事で修正、もとい押下時間の処理をrevertして値を無視する事にしました。
NX側はリアルタイムでボタンのフラグを更新し続けているので、revertしてもバグなどは発生しないはず…です。
NFCの方は文字通りで、以前はamiibo読み取りなどにアクセスしてしまうと一度切断してNXを再起動するまでBluetoothの挙動がおかしくなっていたのを修正しました。

NXのドライバと戻し方

NXのBluetooth用ドライバは我々が書いた物ではなく、BluetoothドングルをただのUSBデバイスとしてアクセスできるようにするWinUSBというドライバです。
NXを使わずとも、Zadig等を使えば同じドライバに置き換えられます。

そして、それに置き換えてから元のBluetoothデバイスに戻す方法が割と文書化されていないようなので書き残しておきます。

デバイスマネージャーを開き、「ユニバーサル シリアル バス デバイス」にあるBluetoothモジュールを選択します。(Bluetooth云々とは書かれておらずチップ名が書いてあります。名前で検索する等間違えないようにしてください。)

筆者の場合は「CSR8510 A10」です

ドライバーの更新→コンピューターを参照してドライバーを検索

コンピューター上の利用可能なドライバーの一覧から選択します→置き換える前に使われていたドライバを選択

あとは次へを押せば元のドライバに戻ります。(再起動が必要とでたら指示に従ってください。)
よく見るとNXで置き換えたドライバもリスト表示されているかと思いますが、同じ手順でこれを選択する事で(再度NX側でセットアップする事なく)Bluetoothデバイス→NXのドライバに簡単に切り替えられます。
以上、ドライバ周りのお話でした。

最後に

モンハンは8月にもアップデートが控えているそうなので、これからが楽しみですね。
また修正するべき箇所があればこのような形で修正パッチを配布しようと思います。
それでは。

この記事が気に入ったらサポートをしてみませんか?