Virtual-Cam Hardware Abstraction Layer#
Die virtual-cam-HAL ist eine alternative Hardware-Abstraktionsschicht zur lpc2106-cmucam3-HAL, die das Prototyping von cc3-Software auf einem PC ermöglicht. Dies ist einem CMUcam3-Simulator sehr ähnlich. Die virtual-cam-HAL lädt in einem Verzeichnis gespeicherte Frames auf die gleiche Weise, wie die CMUcam3 normalerweise Frames von der Kamera lädt. Alle normalen cc3-Funktionen werden dann auf einer virtuellen FIFO ausgeführt. Zusätzlicher Debugging-Text wird zur Laufzeit angezeigt, der normalerweise nicht erscheint, wenn die lpc2106-cmucam3-HAL verwendet wird. Dies benachrichtigt den Benutzer über LED-Zustände und Low-Level-cc3-Befehle, die aufgerufen werden. Serielle Ein- und Ausgabe werden durch die Standard-Ein- und -Ausgabe der Anwendung ersetzt.
Kompilieren
Um Code für die virtual-cam zu kompilieren, geben Sie einfach hal=virtual-cam ein, wenn Sie make ausführen. Zum Beispiel:
projects/hello_world :> make hal=virtual-cam
Dies erzeugt eine ausführbare Datei hello_world_virtual-cam.
Für make clean müssen Sie weiterhin die hal angeben. Zum Beispiel, um hello_world zu bereinigen:
projects/hello_world :> make hal=virtual-cam clean
Ein virtual-cam-Projekt ausführen
Die virtual-cam liest Bilder aus einem Verzeichnis, das durch die Umgebungsvariable CC3_VCAM_PATH angegeben wird. Der Pfad sollte relativ zu dem Verzeichnis sein, in dem die virtual-cam-ausführbare Datei aufgerufen wird. Zum Beispiel könnten Sie in einem Bash-Terminal eine virtual-cam-Datei wie folgt ausführen:
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
Das virtual-cam-Verzeichnis enthält Beispielbilder, die in den Frame-Buffer der virtuellen Kamera eingespeist werden. Die Bilder müssen im PPM-Format vorliegen und „IMGxxxxx.PPM“ nummeriert sein, wobei die x die Frame-Nummer darstellen. Die virtual-cam-HAL liest jedes Mal, wenn cc3_load_frame() aufgerufen wird, Bilder in aufsteigender Reihenfolge ein, beginnend mit „IMG00000.PPM“. Sobald keine weiteren Bilder verfügbar sind, gerät die virtual-hal in Panik und stoppt. Diese Bilder können mit dem ppm-grab-Projekt erstellt werden. Standardmäßig speichert das ppm-grab-Projekt rohe, hochauflösende, unkomprimierte Bilder im korrekten Format zur Verwendung durch die virtual-cam-HAL.
Simulationsprobleme
Ein Hauptproblem der Simulation ist, dass Timing und externe Eingaben von GPIO oder Tasten derzeit nicht unterstützt werden. In vielen Fällen gibt die virtual-cam hal einfach immer true oder false zurück, damit Ihre Anwendung fortgesetzt werden kann. Beim Kompilieren mit der virtual-cam hal wird VIRTUAL_CAM definiert, sodass Ihre Anwendung bestimmte Ausführungsbereiche basierend auf der aktuellen hal umschalten kann. Um beispielsweise ein Warten auf einen Tastendruck bei Verwendung der virtual-cam zu deaktivieren, könnten Sie Folgendes verwenden:
#ifndef VIRTUAL_CAM
while(!cc3_read_button());
#endif
oder wenn Sie mehr Debugging aktivieren möchten, könnten Sie etwas wie das Folgende schreiben:
#ifdef VIRTUAL_CAM
write_debugging_data_to_file();
#endif