שכבת הפשטת חומרה של Virtual-Cam#
ה-hal של virtual-cam הוא שכבת הפשטת חומרה חלופית ל-hal של lpc2106-cmucam3 המאפשרת אבטופוס של תוכנת cc3 על PC. זה דומה מאוד לסימולטור 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. לדוגמה כדי לנקות את 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