Virtual-Cam hardware-abstractielaag#

De virtual-cam hal is een alternatieve hardware-abstractielaag voor de lpc2106-cmucam3 hal die het prototypen van cc3-software op een pc mogelijk maakt. Dit lijkt sterk op een CMUcam3-simulator. De virtual-cam hal laadt frames die in een map zijn opgeslagen op dezelfde manier waarop de CMUcam3 normaal gesproken frames van de camera laadt. Alle normale cc3-functies worden vervolgens uitgevoerd op een virtuele fifo. Er wordt tijdens runtime extra debugtekst weergegeven die normaal niet verschijnt wanneer de lpc2106-cmucam3 hal wordt gebruikt. Dit stelt de gebruiker op de hoogte van LED-statussen en low-level cc3-commando’s die worden aangeroepen. Seriële in- en uitvoer wordt vervangen door de standaard in- en uitvoer van de applicatie.

Compileren

Om code voor de virtual-cam te compileren, typ je simpelweg hal=virtual-cam wanneer je make uitvoert. Bijvoorbeeld:

projects/hello_world :> make hal=virtual-cam

Dit genereert een uitvoerbaar bestand hello_world_virtual-cam.

Voor make clean moet je nog steeds de hal opgeven. Bijvoorbeeld om hello_world op te schonen:

projects/hello_world :> make hal=virtual-cam clean

Een virtual-cam-project uitvoeren

De virtual-cam leest afbeeldingen uit een map die is opgegeven door de omgevingsvariabele CC3_VCAM_PATH. Het pad moet relatief zijn ten opzichte van de map waar de virtual-cam-executable wordt aangeroepen. In een bash-terminal zou je bijvoorbeeld een virtual-cam-bestand als volgt kunnen uitvoeren:

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

De virtual-cam-map bevat voorbeeldafbeeldingen die in de framebuffer van de virtuele camera worden ingevoerd. De afbeeldingen moeten in PPM-formaat zijn en genummerd “IMGxxxxx.PPM” waarbij de x’en het framenummer vertegenwoordigen. De virtual-cam hal leest elke keer dat cc3_load_frame() wordt aangeroepen afbeeldingen in, in oplopende volgorde beginnend bij “IMG00000.PPM”. Zodra er geen afbeeldingen meer beschikbaar zijn, raakt de virtual-hal in paniek en stopt. Deze afbeeldingen kunnen worden gemaakt met het ppm-grab-project. Standaard slaat het ppm-grab-project ruwe, hoge-resolutie, ongecomprimeerde afbeeldingen op in het juiste formaat om door de virtual-cam hal te worden gebruikt.

Simulatieproblemen

Een belangrijk simulatieprobleem is dat timing en externe invoer van GPIO of knoppen momenteel niet worden ondersteund. In veel gevallen zal de virtual-cam hal gewoon altijd true of false retourneren om je applicatie te laten doorgaan. Bij het compileren met de virtual-cam hal wordt VIRTUAL_CAM gedefinieerd zodat je applicatie bepaalde uitvoeringsgebieden kan schakelen op basis van de huidige hal. Om bijvoorbeeld een button wait uit te schakelen bij gebruik van de virtual-cam zou je het volgende kunnen gebruiken:

#ifndef VIRTUAL_CAM
   while(!cc3_read_button());
#endif

of als je meer debuggen wilt inschakelen, zou je zoiets kunnen schrijven als:

#ifdef VIRTUAL_CAM
   write_debugging_data_to_file();
#endif