Virtual-Cam 硬體抽象層#
virtual-cam hal 是 lpc2106-cmucam3 hal 之外的另一種硬體抽象層,它讓 cc3 軟體能夠在 PC 上進行原型開發。這與 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 代表畫格編號。每次呼叫 cc3_load_frame() 時,virtual-cam hal 都會從「IMG00000.PPM」開始,以遞增順序讀入影像。一旦沒有更多可用的影像,virtual-hal 就會發生 panic 並停止。這些影像可以使用 ppm-grab 專案來建立。預設情況下,ppm-grab 專案 會以可供 virtual-cam hal 使用的正確格式,儲存原始、高解析度、未壓縮的影像。
模擬問題
一個主要的模擬問題是,目前不支援計時以及來自 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