Warstwa abstrakcji sprzętu Virtual-Cam#

Hal virtual-cam to alternatywna warstwa abstrakcji sprzętu (hal) w stosunku do hal lpc2106-cmucam3, która umożliwia prototypowanie oprogramowania cc3 na PC. Jest to bardzo podobne do symulatora CMUcam3. Hal virtual-cam będzie wczytywać klatki przechowywane w katalogu w ten sam sposób, w jaki CMUcam3 normalnie wczytuje klatki z kamery. Wszystkie normalne funkcje cc3 są następnie wykonywane na wirtualnym fifo. W czasie działania wyświetlany będzie dodatkowy tekst debugowania, który normalnie nie pojawia się, gdy używany jest hal lpc2106-cmucam3. Informuje on użytkownika o stanach diod LED oraz o wywoływanych niskopoziomowych poleceniach cc3. Wejście i wyjście szeregowe są zastępowane standardowym wejściem i wyjściem aplikacji.

Kompilowanie

Aby skompilować kod dla virtual-cam, po prostu wpisz hal=virtual-cam podczas uruchamiania make. Na przykład:

projects/hello_world :> make hal=virtual-cam

To wygeneruje plik wykonywalny hello_world_virtual-cam.

Aby wykonać make clean, nadal musisz określić hal. Na przykład, aby wyczyścić hello_world:

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

Uruchamianie projektu virtual-cam

Virtual-cam będzie odczytywać obrazy z katalogu określonego przez zmienną środowiskową CC3_VCAM_PATH. Ścieżka powinna być względna do katalogu, w którym wywoływany jest plik wykonywalny virtual-cam. Na przykład w terminalu bash możesz uruchomić plik virtual-cam w następujący sposób:

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

Katalog virtual-cam zawiera przykładowe obrazy, które będą podawane do bufora klatki wirtualnej kamery. Obrazy muszą być w formacie PPM i ponumerowane „IMGxxxxx.PPM”, gdzie x-y reprezentują numer klatki. Hal virtual-cam będzie wczytywać obrazy za każdym razem, gdy wywoływane jest cc3_load_frame(), w rosnącej kolejności, zaczynając od „IMG00000.PPM”. Gdy nie będzie już więcej dostępnych obrazów, virtual-hal wpadnie w panikę i zatrzyma się. Obrazy te można tworzyć za pomocą projektu ppm-grab. Domyślnie projekt ppm-grab przechowuje surowe, wysokorozdzielcze, nieskompresowane obrazy w poprawnym formacie do użycia przez hal virtual-cam.

Problemy z symulacją

Jednym z głównych problemów symulacji jest to, że taktowanie oraz zewnętrzne wejście z GPIO lub przycisków nie są obecnie obsługiwane. W wielu przypadkach hal virtual-cam po prostu zawsze zwróci true lub false, aby umożliwić kontynuowanie działania Twojej aplikacji. Podczas kompilowania z hal virtual-cam zdefiniowane zostanie VIRTUAL_CAM, aby Twoja aplikacja mogła przełączać określone obszary wykonywania w zależności od bieżącego hal. Na przykład, aby wyłączyć oczekiwanie na przycisk podczas używania virtual-cam, możesz użyć:

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

lub jeśli chcesz włączyć więcej debugowania, możesz napisać coś w rodzaju:

#ifdef VIRTUAL_CAM
   write_debugging_data_to_file();
#endif