Рівень апаратної абстракції 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