Virtual-Cam hårdvaruabstraktionslager#
virtual-cam-hal:en är ett alternativt hårdvaruabstraktionslager till lpc2106-cmucam3-hal:en som möjliggör prototypframtagning av cc3-programvara på en PC. Detta liknar mycket en CMUcam3-simulator. virtual-cam-hal:en laddar bilder som lagras i en katalog på samma sätt som CMUcam3 normalt laddar bilder från kameran. Alla normala cc3-funktioner utförs sedan på en virtuell fifo. Ytterligare felsökningstext visas vid körning som normalt inte visas när lpc2106-cmucam3-hal:en används. Detta meddelar användaren om LED-tillstånd, och cc3-kommandon på låg nivå som anropas. Seriell in- och utmatning ersätts av applikationens standard in- och utmatning.
Kompilering
För att kompilera kod för virtual-cam, skriv helt enkelt hal=virtual-cam när du kör make. Till exempel:
projects/hello_world :> make hal=virtual-cam
Detta genererar en körbar fil hello_world_virtual-cam.
För att köra make clean måste du fortfarande ange hal:en. Till exempel för att rensa hello_world:
projects/hello_world :> make hal=virtual-cam clean
Köra ett virtual-cam-projekt
virtual-cam läser bilder från en katalog som anges av miljövariabeln CC3_VCAM_PATH. Sökvägen ska vara relativ till katalogen där den körbara virtual-cam-filen anropas. Till exempel i en bash-terminal kan du köra en virtual-cam-fil så här:
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-katalogen innehåller exempelbilder som matas in i den virtuella kamerans bildbuffert. Bilderna måste vara i PPM-format och numrerade ”IMGxxxxx.PPM” där x:en representerar bildnumret. virtual-cam-hal:en läser in bilder varje gång cc3_load_frame() anropas i stigande ordning med start från ”IMG00000.PPM”. När det inte finns fler bilder tillgängliga får den virtuella hal:en panik och stannar. Dessa bilder kan skapas med ppm-grab-projektet. Som standard lagrar ppm-grab-projektet råa, högupplösta, okomprimerade bilder i det korrekta formatet för att användas av virtual-cam-hal:en.
Simuleringsproblem
En huvudsaklig simuleringsfråga är att tidsstyrning och extern indata från GPIO eller knappar för närvarande inte stöds. I många fall returnerar virtual-cam-hal:en bara alltid true eller false för att din applikation ska kunna fortsätta. Vid kompilering med virtual-cam-hal:en definieras VIRTUAL_CAM så att din applikation kan växla vissa exekveringsregioner baserat på den aktuella hal:en. För att till exempel inaktivera en knappväntan när virtual-cam används kan du använda:
#ifndef VIRTUAL_CAM
while(!cc3_read_button());
#endif
eller om du vill aktivera mer felsökning kan du skriva något i stil med:
#ifdef VIRTUAL_CAM
write_debugging_data_to_file();
#endif