ชั้นแอบสแตรกชันฮาร์ดแวร์ Virtual-Cam#

hal ของ virtual-cam เป็นชั้นแอบสแตรกชันฮาร์ดแวร์ทางเลือกแทน hal lpc2106-cmucam3 ที่ช่วยให้สามารถสร้างต้นแบบซอฟต์แวร์ cc3 บนพีซีได้ สิ่งนี้คล้ายกับตัวจำลอง CMUcam3 อย่างมาก hal ของ virtual-cam จะโหลดเฟรมที่เก็บไว้ในไดเรกทอรีในแบบเดียวกับที่ CMUcam3 โหลดเฟรมจากกล้องตามปกติ จากนั้นฟังก์ชัน cc3 ปกติทั้งหมดจะถูกดำเนินการบน fifo เสมือน ข้อความดีบักเพิ่มเติมจะแสดงในเวลารันซึ่งปกติจะไม่ปรากฏเมื่อใช้ hal lpc2106-cmucam3 สิ่งนี้แจ้งผู้ใช้เกี่ยวกับสถานะ LED และคำสั่ง cc3 ระดับต่ำที่ถูกเรียก อินพุตและเอาต์พุตอนุกรมถูกแทนที่ด้วยอินพุตและเอาต์พุตมาตรฐานของแอปพลิเคชัน

การคอมไพล์

ในการคอมไพล์โค้ดสำหรับ virtual-cam เพียงพิมพ์ hal=virtual-cam เมื่อคุณรัน make ตัวอย่างเช่น:

projects/hello_world :> make hal=virtual-cam

สิ่งนี้จะสร้างไฟล์ปฏิบัติการ hello_world_virtual-cam

ในการ make clean คุณยังคงต้องระบุ hal ตัวอย่างเช่นในการ clean 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 จะ panic และหยุด ภาพเหล่านี้สามารถสร้างได้โดยใช้โปรเจกต์ ppm-grab โดยค่าเริ่มต้น โปรเจกต์ ppm-grab จะเก็บภาพดิบ ความละเอียดสูง ไม่บีบอัด ในรูปแบบที่ถูกต้องเพื่อใช้โดย hal ของ virtual-cam

ปัญหาการจำลอง

ปัญหาการจำลองหลักอย่างหนึ่งคือ ปัจจุบันยังไม่รองรับจังหวะเวลาและอินพุตภายนอกจาก GPIO หรือปุ่ม ในหลายกรณี virtual-cam hal จะส่งคืนจริงหรือเท็จเสมอเพื่อให้แอปพลิเคชันของคุณดำเนินต่อไปได้ เมื่อคอมไพล์ด้วย virtual-cam hal จะมีการกำหนด VIRTUAL_CAM เพื่อให้แอปพลิเคชันของคุณสามารถสลับบางส่วนของการทำงานตาม hal ปัจจุบันได้ ตัวอย่างเช่น หากต้องการปิดใช้งานการรอปุ่มเมื่อใช้ virtual-cam คุณสามารถใช้:

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

หรือหากคุณต้องการเปิดใช้งานการดีบักเพิ่มเติม คุณสามารถเขียนบางอย่างเช่น:

#ifdef VIRTUAL_CAM
   write_debugging_data_to_file();
#endif