Lớp Trừu Tượng Hóa Phần Cứng Virtual-Cam#

Virtual-cam hal là một lớp trừu tượng hóa phần cứng thay thế cho lpc2106-cmucam3 hal cho phép tạo nguyên mẫu phần mềm cc3 trên một PC. Điều này rất tương tự một bộ mô phỏng CMUcam3. Virtual-cam hal sẽ nạp các khung hình được lưu trong một thư mục theo cùng cách mà CMUcam3 thường nạp các khung hình từ camera. Tất cả các hàm cc3 thông thường sau đó được thực hiện trên một fifo ảo. Văn bản gỡ lỗi bổ sung sẽ được hiển thị tại thời điểm chạy mà thường không xuất hiện khi lpc2106-cmucam3 hal được sử dụng. Điều này thông báo cho người dùng về các trạng thái LED, và các lệnh cc3 cấp thấp được gọi. Đầu vào và đầu ra serial được thay thế bằng đầu vào và đầu ra tiêu chuẩn của ứng dụng.

Biên Dịch

Để biên dịch mã cho virtual-cam, chỉ cần gõ hal=virtual-cam khi bạn chạy make. Ví dụ:

projects/hello_world :> make hal=virtual-cam

Điều này sẽ tạo ra một tập tin thực thi hello_world_virtual-cam.

Để make clean, bạn vẫn sẽ cần chỉ định hal. Ví dụ để clean hello_world:

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

Chạy một Dự Án virtual-cam

Virtual-cam sẽ đọc các ảnh từ một thư mục được chỉ định bởi biến môi trường CC3_VCAM_PATH. Đường dẫn nên tương đối so với thư mục nơi tệp thực thi virtual-cam được gọi. Ví dụ trong một terminal bash bạn có thể chạy một tập tin virtual-cam như:

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

Thư mục virtual-cam chứa các ảnh mẫu sẽ được cấp vào bộ đệm khung hình của camera ảo. Các ảnh cần ở định dạng PPM và được đánh số "IMGxxxxx.PPM" trong đó các chữ x biểu thị số khung hình. Virtual-cam hal sẽ đọc các ảnh mỗi khi cc3_load_frame() được gọi theo thứ tự tăng dần bắt đầu từ "IMG00000.PPM". Một khi không còn ảnh nào có sẵn, virtual-hal sẽ panic và dừng lại. Các ảnh này có thể được tạo bằng dự án ppm-grab. Theo mặc định, dự án ppm-grab lưu các ảnh thô, độ phân giải cao, không nén ở định dạng chính xác để được sử dụng bởi virtual-cam hal.

Các Vấn Đề Mô Phỏng

Một vấn đề mô phỏng chính là thời điểm và đầu vào ngoài từ GPIO hoặc các nút hiện tại không được hỗ trợ. Trong nhiều trường hợp, virtual-cam hal sẽ chỉ luôn trả về true hoặc false để cho phép ứng dụng của bạn tiếp tục. Khi biên dịch với virtual-cam hal, VIRTUAL_CAM sẽ được định nghĩa để ứng dụng của bạn có thể chuyển đổi một số vùng thực thi nhất định dựa trên hal hiện tại. Ví dụ để vô hiệu hóa một lệnh chờ nút khi sử dụng virtual-cam bạn có thể sử dụng:

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

hoặc nếu bạn muốn bật thêm gỡ lỗi bạn có thể viết một thứ gì đó như:

#ifdef VIRTUAL_CAM
   write_debugging_data_to_file();
#endif