Couche d’abstraction matérielle Virtual-Cam#
La hal virtual-cam est une couche d’abstraction matérielle alternative à la hal lpc2106-cmucam3 qui permet le prototypage de logiciels cc3 sur un PC. Cela ressemble beaucoup à un simulateur de CMUcam3. La hal virtual-cam chargera les images stockées dans un répertoire de la même manière que la CMUcam3 charge normalement les images depuis la caméra. Toutes les fonctions cc3 normales sont alors exécutées sur une fifo virtuelle. Du texte de débogage supplémentaire sera affiché à l’exécution, qui n’apparaît normalement pas lorsque la hal lpc2106-cmucam3 est utilisée. Cela informe l’utilisateur des états des LED et des commandes cc3 de bas niveau qui sont appelées. L’entrée et la sortie série sont remplacées par l’entrée et la sortie standard de l’application.
Compilation
Pour compiler du code pour la virtual-cam, tapez simplement hal=virtual-cam lorsque vous exécutez make. Par exemple :
projects/hello_world :> make hal=virtual-cam
Ceci générera un fichier exécutable hello_world_virtual-cam.
Pour faire make clean, vous devrez toujours spécifier le hal. Par exemple pour nettoyer hello_world :
projects/hello_world :> make hal=virtual-cam clean
Exécuter un projet virtual-cam
La virtual-cam lira les images d’un répertoire spécifié par la variable d’environnement CC3_VCAM_PATH. Le chemin doit être relatif au répertoire où l’exécutable virtual-cam est appelé. Par exemple, dans un terminal bash, vous pourriez exécuter un fichier virtual-cam comme ceci :
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
Le répertoire virtual-cam contient des images d’exemple qui seront introduites dans la mémoire tampon d’image de la caméra virtuelle. Les images doivent être au format PPM et numérotées « IMGxxxxx.PPM » où les x représentent le numéro de l’image. La hal virtual-cam lira les images chaque fois que cc3_load_frame() est appelée, dans l’ordre croissant en commençant par « IMG00000.PPM ». Une fois qu’il n’y a plus d’images disponibles, la virtual-hal paniquera et s’arrêtera. Ces images peuvent être créées à l’aide du projet ppm-grab. Par défaut, le projet ppm-grab stocke des images brutes, haute résolution et non compressées, dans le format correct pour être utilisées par la hal virtual-cam.
Problèmes de simulation
Un problème majeur de simulation est que le cadencement et les entrées externes provenant du GPIO ou des boutons ne sont actuellement pas pris en charge. Dans de nombreux cas, la hal virtual-cam renverra simplement toujours true ou false pour permettre à votre application de continuer. Lors de la compilation avec la hal virtual-cam, VIRTUAL_CAM sera défini afin que votre application puisse basculer certaines régions d’exécution en fonction de la hal actuelle. Par exemple, pour désactiver une attente de bouton lors de l’utilisation de la virtual-cam, vous pourriez utiliser :
#ifndef VIRTUAL_CAM
while(!cc3_read_button());
#endif
ou si vous souhaitez activer davantage de débogage, vous pourriez écrire quelque chose comme :
#ifdef VIRTUAL_CAM
write_debugging_data_to_file();
#endif