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