שכבת הפשטת חומרה של 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