Слой аппаратной абстракции Virtual-Cam#

hal virtual-cam — это альтернативный слой аппаратной абстракции по отношению к hal lpc2106-cmucam3, который позволяет прототипировать программное обеспечение cc3 на ПК. Это очень похоже на симулятор CMUcam3. hal virtual-cam будет загружать кадры, хранящиеся в каталоге, так же, как CMUcam3 обычно загружает кадры с камеры. Затем все обычные функции cc3 выполняются на виртуальном fifo. Во время выполнения будет отображаться дополнительный отладочный текст, который обычно не появляется при использовании hal lpc2106-cmucam3. Это уведомляет пользователя о состояниях светодиодов и низкоуровневых командах cc3, которые вызываются. Последовательный ввод и вывод заменяются стандартным вводом и выводом приложения.

Компиляция

Чтобы скомпилировать код для virtual-cam, просто введите hal=virtual-cam при запуске make. Например:

projects/hello_world :> make hal=virtual-cam

Это создаст исполняемый файл hello_world_virtual-cam.

Для make clean вам всё равно нужно будет указать hal. Например, чтобы очистить hello_world:

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 и пронумерованы «IMGxxxxx.PPM», где x представляют номер кадра. hal virtual-cam будет считывать изображения каждый раз при вызове cc3_load_frame() в порядке возрастания, начиная с «IMG00000.PPM». Как только больше не будет доступных изображений, virtual-hal вызовет панику и остановится. Эти изображения можно создать с помощью проекта ppm-grab. По умолчанию проект ppm-grab сохраняет необработанные, высокого разрешения, несжатые изображения в правильном формате для использования hal virtual-cam.

Проблемы моделирования

Одна из основных проблем моделирования состоит в том, что синхронизация по времени и внешний ввод от GPIO или кнопок в настоящее время не поддерживаются. Во многих случаях hal virtual-cam будет всегда возвращать true или false, чтобы позволить вашему приложению продолжать работу. При компиляции с hal virtual-cam будет определён VIRTUAL_CAM, чтобы ваше приложение могло переключать определённые области выполнения в зависимости от текущего hal. Например, чтобы отключить ожидание нажатия кнопки при использовании virtual-cam, вы можете использовать:

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

или, если вы хотите включить больше отладки, вы можете написать что-то вроде:

#ifdef VIRTUAL_CAM
   write_debugging_data_to_file();
#endif