コントローラ側についてはType CのCC信号を正しく処理してなさそう。内部的にはUSB 1.1フルスピードで話していて、D+/D-/GNDだけ結線されれば会話可能です。が、CC信号が処理されてないためか正規のType Cホストは信号を通しません。Type CメスからType Aオスに変換するタイプの変換器を通すと(変換器の作りに依存するかもしれませんが)Type Aのホストと話せるようになります。
正規コントローラは起動後一通りネゴして動作開始した直後、もう一度再接続をかけて、2回目のネゴでは別のVID/PID、デバイスデスクリプタ等を返します。HIDレポートのフォーマットも違うんですね。特に認証やプロテクトに関わる処理でもなさそうなので、これは良くわからない。というかHIDレポートも使ってない変な情報が多くて、正しく理解せずにどこかからのコピペで動かしてる?いずれにせよ、基本はこの2つ目のデバイスのマネをしてやれば本体は認識します。Wiresharkあたりで情報見ればあとはすぐ。
取り敢えず動いた。まだ必要十分条件は調べてないけど、純正コンがVID/PID書き換えて再起動とか変な動きしてる割には、特にプロテクトとか認証なしで認識してくれた。Type CのCC信号がアレなのは意図的なのかバグなのか…… pic.twitter.com/hrulxQsm3E— とよしま (@toyoshim) August 2, 2018
この時点ではUSBの信号をロジアナ経由でUSBプロトコルアナライザにかけてました。最初に一瞬見えるデバイスでネゴシエーションでも必要なのかと思っていたので。調査にはLinuxを内蔵させてるアケコンを使っていて、SSHでアケコン内にログインしながらUSB Gadgetドライバを試行錯誤で書き換えながら調整。USBのコントローラとしての挙動を好き勝手に書き換えて、本体側の反応を見てみるわけです。わりとどうでも良いと思ってた差異に反応して弾いてくるんだよね。
次はV-USBで変換器作れるように、最小限の構成を手探りで探す。HIDレポートのフォーマットを必要最低限にすると、なぜか左右入力が効かなくなるとか。良くわからない問題もあったりしたけど、たぶんこんな感じで。この結果を反映させたV-USBを使ったコントローラねぎ塩はロースピードできちんと動いてくれました。
という事で、あとは煮るなり焼くなり。もし本家の商売の邪魔になるようなら情報は即座に消したいと思いますので。権利者の方、こっそりご連絡ください。公式コンを詐称して必要最低限のHIDレポートを投げるUSBコントローラを書いた。 pic.twitter.com/Pu4rv2cb4a— とよしま (@toyoshim) August 2, 2018
0 件のコメント:
コメントを投稿