Livello di astrazione hardware Virtual-Cam#

L’hal virtual-cam è un livello di astrazione hardware alternativo all’hal lpc2106-cmucam3 che consente la prototipazione del software cc3 su un PC. Questo è molto simile a un simulatore della CMUcam3. L’hal virtual-cam caricherà i fotogrammi memorizzati in una directory nello stesso modo in cui la CMUcam3 normalmente carica i fotogrammi dalla fotocamera. Tutte le normali funzioni cc3 vengono quindi eseguite su una fifo virtuale. Del testo di debug aggiuntivo verrà visualizzato in fase di esecuzione che normalmente non appare quando viene utilizzato l’hal lpc2106-cmucam3. Questo notifica all’utente gli stati dei LED e i comandi cc3 di basso livello che vengono chiamati. L’input e l’output seriali sono sostituiti dall’input e output standard dell’applicazione.

Compilazione

Per compilare il codice per la virtual-cam, digita semplicemente hal=virtual-cam quando esegui make. Per esempio:

projects/hello_world :> make hal=virtual-cam

Questo genererà un file eseguibile hello_world_virtual-cam.

Per fare make clean, dovrai comunque specificare l’hal. Per esempio, per pulire hello_world:

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

Esecuzione di un progetto virtual-cam

La virtual-cam leggerà le immagini da una directory specificata dalla variabile d’ambiente CC3_VCAM_PATH. Il percorso dovrebbe essere relativo alla directory in cui viene chiamato l’eseguibile virtual-cam. Ad esempio, in un terminale bash potresti eseguire un file virtual-cam come:

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

La directory virtual-cam contiene immagini di esempio che verranno inserite nel frame buffer della fotocamera virtuale. Le immagini devono essere in formato PPM e numerate «IMGxxxxx.PPM» dove le x rappresentano il numero del fotogramma. L’hal virtual-cam leggerà le immagini ogni volta che cc3_load_frame() viene chiamato in ordine crescente a partire da «IMG00000.PPM». Una volta che non sono più disponibili immagini, il virtual-hal andrà in panico e si fermerà. Queste immagini possono essere create utilizzando il progetto ppm-grab. Per impostazione predefinita, il progetto ppm-grab memorizza immagini grezze, ad alta risoluzione e non compresse nel formato corretto per essere utilizzate dall’hal virtual-cam.

Problemi di simulazione

Un problema principale della simulazione è che la temporizzazione e l’input esterno da GPIO o pulsanti non sono attualmente supportati. In molti casi, l’hal virtual-cam restituirà semplicemente sempre true o false per consentire alla tua applicazione di continuare. Quando si compila con l’hal virtual-cam, VIRTUAL_CAM sarà definito in modo che la tua applicazione possa commutare determinate regioni di esecuzione in base all’hal corrente. Ad esempio, per disabilitare un’attesa del pulsante quando si utilizza la virtual-cam potresti usare:

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

oppure se vuoi abilitare più debug potresti scrivere qualcosa come:

#ifdef VIRTUAL_CAM
   write_debugging_data_to_file();
#endif