procon_bypass_manの開発日記3

前回 http://blog.jiikko.com/175

https://rubygems.org/gems/procon_bypass_man/versions/0.2.0
0.2.0 を公開した。このテキストでは0.2.0の内容について書く。

前回書いた日記からやっていたこと

細かいバグ修正は端折る。主なことは次のとおりで、接続の改善と趣味の実装をした。

  • 起動処理の高速化
  • 接続処理のさらなる安定化
  • 接続が安定化するまでの時間短縮
  • 接続に成功するとhomeボタンのledが光らせる

起動処理の高速化

実測値ではないんだけど、体感で起動時間が10秒くらいから7秒くらいになった。
ログを見るとUSB Gadget APIのリセットタイミングが変だったせいで、初期化処理が毎回2回走っていて遅くなっていたことに気がついた。実行順番を入れ替えることで最低限の処理で済むようになって結果的に起動時間が短くなった。

接続処理のさらなる安定化

前回のアップデートで接続処理の安定化に成功した。これによって10回に1回くらいまで失敗確率を下げることができた。
今回のアップデートでは1000回に1回くらいまで失敗確率を下げることができたと思う。1000という数字は適当だけど、今のところ接続に失敗したところは見ていない。

https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering をわからないなりに読んでいると接続プロトコルの理解度が上がってきて実装できた。

接続が安定化するまでの時間短縮

procon_bypass_manはUSB通信のデータを仲介していて書き換えている。通信内容を仲介するにはその前に、Switch本体にラズパイをプロコンであると誤解させる必要がある。今までは、Switchにその誤解をさせるプロトコルをかなりヒューリスティックに動かしていた。
今回のアップデートでは、そのプロトコルの中身を解釈して、「誤解」に必要なデータの送受信を見届けたら処理を進めるようにした。これによって接続の安定化に必要な時間が2秒未満になった。かなりいい感じ。

接続に成功するとhomeボタンのledが光らせる

見出しの通り、接続に成功したらプロコンのhomeボタンに搭載されているledを光らせるようにした。
今までは接続処理がヒューリスティックだったので、任意のデータを注入する機構はなかったが、今回のアップデートで実装してみた。

次にやっていること

プロコンで入力しているボタンの入力表示をやろうと思っている。配信者に需要があるっぽいのと、実装がそんなに難しくないっぽい。
他にはオートトリガー見たいのも実装したいなと思っているけど、本当にやるかはわからない。
また、https://pbm-cloud.herokuapp.com/ の実装も進めたい。

おわりに

GWということもあっていっぱい改善ができた。
それと、宣伝動画も作ってみた。(なお無風)
https://www.nicovideo.jp/watch/sm40417049

おわり