- 無線LAN接続機能
WiiU本体とJetson TK1を無線LANで接続する機能が必要です。WindowsでいうところのSSIDを選択してセキュリティキーを入れたりAOSSとかで接続するということをやってくれる機能となります。Linuxでは通常"hostap"や"wpa_supplicant"などのソフトウェアでこのような機能を実現しますが、WiiU本体とGamePad間の無線通信は既存の規格から少し改変(このあたりを参照)されているのでそのままこれらのソフトウェアを使用することはできません。この機能に関してはもうすでに実現されているソフトウェア(ミドルウェア?)である"drc-hostap"が存在しますので素直にそれを使用することにします。 - 通信機能
WiiU本体と無線で接続した後は、実際に通信する機能が必要です。WiiU本体からGamePadにはGamePadに表示する動画や音声といったものが飛んできます。逆にGamePadからWiiU本体へはキーの入力情報が送信されます(これ以外にもいろいろ飛んでいるのですがここでは割愛します)。通信自体は通常のUDP(TCPじゃない方)なのでソケットプログラミングで実現できます。通信プロトコルはこのあたりに書かれているようで書かれていないので、"drc-sim"の処理を解析して実装しています。 - 画面表示機能
WiiU本体から送信された画像データはH264で圧縮されているので、これをデコード&表示する必要があります。デコードにはFFMPEG、表示にはOpenCVを使用しています。表示はもうちょっとちゃんとしたものを使用した方がいいのかもしれませんが、面倒くさいので…。 - 音声出力機能
画面同様GamePadには音声も飛んできます。が、音声は必須ではないのでまあ、いいかと考え、現時点ではこの機能は未実装です。PulseAudioとか使用すれば音声出力は実現できそうです。
エミュレーションには上記の機能を実現する必要がありますが、無線LAN接続機能のみ既存のもの("drc-hostap")を使用して、その他の機能はC言語で実装しています。
使用している既存のソフトウェアについては以下のものです。
- "drc-hostap"
既存の"hostap"を改変したものらしい。ここにあるソースをコンパイルして使用。 - gcc
これがないと始まらない。コンパイラ。 - ffmpeg
H264に圧縮された動画のデコードに必要。ライブラリを組み込んで使用する。パラメータは"drc-sim"で使用されているものをチラ見。 - OpenCV
画面表示と画像認識で使用。画像を取り込めれば簡単に画面表示ができるので楽。しかし、あくまで画像処理ライブラリなので音声は扱えない。
次→そのうち