USBデバイスの製作(7)
サンプルをコンパイルして書き込むのはできたし環境も出来た。
今度は自分独自のものをやってみることにする。
まずはUSB-IOもどきに挑戦する。
ベースは
EVK527-series4-hidio-2_0_1-doc.zip
というのがそれにあたる。
ただ今回はホストも作りたいので
generic_usb_hid_2008-11-19.zip
も一緒に調べる。
このプログラムはいいのだが、
出力:1バイト目にOnかOffか、2バイト目にLED番号を書く。
if(Led1 == false) {
Led1 = true;
m_Led1.SetWindowText(_T("LED 1 ON"));
DYNCALL(writeData)((UCHAR *)"11");
}
else {
Led1 = false;
m_Led1.SetWindowText(_T("LED 1 OFF"));
DYNCALL(writeData)((UCHAR *)"01");
}
入力:1バイト目を見る。
if(sbuffer[0]==1) {
AddRecievedData("Button as been pressed");
}
else {
AddRecievedData("Button as been released");
}
となっている。
これでもいいが、もっと単純に投げたデータをそのまま書いたり読んだりするようにする。
ホストプログラムはAtUsbHid.dllが使える。
これは入力8バイトと出力8バイトを転送するもので簡単な呼び出しで実行できる。
(ヘッダは後者に含まれている。)
面倒なのでDelphi用のPascalヘッダを作成する。
これでホストにサンプルを書き込んで実験。
ここまでは簡単に動く。
162側も書き換えてみる。LedとかJoyとかいう名前もおかしいので自前で書き換える。
するといろりろなファイルに変更が波及する。こうやって勉強するものなのかもしれない。
それやこれやをやっているとめでたく動作する。
USB-IOみたいに使えるしdllもある。
それでは面白くないので拡張を考える。
仕様を読むとSCIがある。CDCにするとブリッジ風なので、HIDとSCIの変換を考える。
これはCypressのものでもMOTOという会社からサンプルがあった。
こういうブリッジをやると転送速度の違いを考慮して設計しなくてはいけない。
つまりアプリにはある程度制限がかかる。
しかしメリットもある
・HostはComとして扱う必要がない(設定が要らない)
・DeviceはSCIで拡張が簡単。例えばAVRをもう1つなど
というメリットがある。
この162にはADコンバータがない。(TT)
外付けでSPI経由というのもあるのだが、価格とか入手性とか柔軟性からすれば、AVRをもう1つつないでも似た様なものである。(するとCDC+AVRと変わらないが、IOが使える。)
それもあって、このSCIを活用することにする。