Capa de abstracción de hardware Virtual-Cam#
La hal de virtual-cam es una capa de abstracción de hardware alternativa a la hal lpc2106-cmucam3 que permite prototipar software cc3 en un PC. Esto es muy similar a un simulador de la CMUcam3. La hal de virtual-cam cargará fotogramas almacenados en un directorio de la misma manera que la CMUcam3 normalmente carga fotogramas de la cámara. Todas las funciones cc3 normales se realizan entonces en una fifo virtual. Se mostrará texto de depuración adicional en tiempo de ejecución que normalmente no aparece cuando se usa la hal lpc2106-cmucam3. Esto notifica al usuario de los estados de los LED y de los comandos cc3 de bajo nivel que se llaman. La entrada y salida serie se reemplazan por la entrada y salida estándar de la aplicación.
Compilación
Para compilar código para la virtual-cam, simplemente escriba hal=virtual-cam cuando ejecute make. Por ejemplo:
projects/hello_world :> make hal=virtual-cam
Esto generará un archivo ejecutable hello_world_virtual-cam.
Para hacer make clean, todavía necesitará especificar la hal. Por ejemplo, para limpiar hello_world:
projects/hello_world :> make hal=virtual-cam clean
Ejecución de un proyecto virtual-cam
La virtual-cam leerá imágenes de un directorio especificado por la variable de entorno CC3_VCAM_PATH. La ruta debería ser relativa al directorio donde se llama al ejecutable de virtual-cam. Por ejemplo, en un terminal bash podría ejecutar un archivo virtual-cam así:
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
El directorio virtual-cam contiene imágenes de muestra que se introducirán en el búfer de fotogramas de la cámara virtual. Las imágenes deben estar en formato PPM y numeradas «IMGxxxxx.PPM» donde las x representan el número de fotograma. La hal de virtual-cam leerá las imágenes cada vez que se llame a cc3_load_frame() en orden creciente comenzando desde «IMG00000.PPM». Una vez que no haya más imágenes disponibles, la virtual-hal entrará en pánico y se detendrá. Estas imágenes pueden crearse usando el proyecto ppm-grab. De forma predeterminada, el proyecto ppm-grab almacena imágenes en bruto, de alta resolución y sin comprimir en el formato correcto para ser usadas por la hal de virtual-cam.
Problemas de simulación
Un problema principal de la simulación es que la temporización y la entrada externa desde GPIO o botones actualmente no son compatibles. En muchos casos, la hal de virtual-cam simplemente devolverá siempre verdadero o falso para permitir que su aplicación continúe. Al compilar con la hal de virtual-cam, se definirá VIRTUAL_CAM para que su aplicación pueda cambiar ciertas regiones de ejecución según la hal actual. Por ejemplo, para deshabilitar una espera de botón al usar la virtual-cam podría usar:
#ifndef VIRTUAL_CAM
while(!cc3_read_button());
#endif
o si desea habilitar más depuración podría escribir algo como:
#ifdef VIRTUAL_CAM
write_debugging_data_to_file();
#endif