Vrstva hardwarové abstrakce Virtual-Cam#
Virtual-cam hal je alternativní vrstva hardwarové abstrakce k hal lpc2106-cmucam3, která umožňuje prototypování softwaru cc3 na PC. Je to velmi podobné simulátoru CMUcam3. Virtual-cam hal načte snímky uložené v adresáři stejným způsobem, jakým CMUcam3 normálně načítá snímky z kamery. Všechny běžné funkce cc3 se pak provádějí na virtuálním fifo. Za běhu se zobrazí dodatečný ladicí text, který se normálně při použití hal lpc2106-cmucam3 neobjevuje. To uživatele informuje o stavech LED a nízkoúrovňových příkazech cc3, které jsou volány. Sériový vstup a výstup je nahrazen standardním vstupem a výstupem aplikace.
Kompilace
Chcete-li zkompilovat kód pro virtual-cam, jednoduše při spuštění make zadejte hal=virtual-cam. Například:
projects/hello_world :> make hal=virtual-cam
Toto vygeneruje spustitelný soubor hello_world_virtual-cam.
Pro make clean budete stále muset zadat hal. Například pro vyčištění hello_world:
projects/hello_world :> make hal=virtual-cam clean
Spuštění projektu virtual-cam
Virtual-cam bude číst obrazy z adresáře určeného proměnnou prostředí CC3_VCAM_PATH. Cesta by měla být relativní k adresáři, kde je volán spustitelný soubor virtual-cam. Například v terminálu bash byste mohli spustit soubor virtual-cam takto:
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
Adresář virtual-cam obsahuje ukázkové obrazy, které budou přiváděny do snímkového bufferu virtuální kamery. Obrazy musí být ve formátu PPM a očíslované „IMGxxxxx.PPM“, kde x představují číslo snímku. Virtual-cam hal načte obrazy pokaždé, když je zavolána cc3_load_frame() ve vzestupném pořadí počínaje „IMG00000.PPM“. Jakmile již nejsou k dispozici žádné další obrazy, virtual-hal zpanikaří a zastaví se. Tyto obrazy lze vytvořit pomocí projektu ppm-grab. Ve výchozím nastavení projekt ppm-grab ukládá surové, nekomprimované obrazy ve vysokém rozlišení ve správném formátu pro použití virtual-cam hal.
Problémy se simulací
Jedním hlavním problémem simulace je, že časování a externí vstup z GPIO nebo tlačítek není v současnosti podporován. V mnoha případech bude virtual-cam hal jednoduše vždy vracet true nebo false, aby vaše aplikace mohla pokračovat. Při kompilaci s virtual-cam hal bude definováno VIRTUAL_CAM, aby vaše aplikace mohla přepínat určité oblasti provádění na základě aktuálního hal. Například k deaktivaci čekání na tlačítko při použití virtual-cam byste mohli použít:
#ifndef VIRTUAL_CAM
while(!cc3_read_button());
#endif
nebo pokud chcete povolit více ladění, mohli byste napsat něco jako:
#ifdef VIRTUAL_CAM
write_debugging_data_to_file();
#endif