شعار زيفيرنت

إنشاء شاشة تشغيل الأجهزة الطبية لـ QNX

التاريخ:

شاشة تمهيد الأجهزة الطبية QNX

تحتوي معظم الأجهزة الرئيسية (بما في ذلك الأجهزة الطبية) في جميع أنحاء العالم، إن لم يكن جميعها، على شكل من أشكال شاشة التمهيد. غالبًا ما تؤدي هذه الرسوم المتحركة المبهرجة ولكن أحيانًا البسيطة غرضين. الأول هو ببساطة أنه يبدو جيدًا، بالإضافة إلى أنه يمكن للشركات تخصيصه وإضافة علامتها التجارية إليه. ولكن يمكن القول أن السبب الثاني هو الأكثر أهمية؛ فهو يتيح للمستخدم معرفة أن الجهاز يعمل وأنه لا يزال حاليًا في مرحلة البدء.
ستصبح هذه المدونة تقنية للغاية لأنها تصف كيفية تصميم وإنشاء شاشة تمهيد.

على وجه الخصوص، تشارك المدونة نصائح لمعالجة المخاطر والتعقيدات التي تأتي مع تصميم شاشة تمهيد لنظام التشغيل (OS) المتوافق مع POSIX، QNX. QNX هو نظام تشغيل ذو نواة صغيرة مصمم ليتم تشغيله على الأنظمة المدمجة وبشكل أكثر تحديدًا، على الأجهزة المهمة للسلامة. للمساعدة في التفاصيل الفنية، تم تضمين المراجع إلى وثائق QNX طوال الوقت لمزيد من التوضيح.

تحديد QNX ملف بناء نظام التشغيل

الخطوة الأولى لتصميم شاشة التمهيد هي إعداد QNX لضمان عرض شاشة التمهيد في أقرب وقت ممكن في تسلسل التمهيد. لاستخدام QNX، سيحتاج المطور إلى تحديد ملف بناء نظام التشغيل سيصف ذلك بشكل أساسي برامج التشغيل والتطبيقات والملفات الخارجية الأخرى التي يجب تضمينها في صورة نظام التشغيل. سيتم بعد ذلك وميض صورة نظام التشغيل هذه إلى النظام المستهدف والتحكم في التطبيقات وبرامج التشغيل التي يتم تشغيلها عند التمهيد. لدى QNX نظام رسومات معروف باسم النظام الفرعي للشاشة. سيتم استخدامه لعرض الصورة على شاشة معينة متصلة بالجهاز. يجب أن يبدأ هذا في أقرب وقت ممكن أثناء تسلسل التمهيد. يتم تعريف تسلسل التمهيد في ملف البناء كعلامة برنامج نصي والتي ستبدو كما يلي:

[+نص] .script={}

مع أي خطوط محددة داخل الأقواس تعمل مثل برنامج شل. هذا هو المكان الذي يجب أن يبدأ فيه النظام الفرعي للشاشة.

سيبدو الأمر لبدء النظام الفرعي للشاشة كما يلي:

الشاشة -ج {path_to_config_file}.

يمكن العثور على مزيد من المعلومات هنا. بمجرد بدء تشغيل النظام الفرعي للشاشة، يمكن بعد ذلك بدء تشغيل ثنائي شاشة التمهيد.

العمل مع نظام الشاشة

والخطوة التالية هي تطوير شاشة التمهيد نفسها. ليس لدى QNX طريقة أصلية لعرض صورة أو رسم متحرك كجزء من تسلسل التمهيد. سيتعين تطوير هذا على أساس كل جهاز. نظرًا لأن Screen API مكتوبة بلغة C، فيجب كتابة شاشة التمهيد بلغة C أيضًا. بالإضافة إلى ذلك، فإن استخدام لغة C سيضمن إمكانية بدء تشغيل شاشة التمهيد بشكل أسرع بكثير، وبالتالي تقليل الوقت اللازم لإعلام المستخدم بتشغيل الجهاز. تحتاج شاشة التمهيد إلى إعداد بعض التعليمات البرمجية المعيارية للتواصل مع Screen API. يمكن العثور على تفاصيل هنا ولكن لإدراجها، ستحتاج شاشة التمهيد إلى إنشاء كائن سياق، وكائن هدف عرض (في هذه الحالة، هدف العرض المطلوب هو هدف نافذة)، وأخيرًا كائن مخزن مؤقت للشاشة. من الناحية الفنية، بما أن لغة C ليست كائنية التوجه، فإن مفهوم الكائنات غير موجود في اللغة. ولكن لسهولة الشرح، سيتم استخدام مصطلح الكائنات لوصف أنواع البنيات المستخدمة.

فيما يلي توضيحات ومؤشرات بخصوص بعض المعلمات المحددة للكائنات التي تم تعريفها للتو. عند إنشاء كائن سياق الشاشة لشاشة التمهيد، يكون نوع SCREEN_APPLICATION_CONTEXT غير كافٍ. وبدلاً من ذلك، تحتاج شاشة التمهيد إلى SCREEN_WINDOW_MANAGER_CONTEXT. سيتم شرح السبب بالكامل لاحقًا، ولكنه يتعلق بشكل أساسي بمعرفة متى يجب إنهاء شاشة التمهيد. مزيد من المعلومات هي هنا.

بعد ذلك، عند تحديد خاصية الاستخدام لهدف العرض، في هذه الحالة النافذة، يجب على الأقل تعيينها على SCREEN_USAGE_WRITE حيث تنوي شاشة التمهيد الكتابة إلى المخزن المؤقت للعرض ولكنها لا تحتاج بالضرورة إلى القراءة منه. الافتراضي هو مزيج من علامات الكتابة والقراءة. مزيد من المعلومات هي هنا.

أخيرًا، يمكن تعيين العدد المثالي من المخازن المؤقتة التي سيتم استخدامها بواسطة هدف العرض إلى واحد أو اثنين اعتمادًا على نوع شاشة التمهيد المستخدمة. إذا كان الجهاز سيحتوي على شاشة تمهيد ثابتة، والتي ستشكل صورة واحدة، فكل ما هو مطلوب هو مخزن مؤقت واحد. ومع ذلك، إذا كان سيتم عرض رسم متحرك، فمن المستحسن استخدام اثنين. سيؤدي استخدام اثنين مع هدف عرض النافذة إلى السماح بتخزين شاشة التمهيد بشكل مزدوج. بمعنى آخر، أثناء تحميل إطار واحد من الرسوم المتحركة في مخزن مؤقت واحد، يمكن للنظام الفرعي للشاشة أن يعرض المخزن المؤقت الآخر. ثم عند الانتهاء من تحميل المخزن المؤقت، سيقوم نظام الشاشة الفرعي بتبديل المخزن المؤقت النشط بالمخزن المؤقت الجديد.

العمل مع مكتبة الصور

الآن، يلزم استخدام مكتبة QNX ثانية لتحليل وتحميل إطارات محددة لصورة شاشة التمهيد أو الرسوم المتحركة. لا يتعامل النظام الفرعي للشاشة مع هذا. بدلا من ذلك، مكتبة الصور يستخدم. اعتمادًا على نوع ملف الصورة الذي سيتم استخدامه لشاشة التمهيد، ستكون هناك حاجة إلى ملفات كائنات مشتركة (.so) مختلفة لبرنامج الترميز. سيتم تضمينها في ملف إنشاء صورة نظام التشغيل وقائمة بالملفات المتاحة هنا. يجب تنفيذ سلسلة من الخطوات لعرض إطار الرسوم المتحركة على الشاشة المرفقة.

يتم تعريف هذه الخطوات هنا مع بعض التحذيرات. أحد التحذيرات المهمة هو احتمال أنه اعتمادًا على الأجهزة المستخدمة، فإن مجموعة إطارات الرسوم المتحركة بأكملها لن تتناسب مع الذاكرة. في هذه الحالة، يجب تحميل الإطارات بسرعة وعرضها أثناء تحميلها. التحذير الثاني هو أن كلا من img_load_file() و img_load() (كلاهما مشار إليهما في الرابط أعلاه) سيحملان الإطار الأول فقط. بالنسبة للصورة الثابتة، هذا يكفي، ولكن ليس للرسوم المتحركة. إن استخدام هذه الوظائف في حلقة للقراءة في كل إطار لن ينجح أيضًا لأنه لا توجد طريقة لتحديد رقم الإطار الذي سيتم استرداده. سيعود دائمًا الإطار الأول.

بدلاً من ذلك، لمعالجة كلا التحذيرين، سيقوم الكود بتحميل الإطار وفك تشفيره، ثم في رد اتصال فك التشفير، يكتب إطار الرسوم المتحركة في المخزن المؤقت للنظام الفرعي للشاشة. تسمح الدالة img_decode_frame()‎ بتحديد عمليات الاسترجاعات وهي موجودة على وجه التحديد في رد الاتصالframe_f() (انظر هنا) أنه يجب وضع الكود الخاص بتحميل الصورة في المخزن المؤقت.

خطوات تحميل البيانات هي كما يلي: قم باستخراج هدف العرض (الشاشة في هذه الحالة) الذي تم تمريره كمعلمة بيانات (سيحتاج هذا إلى كتابة نوع من uintptr_t إلى screen_window_t). ثم SCREEN_PROPERTY_POINTER وSCREEN_PROPERTY_STRIDE للمخزن المؤقت (انظر هنا) يجب ضبطه على بيانات الصورة والخطوة على التوالي (المعلمة img_t الخاصة برد الاتصال). الخطوة الأخيرة هي استخدام screen_post_window() (نظرًا لأن هدف العرض هو نافذة) لعرض الصورة المحملة حديثًا على الشاشة.

العمل مع نظام الأحداث QNX

أخيرًا، نظرًا لأن شاشة التمهيد هي في الأساس حلقة لا نهائية قد تعرض رسمًا متحركًا مرارًا وتكرارًا، تحتاج شاشة التمهيد إلى معرفة متى تنتهي. هذا هو المكان الذي يصبح فيه تعيين نوع السياق على SCREEN_WINDOW_MANAGER_CONTEXT مهمًا. QNX لديه نظام الحدث حيث يتم إنشاء الأحداث في حالة إنشاء نوافذ جديدة أو تدميرها أو التركيز عليها وما إلى ذلك. توجد قائمة كاملة بالأحداث هنا. يتيح استخدام SCREEN_WINDOW_MANAGER_CONTEXT لشاشة التمهيد الاستماع إلى إنشاء النافذة وأحداث تركيز النافذة التي يتم إنشاؤها بواسطة تطبيقات أخرى.

حدثان مهمان لشاشة التمهيد هما SCREEN_EVENT_CREATE وSCREEN_EVENT_PROPERTY. يتم استخدام الحدث SCREEN_EVENT_CREATE للاستماع إلى الوقت الذي يقوم فيه التطبيق الرئيسي (الذي سيظهر واجهة المستخدم الرئيسية للجهاز) بإنشاء النافذة، وبالتالي متى يجب أن تبدأ شاشة التمهيد في تسلسل إيقاف التشغيل. يمكن الاستعلام عن المزيد من الخصائص حول هذا الحدث عن طريق استخدام مجموعة الوظائف screen_get_event_property_X() . يتم استخدام X للإشارة إلى نوع الخاصية التي تم الاستعلام عنها. إذا قام التطبيق الرئيسي بتعريف SCREEN_PROPERTY_GROUP، فيمكن الاستعلام عنه لمعرفة ما إذا كان التطبيق المحدد قد أطلق الحدث.

يمكن استخدام الحدث SCREEN_EVENT_PROPERTY بالتزامن مع خاصية SCREEN_PROPERTY_FOCUS التي يتم تعيينها عندما يتم التركيز على نافذة مختلفة (اقرأ المزيد من المعلومات هنا). إن استخدام نظام الأحداث بدلاً من استخدام رسم متحرك يبلغ طوله X ثانية (حيث X هو طول عملية تمهيد الجهاز) يعني أنه يمكن تكرار الرسم المتحرك إذا لم يتم بدء تشغيل التطبيق الرئيسي بعد. وهذا يسمح بإمكانية نقل أفضل بكثير بين الأجهزة المختلفة نظرًا لأن التوقيتات ستكون مختلفة على الأرجح.

فيما يتعلق بموضوع التوقيت، نظرًا لأنه لا يمكن الاستماع إلى الأحداث بشكل مستمر (إذا كان الأمر كذلك فسيؤدي ذلك إلى قفل الموضوع الرئيسي مما يتسبب في عدم إظهار الرسوم المتحركة للإطارات اللاحقة)، يجب استخدام تكتيك مختلف. إذا كانت شاشة التمهيد عبارة عن إطار ثابت، فلن تكون هذه مشكلة. ومع ذلك، اعتمادًا على طول الرسوم المتحركة، قد يلزم الاستماع إلى هذه الأحداث لكل ربع مجموعة من الإطارات تقريبًا. أي أنه في كل مرة يتم تحميل ربع إطارات الرسوم المتحركة، قبل بدء تحميل الربع التالي، تحقق من وجود أي أحداث محتملة.

وفي الختام

في الختام، تشرح هذه المدونة سبب أهمية شاشات التمهيد، وتوفر تفاصيل حول كيفية إعداد شاشة تشغيل الأجهزة الطبية لـ QNX، وتقدم تحذيرات واقتراحات تصميمية قد تكون مفيدة. ومع ذلك، فإن شاشة التمهيد لكل جهاز لها متطلبات مختلفة. ونتيجة لذلك، تقدم هذه المدونة اقتراحات بدلاً من عملية خطوة بخطوة. ومع ذلك، يجب أن تمكن هذه الاقتراحات والتفاصيل المطورين من إعداد شاشة تمهيد QNX للأجهزة الطبية التي تلبي احتياجاتهم الخاصة.

ديندي أديسون هو مهندس البرمجيات في Starfish Medical الذي يساعد العملاء على تطوير برامج الأجهزة الطبية الآمنة والفعالة والفعالة. لديه شغف لإحداث فرق في حياة الناس من خلال البرامج التي يطورها. يستمتع Dendy بالعمل على جميع جوانب الأجهزة الطبية بدءًا من البرامج الثابتة وحتى واجهة المستخدم.

 

شارك هذا…

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة