Strat de abstractizare hardware Virtual-Cam#
Hal-ul virtual-cam este un strat alternativ de abstractizare hardware față de hal-ul lpc2106-cmucam3 care permite prototiparea software-ului cc3 pe un PC. Acest lucru este foarte similar cu un simulator CMUcam3. Hal-ul virtual-cam va încărca cadrele stocate într-un director în același mod în care CMUcam3 încarcă în mod normal cadrele de la cameră. Toate funcțiile cc3 normale sunt apoi efectuate pe un fifo virtual. Text de depanare suplimentar va fi afișat în timpul execuției care în mod normal nu apare atunci când este utilizat hal-ul lpc2106-cmucam3. Acest lucru notifică utilizatorul despre stările LED-urilor și comenzile cc3 de nivel scăzut care sunt apelate. Intrarea și ieșirea seriale sunt înlocuite de intrarea și ieșirea standard ale aplicației.
Compilare
Pentru a compila cod pentru virtual-cam, tastați pur și simplu hal=virtual-cam când rulați make. De exemplu:
projects/hello_world :> make hal=virtual-cam
Aceasta va genera un fișier executabil hello_world_virtual-cam.
Pentru a face make clean, va trebui totuși să specificați hal-ul. De exemplu, pentru a curăța hello_world:
projects/hello_world :> make hal=virtual-cam clean
Rularea unui proiect virtual-cam
Virtual-cam va citi imagini dintr-un director specificat de variabila de mediu CC3_VCAM_PATH. Calea ar trebui să fie relativă la directorul unde este apelat executabilul virtual-cam. De exemplu, într-un terminal bash ați putea rula un fișier virtual-cam astfel:
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
Directorul virtual-cam conține imagini de mostră care vor fi introduse în bufferul de cadre al camerei virtuale. Imaginile trebuie să fie în format PPM și numerotate „IMGxxxxx.PPM” unde x-urile reprezintă numărul cadrului. Hal-ul virtual-cam va citi imaginile de fiecare dată când cc3_load_frame() este apelat în ordine crescătoare, începând de la „IMG00000.PPM”. Odată ce nu mai sunt disponibile imagini, virtual-hal va intra în panică și se va opri. Aceste imagini pot fi create folosind proiectul ppm-grab. În mod implicit, proiectul ppm-grab stochează imagini brute, de rezoluție înaltă, necomprimate, în formatul corect pentru a fi utilizate de hal-ul virtual-cam.
Probleme de simulare
O problemă principală de simulare este că sincronizarea și intrarea externă de la GPIO sau butoane nu sunt suportate în prezent. În multe cazuri, hal-ul virtual-cam va returna întotdeauna true sau false pentru a permite aplicației dvs. să continue. La compilarea cu hal-ul virtual-cam, VIRTUAL_CAM va fi definit astfel încât aplicația dvs. să poată comuta anumite regiuni de execuție în funcție de hal-ul curent. De exemplu, pentru a dezactiva o așteptare de buton când utilizați virtual-cam, ați putea folosi:
#ifndef VIRTUAL_CAM
while(!cc3_read_button());
#endif
sau, dacă doriți să activați mai multă depanare, ați putea scrie ceva de genul:
#ifdef VIRTUAL_CAM
write_debugging_data_to_file();
#endif