Virtual-Cam 하드웨어 추상화 계층#
virtual-cam hal은 PC에서 cc3 소프트웨어의 프로토타이핑을 가능하게 하는 lpc2106-cmucam3 hal에 대한 대체 하드웨어 추상화 계층입니다. 이는 CMUcam3 시뮬레이터와 매우 유사합니다. virtual-cam hal은 CMUcam3가 일반적으로 카메라에서 프레임을 로드하는 것과 같은 방식으로 디렉터리에 저장된 프레임을 로드합니다. 그런 다음 모든 일반 cc3 함수가 가상 fifo에서 수행됩니다. lpc2106-cmucam3 hal을 사용할 때 일반적으로 나타나지 않는 추가 디버깅 텍스트가 런타임에 표시됩니다. 이는 사용자에게 LED 상태와 호출되는 저수준 cc3 명령을 알려줍니다. 시리얼 입력 및 출력은 애플리케이션의 표준 입력 및 출력으로 대체됩니다.
컴파일
virtual-cam용 코드를 컴파일하려면, make를 실행할 때 간단히 hal=virtual-cam을 입력하십시오. 예를 들어:
projects/hello_world :> make hal=virtual-cam
이것은 hello_world_virtual-cam 실행 파일을 생성합니다.
make clean을 하려면, 여전히 hal을 지정해야 합니다. 예를 들어 hello_world를 clean하려면:
projects/hello_world :> make hal=virtual-cam clean
virtual-cam 프로젝트 실행
virtual-cam은 CC3_VCAM_PATH 환경 변수로 지정된 디렉터리에서 이미지를 읽습니다. 경로는 virtual-cam 실행 파일이 호출되는 디렉터리를 기준으로 해야 합니다. 예를 들어 bash 터미널에서 다음과 같이 virtual-cam 파일을 실행할 수 있습니다:
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
virtual-cam 디렉터리에는 가상 카메라 프레임 버퍼에 공급될 샘플 이미지가 포함되어 있습니다. 이미지는 PPM 형식이어야 하며 x가 프레임 번호를 나타내는 “IMGxxxxx.PPM”으로 번호가 매겨져야 합니다. virtual-cam hal은 cc3_load_frame()이 호출될 때마다 “IMG00000.PPM”부터 시작하여 증가하는 순서로 이미지를 읽어들입니다. 더 이상 사용 가능한 이미지가 없으면, virtual-hal은 패닉하고 멈춥니다. 이 이미지들은 ppm-grab 프로젝트를 사용하여 만들 수 있습니다. 기본적으로, ppm-grab 프로젝트는 virtual-cam hal에서 사용할 수 있는 올바른 형식으로 원시, 고해상도, 비압축 이미지를 저장합니다.
시뮬레이션 문제
한 가지 주요 시뮬레이션 문제는 타이밍과 GPIO 또는 버튼으로부터의 외부 입력이 현재 지원되지 않는다는 것입니다. 많은 경우, virtual-cam hal은 애플리케이션이 계속되도록 항상 true 또는 false를 반환합니다. virtual-cam hal로 컴파일할 때, 애플리케이션이 현재 hal에 따라 특정 실행 영역을 전환할 수 있도록 VIRTUAL_CAM이 정의됩니다. 예를 들어 virtual-cam을 사용할 때 버튼 대기를 비활성화하려면 다음을 사용할 수 있습니다:
#ifndef VIRTUAL_CAM
while(!cc3_read_button());
#endif
또는 더 많은 디버깅을 활성화하려면 다음과 같이 작성할 수 있습니다:
#ifdef VIRTUAL_CAM
write_debugging_data_to_file();
#endif