طبقة تجريد العتاد لـ Virtual-Cam#

‏virtual-cam hal هو طبقة تجريد عتاد بديلة لـ lpc2106-cmucam3 hal تتيح نمذجة برمجيات cc3 على حاسوب. هذا مشابه جدًا لمحاكي CMUcam3. سيحمّل virtual-cam hal إطارات مخزّنة في دليل بالطريقة نفسها التي تحمّل بها CMUcam3 عادةً الإطارات من الكاميرا. تُنفَّذ بعد ذلك كل دوال cc3 العادية على fifo افتراضي. سيُعرض نص تصحيح أخطاء إضافي وقت التشغيل لا يظهر عادةً عند استخدام lpc2106-cmucam3 hal. يُعلم هذا المستخدم بحالات 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