Virtual-Cam ハードウェア抽象化層#
virtual-cam hal は、lpc2106-cmucam3 hal に代わるハードウェア抽象化層で、PC 上での cc3 ソフトウェアのプロトタイピングを可能にします。これは CMUcam3 シミュレータに非常によく似ています。virtual-cam hal は、CMUcam3 が通常カメラからフレームを読み込むのと同じ方法で、ディレクトリに保存されたフレームを読み込みます。すべての通常の cc3 関数は仮想 fifo 上で実行されます。lpc2106-cmucam3 hal を使用したときには通常表示されない追加のデバッグテキストが実行時に表示されます。これは、LED の状態や呼び出された低レベル cc3 コマンドをユーザーに通知します。シリアルの入出力は、アプリケーションの標準入力と標準出力に置き換えられます。
コンパイル
virtual-cam 用のコードをコンパイルするには、make を実行するときに hal=virtual-cam と入力するだけです。例えば:
projects/hello_world :> make hal=virtual-cam
これにより hello_world_virtual-cam 実行ファイルが生成されます。
make clean を実行するときも、hal を指定する必要があります。例えば hello_world をクリーンするには:
projects/hello_world :> make hal=virtual-cam clean
virtual-camプロジェクトの実行
virtual-cam は、CC3_VCAM_PATH 環境変数で指定されたディレクトリから画像を読み込みます。パスは、virtual-cam 実行ファイルが呼び出されるディレクトリからの相対パスにする必要があります。例えば bash ターミナルでは、次のように virtual-cam ファイルを実行できます:
projects/hello_world :> ls
hello_world_virtual-cam.exe Makefile main.c my_img_dir
projects/hello_world :> export CC3_VCAM_PATH=my_img_dir
projects/hello_world :> ./hello_world_virtual-cam.exe
virtual-cam ディレクトリには、仮想カメラのフレームバッファに供給されるサンプル画像が含まれています。画像は PPM 形式で、「IMGxxxxx.PPM」(x はフレーム番号を表す)と番号付けされている必要があります。virtual-cam hal は、cc3_load_frame() が呼び出されるたびに、「IMG00000.PPM」から始まる昇順で画像を読み込みます。利用可能な画像がなくなると、virtual-hal はパニックを起こして停止します。これらの画像は ppm-grab プロジェクトを使って作成できます。デフォルトでは、ppm-grab プロジェクト は、virtual-cam hal で使用できる正しい形式で、生の高解像度・非圧縮画像を保存します。
シミュレーションの問題
主なシミュレーションの問題の1つは、タイミングとGPIOやボタンからの外部入力が現在サポートされていないことです。多くの場合、virtual-cam halは、アプリケーションが続行できるように常にtrueまたはfalseを返すだけです。virtual-cam halでコンパイルすると、VIRTUAL_CAM が定義され、アプリケーションが現在のhalに基づいて特定の実行領域を切り替えられるようになります。例えば、virtual-camを使用しているときにボタン待ちを無効にするには、次のように使用できます:
#ifndef VIRTUAL_CAM
while(!cc3_read_button());
#endif
または、より多くのデバッグを有効にしたい場合は、次のように書くこともできます:
#ifdef VIRTUAL_CAM
write_debugging_data_to_file();
#endif