הנה דוגמא, הייכן שחלק מהמוצרים הקניינים עושים דברים טוב יותר מאשר אצלנו בקוד הפתוח, ועדיין אני מספר את הסיפור על הדרך, למרות שאין לי פיתרון אני מציין פה את כל התהליך שעברתי עם זה. למרות הבעיות שאני נתקל בהם אני אוהב את הגישות שלנו בקוד הפתוח ובדרך לפתרון שאולי לא יגיע ואולי כן!
ההודעה:
גם אני קיבלתי את הסמס המגניב שהמכשיר שלי, ה Purism Librem5 שאני מכנה החמישיה החופשית, לא תומך ב VoLTE ואני לא אוכל לקבל ולהוציא שיחות לאחר סוף השנה, חשדתי שאולי מדובר בתקלה במערכת הבדיקה של ספק הטלפוניה שלי , וניגשתי לספק הסלולארי שלי וביצעתי בדיקה מהאתר שלהם, הפעם קיבלתי הודעה שהמכשיר עצמו תומך אבל ה VoLTE לא מופעל. ביצעתי גם ניסיון בדיקה עם הגבלת הגישה רק לגלישת 4G וניסיון ביצוע שליחה, ובאמת השיחות נכשלו, מה שמצביע על בעייה בהוצאות שיחות רק תחת ה VoLTE.
קצת רקע:
החל מהראשון לינואר, רשתות ה 3G וה 2G ינותקו בישראל, ורק שימוש ברשתות 4G ו 5G יאפשר שימוש ברשתות הסלולאריות, במצב תקין שיחות הקול ב 4G ו LTE משתמש ב VoLTE ,כיום כאשרהמכשיר לא מצליח להשתמש ב VoLTE בעת חיבור לרשת 4G המכשיר ייבצע fallback ומשתמש ברשת ה 3G בשביל לבצע את השיחה, מה קורה אם אין VoLTE ואין 3G ? אין ייכולת להוציא או לקבל שיחות. ה VoLTE עצמו אינו נדרש לשימוש בדאטא או סמס, כי יש סמס ע"ג דאטא אבל גם זה יכול להיות רק אם אתם מצליחים לבצע הרשמה לשירות ה IMS אצל ספק הסלולאר שלכם, עכשיו ברגע שמנתקים את ה3G כבר לא יהיה ירידה ל רשת ה3G מה שיימנע ביצוע שיחות.
חשוב להבין שיש הבדל בין העובדה שהמכשיר תומך ב VoLTE , שה VoLTE מופעל במכשיר, שה VoLTE קיים אצל הספק, ושהמכשיר שלכם יוכל להשתמש ב VoLTE אצל הספק שלכם, ושהמכשיר שלכם באמצעות הסים שלכם יצליח לבצע רישום ל ims ויצליח להוציא שיחות VoLTE אצל הספק שלכם. שמתם לב כמה שלבי תקלות יכולים להיות ? אז זה מהות הפוסט הזה, לנסות לגלות הייכן הבעיה קיימת.
במידה והספק איננו משתמש בהגדרות ברירת המחדל בVoLTE יכול להיות מצב שלמרות שה VoLTE נתמך ומופעל במכשיר שלכם, לא תוכלו להשתמש בו.
בעבר מכשירי הpurism librem5
יצאו מהמפעל עם VoLTE מכובים כברירת מחדל, והיה צורך להפעיל את ה VoLTE ולהגדיר את ה APN המתאים במכשיר, לפי התיאור של פוריסם על מנת לתמוך ב VoLTE אצל חלק מהספקים נדרשת עבודה של purism ביחד עם ספקי התקשורת עצמה על מנת לקבל יכולת חיבור, מהידוע לי זה נדרש כאשר הספק איננו משתמש בפרופיל ברירת המחדל ל VoLTE והדבר דורש התערבות ברת הfirmware במודם עצמו.
התחלת הדיבגינג:
המכשיר שברשותי הוא החמישיה החופשית, באתר התיעוד של פוריסם (החברה המייצרת) נאמר כי המודם הוא bm818 והתוכנה שאחראית על אחזקת המודם נקראת bm818-tools, אותה ניתן להוריד משרת ה gitlab של חברת פוריסם,
הלכתי להשתמש ברכיב התוכנה הזה, שלפתי את ההודעות ה AT מתוך הקוד שקיים ב bm818-tools ושלחתי אותן באמצעות socat למודם שלי בשביק לבדוק האם המודם מפעיל את רכיב ה LTE ולפי התשובה המודם כן תומך, כי קיים המלל BMRAT בתגובה.
אבל מכיוון שספק הטלפוניה שלי התריע כי ה VoLTE לא מופעל ,חשבתי שאולי אני עושה משהוא לא נכון, והפעלתי את התסריט bm818-volte-check וקיבלתי גם ממנו כי ה VoLTE מופעל.
sudo ./bm818-volte-check
chat: Jul 09 10:05:55 +BMRAT: FDD LTE
BMRAT state active FDD LTE
הבדיקה היידנית שלי נראתה כך:
echo "AT+BMRAT" | sudo socat - /dev/ttyUSB2,crnl
AT+BMRAT
+BMRAT: FDD LTE
OK
הפקודה socat מאפשרת לנו לשלוח הודעות למודם בצורה נוחה למדי, יש כאלה שמעדיפים את minicom אבל אני אישית מעדיף את socat.
אמרתי אולי יש משהוא בGUI אז אולי אני אנסה משהוא משם, מכיוון שbm818-tools לא קיים במוביין-טריקיסי, הורדתי את קוד המקור ובניתי את חבילת ה deb והתקנתי אותו,
הייתי צריך לשנות את החבילה של bm818-tools כי policykit-1 לא קיימת יותר בדביאן טריקסי, את הבנייה עשיתי אחרי מחיקת הדרישה לpolicykit-1 בקובץ הdebian/control, לאחר ההתקנה והפעלה מחדש של המכשיר הפעלתי אותו בצורה ויזואלית , אבל משום מה הממשק הגרפי לא עלה (ומצאתי אפילו באג מדווח על זה)/
גם הפעלה בצורה מרוחקת זרקה הודעות שגיאה:
(bm818-tool:2881): Gtk-CRITICAL **: 01:25:32.591: _gtk_css_lookup_resolve: assertion '(((__extension__ ({ GTypeInstance *__inst = (GTypeInstance*) ((provider)); GType __t = ((_gtk_style_provider_private_get_type
())); gboolean __r; if (!__inst) __r = (0); else if (__inst->g_class && __inst->g_class->g_type == __t) __r = (!(0)); else __r = g_type_check_instance_is_a (__inst, __t); __r; }))))' failed
/home/mobian/src/bm818-tools/usr/bin/./bm818-tool:159: Warning: g_object_set_data_full: assertion 'G_IS_OBJECT (object)' failed
builder.add_from_file("../../data/bm818-tool.glade")
(bm818-tool:2881): Gtk-ERROR **: 01:25:32.592: Can't create a GtkStyleContext without a display connection
Trace/breakpoint trap
ככל הנראה אין לי ברירה אלא לסמוך שהתסריט שהפעלתי ופקודות ה socat שלי לאימות היו נכונות. שימו לב שהתסריטים של bm818 משתמשים בפקודה chat מתוך חבילת ppp ואינם נגישים למשתמש הרגיל, ולכן צריך או לשנות, או לתת הרשאה מפורשת אני פשוט השתמשתי ב sudo וזהוא.
מבחינת הקוד של bm818-tools אין הבדל בין התחברות ל LTE לחיבור ל VoLTE , בדיקת התמיכה ב VoLTE בקוד אצלהם מתייחסת רק להודעה הזאת. מהבנתי זה הוא תנאי סף לעבודה עם VoLTE זה לא אומר שהזיהוי יעבוד מול הספק או שיציליח להתחבר.
בנקודה הזאת אנחנו יודעים שתאורתית המודם כן תומך ב VoLTE והאפשרות להתחבר ל VoLTE מופעלת, למה אני אומר תאורתית למרות שיש מקומות בהם זה כן עובד ? כי זה לא אומת במקרה שלי, אבל אנחנו עוד לא הגענו לנקודה בה אנחנו באמת מתחברים ל ims. המודם יצטרך לבצע רישום ל ims לעדת לבחור פרופיל MBN נכון, ולעבוד מול ספק הטלפוניה.
הפתרון שמוצא בבעיה
162 של פוריסם מציע לבצע שני פקודות AT על מנת לבצע רישום ל ims, האמת חששתי מהן אבל הרצתי אותן, אבל למרות זאת שיחות רק תחת 4G לא הצליחו לעבור.
לפי
מה שאני זוכר, ספק הטלפוניה מכריז על פרופיל מסוים, ובמידה ויש אי התאמה
בין הפרופיל ויכולות המודם אז VoLTE לא יעבד כלל, וזה מדוע למה באנדרויד
למשל על אותו המכשיר לא יופיע תמיכה ב VoLTE אצל ספק אחד אבל כן יופיע עם
ספק אחר על אותו המכשיר באותו המקום.
הפעלתי את מנהל המודם (modem manager) במצד דיבאג , וניסתי להוציא שיחה, במצב כזה פעם אחת ראיתי הודעה הקשורה ל VoLTE שנראתיה כך:
<<<<<< QMUX:
<<<<<< length = 85
<<<<<< flags = 0x80
<<<<<< service = "pdc"
<<<<<< client = 2
<<<<<< QMI:
<<<<<< flags = "indication"
<<<<<< transaction = 2
<<<<<< tlv_length = 73
<<<<<< message = "Get Config Info" (0x28)
<<<<<< TLV:
<<<<<< type = "Indication Result" (0x01)
<<<<<< length = 2
<<<<<< value = 00:00
<<<<<< translated = 0
<<<<<< TLV:
<<<<<< type = "Token" (0x10)
<<<<<< length = 4
<<<<<< value = 01:00:00:00
<<<<<< translated = 1
<<<<<< TLV:
<<<<<< type = "Total Size" (0x11)
<<<<<< length = 4
<<<<<< value = 98:7C:00:00
<<<<<< translated = 31896
<<<<<< TLV:
<<<<<< type = "Description" (0x12)
<<<<<< length = 30
<<<<<< value = 1D:56:6F:6C:74:65:5F:4F:70:65:6E:4D:6B:74:2D:43:6F:6D:6D:65:72:63:69:61:6C:2D:43:4D:43:43
<<<<<< translated = Volte_OpenMkt-Commercial-CMCC
<<<<<< TLV:
<<<<<< type = "Version" (0x13)
<<<<<< length = 4
<<<<<< value = 72:20:01:05
<<<<<< translated = 83959922
<<<<<< TLV:
<<<<<< type = 0x14
<<<<<< length = 4
<<<<<< value = 00:00:00:00
<<<<<< TLV:
<<<<<< type = 0x16
<<<<<< length = 4
<<<<<< value = 72:20:01:05
dbg> [1752158379.322409] [/dev/cdc-wdm0] received message...
<<<<<< RAW:
<<<<<< length = 20
<<<<<< data = 01:13:00:80:24:02:02:02:00:28:00:07:00:02:04:00:00:00:00:00
dbg> [1752158379.322740] [/dev/cdc-wdm0] received generic response (translated)...
<<<<<< QMUX:
<<<<<< length = 19
<<<<<< flags = 0x80
<<<<<< service = "pdc"
<<<<<< client = 2
<<<<<< QMI:
<<<<<< flags = "response"
<<<<<< transaction = 2
<<<<<< tlv_length = 7
<<<<<< message = "Get Config Info" (0x28)
<<<<<< TLV:
<<<<<< type = "Result" (0x02)
<<<<<< length = 4
<<<<<< value = 00:00:00:00
<<<<<< translated = SUCCESS
אני רואה פה הודעה הקשורה למה שאני מניח שהוא פרופיל MBN שהמודם צריך לבחור, אבל בשונה מהמצב בpinephone אין רשימת פקודות AT מפורסמת ופתרון איך לבחור בצורה ידינית את הפרופיל המתאים. ניסיתי את הפקודה AT+QMBNCFG אבל היא מוכרת למודם בשביל לבצע בחירת פרופיל , ב pinephone היתי פשוט הולך לפי רשימת הפקודות שהם תיארו בדף המוצר https://pine64.org/documentation/PinePhone/_full, אבל הפרופיל בשם: Volte_OpenMkt-Commercial-CMCC אבל כן נמצא ברשימה
בהודעה בפורום של quectel מה שאומר שככל הנראה מודם עם גרסת קושחא עדכנית של המודם ב pinephone pro יכול להיות שיעבוד כמו שצריך. המודם של bm818 אינו מכיל גרסת קושחא פתוחה כמו המודם של quectell שמותקן בpinephone לכן אנחנו נתונים לחסדיהם של purism ו הייצרן של bm818.
בדקתי וקבלת סמס ע"ג 4G בלבד עבדה, כך גם MMS ו דאטא טהור.
אמרתי אולי הבעייה היא שאני משתמש בספק שהוא MNVO, אז הלכתי ורכשתי סים של MVNE , החברה ממנה הספק שאני מנויי אצלו רוכש את שירותים, גם שימוש בסים של הספק של ספק ה MVNE לא נתן אפשרות לשיחות ברשת 4G בלבד
סיום:
לסיום כרגע לא ניתן להשתמש במכשיר librm5 של פוריסם עם bm818 בשביל לבצע שיחות ולקבל שיחות ברשת ה 4G בלבד באזור שלי. אני מאמין שזה משהוא בין המודם כלפי ספק הטלפוניה, כלומר זה לא רק שפוריסם צריכים לעבוד ביחד עם ספק הטלפוניה זה ספק המודם עצמו צריך לשחרר גרסת קושחא המתאימה ויודעת לעבד עם הפרופילים הנמצאים בארץ.
צריך לבדוק את המצב במכשירים אחרים כמו ה pinephone (אורן) וה pinephone pro (אורן מתקדם) ו FLX1.
נקודות לעתיד
בשיחה עם אנשים שאני מכיר שמשתמשים באיטליה וארה"ב הבהירו לי שהמצב שלהם עם החמישיה החופשית יותר טוב והם כן מצליחים לעשות שיחות במצב של 4G בלבד, אצל אחד הספקים בארה"ב נאמר לי שלמרות שרשמית ה VoLTE לא נבחר ניתן להשתמש במכשיר במישור הדאטא והסמס (כלומר המכשיר מצליח לעבור את ההרשמה).
לפי הדיון המצורף מטה , יכול להיות שBM818 אושר לשימוש של חלק מהרשתות אבל לא של כולם עבור VoLTE בעולם. מצאתי
דיון ישן בנושא ה VoLTE באתר של פוריסם המתאר את מצב השמישות של VoLTE של מכשיר ה librem5 במקומות שונים בעולם, המדינה שלנו לא נמצאת ברשימה שם כלל.
על מנת לבדוק במכשיר שלכם בישראל ניתן להתקשר ל *235 בשביל לבדוק את מצב החיבור והאם מבחינת המכשיר זה נתמך.
מכיוון שבמקרה שלי אין צורך להשתמש ב APN אחר מהAPN שלי , לא הייתי צריך להתאים את הAPN לשימוש ב VoLTE.
לא עשיתי בדיקת רישום ב IMS עדיין, כי אני לא יודע איך עושים את זה במכשיר הזה. עכשיו הרישום לIMS הוא אחד הדברים החשובים ביותר, אבל מכיוון שאני אינני יודע איך עושים זאת לא עשיתי זאת עדיין.
אני כן ניסיתי להשתמש בפקדוה המגדירה APN בשם ims, אבל זה לא סייעה והשיחות נכשלו כאשר היה חיבור רק ב4G.
נקודות מעניינות חשובות לעתיד:
הפקודות AT+QMBNCFG לא נתמכת ע"י המודם (מקבלים שגיאה ERROR), ואין צורך להפעיל את AT+CGATT? כי אנחנו כבר יודעים כי יש לנו attach לרשת הדאטא.
לטוב ולרע ה mmcli מראה חיבור ל EPS :
-----------------------------------
3GPP EPS | ue mode of operation: csps-1
| initial bearer path: /org/freedesktop/ModemManager1/Bearer/2
| initial bearer ip type: ipv4v6
ההודעה הבאה מראה שיש לי פירמוור שלדעתי הוא ישן יחסית, עברו מעל שלוש שנים מאז תאריך ההוצאה, ראיתי שהפרופיל שספק הטלפוניה שלי הוציא גרסה ב2024, כאשר פניתי לשירת הלקוחות של פוריסם נאמר לי שזו הגרסה החדשה ביותר שהם "מספקים" (יכול להית שיש פירמוור אחר במקום אחר למדינות אחרות או ספקים אחרים), ההודעה הבאה גם אומרת שהספק משתמש בחיבור גנרי מה שאומר שככל הנראה הספק לא דורש הגדרה מיוחדת מpurism בשביל לספק תמיכה בשבילם (כמו שעשו בpinephone עבור ספקים סויימים):
-----------------------------------
Hardware | manufacturer: QUALCOMM INCORPORATED
| model: 0
| firmware revision: MPSS.JO.2.0.2.c1.1-00032-9607_GENNS_PACK-1.351938.1 1 [Nov 26 2020 02:00:00]
| carrier config: ROW_Generic_3GPP
| carrier config revision: 05010822
| h/w revision: 10000
| supported: gsm-umts, lte
| current: gsm-umts, lte
| equipment id: XXXXXX
-----------------------------------
כאשר בדקתי גרסת הפירמוור שלי באמצעות פקודת ה AT הבאה :
echo "AT+BMSWVER" | sudo socat - /dev/ttyUSB2,crnl
+BMSWVER: M100E_YCSN0_1.0.0_220926,YCSN0_M100E_1BAD_3117_V1.0.0.2_20220930,M100E_1.0.4_200715
OK
למה זה שונה ? אני משער שאחת הגרסאות שם היא גרסת ה aDSP לעומת גרסת הקושחא המפעילה את ההתקן, מי זה מי ? לא יכול להגיד כרגע, אין תיעוד של פקודות ה AT של המודם bm818 בצורה פתוחה וחופשית.
הסבר קצר על מסלול השיחה בVoLTE :
https://www.3glteinfo.com/volte-call-flow-procedures/
הסבר על ה IMS :
https://www.3glteinfo.com/ims-volte-architecture/
עריכה:
שכחתי לציין שניסית את הפתרון שהוצע ב
https://source.puri.sm/Librem5/OS-issues/-/issues/162#note_145859 אבל לצערי זה לסייע לאפשר לבצע שיחות תחת 4G בלבד.
אין תיעוד רשמי עם כלל פקודות ה AT עבור המודם הנ"ל אצל פוריסם, מה שיש זה קישור לרשימה של ספק אחר שאנשים ממליצים להשתמש בו ולחפש שם את המידע.
שיהיה ברור, אני ממש לא מעביר ביקורת לא על purism ולא על ספקי הסלולאר לגבי הבעייה שקיימת פה עם ה VoLTE , מדובר בתהליך ארוך ומסורבל, ולא לחינם לקח שנים לקדם את התהליך של התמיכה בנושא, מדובר בתהליך טכני שדורש השקעת משאבי אנוש וכסף (חומרה ותוכנה לא באים בחינם בעולם האמיתי), אני מתאר את התהליך שאני עובר עם המכשיר הזה, ואולי בעתיד זה יעזור למישהוא, בנוגע לטענה שזו האחריות של purism לבחור במודם שיהיה יותר פתוח ויאפשר טעינת MBN או עדכונים מהמשתמשים, הרשו לי לומר, שהעולם האמיתי הרבה יותר מורכב, זה לא כזה פשוט לקבל אישור FCC ואם המודם שלכם היה כל כך פתוח כנראה לא היה עובר, יתרה מזאת ספקי המודמים עצמם לא כאלה פתוחים לגישת עבודה כזאת בדר"כ (יכולים להיות יוצאי דופן).
משהוא קטן שאני רוצה לציין, זה כיף בפן האישי, בסביבה עיסקית ? אלא אם החברה עוסקת במכישירם כאלה, עדיף יהיה שישתמשו במכשירים המתאימים לאקו-סיסטם של החברה, בעוד אני תומך נלהב בקוד פתוח, אני עובד תאגידי ויודע טוב מאוד שדברים כאלה לא יעבדו ויש אפילו דברים שעדיף לא להעלות כלל בשיהה תאגידית, זה לא המקום ולא המצב לדבר עליהם, אני אתן דוגמאות היו מקרים בהם הצעתי להשתמש במכשירים כמ ה pinephone כי היה למכישר ייתרון עבור פתרון בעייה ספציפית, במקרים אחרים אמרתי בצורה מפרושת שיילכו לאנדרוייד עם חומרה המתאימה לדרישות הלקוח, אין מכשיר אחד שיתיאם לכולם, לפעמים צריך מכשירים שהם rugged ובמקרים כאלה כיום זה מרבית הזמן פשוט אנדרויידים וואני עצמי רציתי לרכוש לעצמי את המכשיר של cat בזמנו בגלל היכולות שלו, או מכשירים עם מערכות הפעלה ייחודיות לעצמן, צריך להבין שהמכשירים צריכים להתאים למשימה ולאנשים תמיד.
ראיתי טענה ש bm818 מכיל את אותן הפקודות כמו ה EC25 של quectel, אני מצטער אבל זה לא המצב שאני ראיתי פקודות בדקה של EC25/EG25 לא עבדו.
מצאתי את הכלי https://github.com/Gbaby918/mbntool ועוד מספר כלים שבתאוריה יאפשרו טעינה של פרופילי mbn ל qualcom מה שיכול להיות יוכל להציל את המצב לטעון פרופילים אחרים, אני לא בטוח מספיק בדרך הזאת עדיין לביצוע, אני מאמין שהכלי הזה יכול לטעון דברים כמ https://xdaforums.com/t/modem-mbn-files-for-different-carriers-updated-2023-june.4626239/ והקבצים שהצליחו להוציא החוצה מתוך מכשירי קואלקום אחרים.
עדכון: דיברתי עם Purism והם אמרו שהם יוצרו קשר עם ספק המודם על מנת לסייע לפתור את הבעייה.