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