יצירת מסך אתחול של מכשיר רפואי עבור QNX

פרסומת
תכנון תשתיות רפואיות


פרסומת
לרוב אם לא כל המכשירים הגדולים (כולל מכשירים רפואיים) ברחבי העולם יש צורה כלשהי של מסך אתחול. האנימציה הנוצצת אך לעתים הפשוטה הזו מבצעת שתי מטרות. האחת היא פשוט שזה נראה טוב, בנוסף חברות יכולות להתאים אישית ולהוסיף לו את המיתוג שלהן. אבל הסיבה השנייה חשובה יותר ללא ספק; זה מאפשר למשתמש לדעת שהמכשיר פועל וכרגע עדיין בשלב ההפעלה.
הבלוג הזה יהיה טכני מאוד מכיוון שהוא מתאר כיצד לעצב וליצור מסך אתחול.

במיוחד, הבלוג חולק טיפים להתמודדות עם המלכודות והסיבוכים הנלווים לעיצוב מסך אתחול עבור מערכת ההפעלה תואמת POSIX (OS), QNX. QNX היא מערכת הפעלה מיקרו-גרעינית המיועדת להפעלה על מערכות משובצות וליתר דיוק, חומרה קריטית לבטיחות. כדי לסייע בפרטים הטכניים, הפניות לתיעוד QNX כלולים לכל אורכו להבהרה נוספת.

הגדרת QNX את קובץ בניית מערכת ההפעלה

הצעד הראשון לעיצוב מסך אתחול הוא להגדיר את QNX כדי להבטיח שמסך האתחול יוצג בזמן המוקדם ביותר ברצף האתחול. כדי להשתמש ב-QNX, מפתח יצטרך להגדיר קובץ בניית מערכת הפעלה זה בעצם יתאר אילו מנהלי התקנים, יישומים וקבצים זרים אחרים צריכים להיכלל בתמונת מערכת ההפעלה. תמונת מערכת ההפעלה הזו תוצג למערכת היעד ותשלוט אילו יישומים ומנהלי התקנים יופעלו בעת האתחול. ל-QNX יש מערכת גרפית הידועה בשם תת מערכת מסך. זה ישמש לעיבוד התמונה על צג ספציפי המחובר לחומרה. זה צריך להתחיל בהקדם האפשרי במהלך רצף האתחול. רצף האתחול מוגדר בקובץ ה-build כתג סקריפט שייראה כך:

[+script] .script={}

עם כל קווים מוגדרים בתוך הפלטה שמתנהגים כמו כתב מעטפת. כאן יש להפעיל את תת-מערכת המסך.

הפקודה להפעלת תת-מערכת המסך תיראה כך:

מסך -c {path_to_config_file}.

ניתן למצוא מידע נוסף כאן. לאחר שתת-מערכת המסך הופעלה, ניתן להפעיל את המסך הבינארי של מסך האתחול.

עבודה עם מערכת המסך

השלב הבא הוא לפתח את מסך האתחול עצמו. ל-QNX אין דרך מקורית להציג תמונה או אנימציה כחלק מרצף האתחול. זה יצטרך להיות מפותח על בסיס של מכשיר. מכיוון שה-Screen API כתוב ב-C, מסך האתחול צריך להיכתב גם ב-C. בנוסף, שימוש ב-C יבטיח שניתן יהיה להפעיל את מסך האתחול הרבה יותר מהר ובכך להפחית את הזמן להודיע ​​למשתמש על פעולת המכשיר. מסך האתחול צריך להגדיר קוד לוח כדי לתקשר עם מסך API. ניתן למצוא פרטים ספציפיים כאן אבל כדי לרשום אותם, מסך האתחול יצטרך ליצור אובייקט הקשר, אובייקט מטרת רינדור (במקרה זה, יעד העיבוד הדרוש הוא יעד חלון), ולבסוף אובייקט מאגר מסך. מבחינה טכנית, מכיוון ש-C אינו מונחה עצמים, המושג אובייקטים אינו קיים בשפה. אבל כדי להקל על ההסבר, המונח אובייקטים ישמש לתיאור סוגי המבנים שבהם נעשה שימוש.

להלן הבהרות והנחיות לגבי כמה פרמטרים ספציפיים עבור האובייקטים שזה עתה הוגדרו. בעת יצירת אובייקט ההקשר של המסך עבור מסך האתחול, סוג SCREEN_APPLICATION_CONTEXT אינו מספיק. במקום זאת, מסך האתחול זקוק ל-SCREEN_WINDOW_MANAGER_CONTEXT. הסיבה תוסבר במלואה מאוחר יותר, אבל זה בעצם קשור לדעת מתי מסך האתחול צריך להסתיים. מידע נוסף הוא כאן.

לאחר מכן, כאשר מגדירים את מאפיין השימוש של מטרת ה-render, במקרה זה החלון, זה לפחות צריך להיות מוגדר ל-SCREEN_USAGE_WRITE שכן מסך האתחול מתכוון לכתוב למאגר ה-render אך לא בהכרח צריך לקרוא ממנו. ברירת המחדל היא שילוב של דגלי הכתיבה והקריאה. מידע נוסף הוא כאן.

לבסוף, ניתן להגדיר את המספר האידיאלי של מאגרים לשימוש על ידי יעד העיבוד לאחד או שניים בהתאם לסוג מסך האתחול בו נעשה שימוש. אם למכשיר יהיה מסך אתחול סטטי, שיהווה תמונה אחת, אז מאגר אחד הוא כל מה שצריך. עם זאת, אם היא תציג אנימציה, מומלץ שתיים. שימוש בשניים בשילוב עם יעד רינדור של חלון יאפשר למסך האתחול להיות מאוחסן כפול. במילים אחרות, בעוד פריים אחד של האנימציה נטען למאגר אחד, תת-מערכת המסך יכולה להציג את המאגר השני. לאחר מכן, כאשר הסתיימה טעינת המאגר, תת-מערכת המסך תחליף את המאגר הפעיל לחדש.

עבודה עם ספריית התמונות

כעת, יש להשתמש בספריית QNX שנייה כדי לנתח ולטעון פריימים ספציפיים של תמונת מסך האתחול או האנימציה. תת המערכת מסך לא מטפלת בזה. במקום זאת, ה ספריית תמונות משמש. בהתאם לסוג קובץ התמונה שישמש עבור מסך האתחול, יהיה צורך בקבצי codec שונים של Shared Object (.so). אלה ייכללו בקובץ בניית תמונת מערכת ההפעלה ורשימה של אלה הזמינים היא כאן. יש צורך לבצע רצף של שלבים על מנת להציג מסגרת של אנימציה למסך מצורף.

שלבים אלה מוגדרים כאן עם כמה אזהרות. אזהרה חשובה אחת היא האפשרות שבהתאם לחומרה שבה נעשה שימוש, כל סט הפריימים של אנימציה לא יתאים לזיכרון. אם זה המקרה, יהיה צורך לטעון את המסגרות תוך כדי עיבוד ולעיבוד תוך כדי טעינתן. האזהרה השנייה היא שהן img_load_file() והן img_load() (שניהם מוזכרים בקישור למעלה) יטענו רק את המסגרת הראשונה. עבור תמונת סטילס, זה מספיק, אבל לא עבור אנימציה. שימוש בפונקציות אלו בלולאה לקריאה בכל מסגרת לא יעבוד גם כי אין דרך לציין את מספר המסגרת לשליפה. זה תמיד יחזיר את הפריים הראשון.

במקום זאת, כדי להתייחס לשני האזהרות, הקוד יטען ויפענח את המסגרת, ולאחר מכן בהתקשרות הפענוח תכתוב את מסגרת האנימציה לתוך מאגר המשנה של מסך מסך. הפונקציה img_decode_frame() מאפשרת להגדיר קריאות חוזרות והיא נמצאת ספציפית ב-frame_f() callback (ראה כאן) שיש לשים את הקוד לטעינת התמונה למאגר.

השלבים לטעינת הנתונים הם כדלקמן: חלץ את יעד העיבוד (מסך במקרה זה) אשר מועבר כפרמטר הנתונים (זה יצטרך להיות סוג cast מ-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 שעוזר ללקוחות לפתח תוכנת מכשור רפואי מאובטחת, יעילה ואפקטיבית. יש לו תשוקה לעשות שינוי בחייהם של אנשים באמצעות התוכנה שהוא מפתח. דנדי נהנה לעבוד על כל ההיבטים של מכשירים רפואיים, החל מקושחה ועד ממשק משתמש.





קישור לכתבת המקור – 2024-04-06 00:55:58

Facebook
Twitter
LinkedIn
Telegram
WhatsApp
Email
פרסומת
תכנון תשתיות רפואיות

עוד מתחומי האתר