כמה פרופילים מופעלים

במכשירים עם Android בגרסה 13 ואילך, מערכת Android תומכת בכמה פרופילים מופעלים (MEP) ל-eUICC. התכונה הזו מאפשרת למכשירים תמיכה בשני כרטיסי SIM באמצעות שבב eSIM יחיד, שיכול להכיל כמה פרופילי SIM ולהתחבר לשני ספקים שונים בו-זמנית. יצרני מכשירים צריכים לעבוד עם ספקי SoC וספקי ערכות שבבים של eSIM כדי לשלב את התכונה הזו במכשירים שלהם.

רקע

במכשירים עם Android בגרסה 12 ומטה, מערכת AOSP מספקת תמיכה מוגבלת שמאפשרת ל-eSIM יחיד לתמוך בכמה פרופילים בו-זמנית. למרות החיסכון המשמעותי במקום ובעלויות ש-eSIM מציע, היעדר תמיכה בשני כרטיסי SIM מונע מיצרני מכשירים לאמץ מכשירים עם eSIM בלבד. כדי לספק תמיכה בשני כרטיסי SIM במכשיר עם eSIM בלבד, יצרני המכשירים צריכים לארוז שני רכיבי eSIM במכשיר, מה שמגדיל את עלויות רשימת החומרים (BOM) ומוביל לחוויית משתמש גרועה בניהול המינויים. התכונה MEP שזמינה ב-AOSP מ-Android 13 פותרת את הבעיה הזו.

ארכיטקטורת eUICC

בקטע הזה מתוארת ארכיטקטורת שבב ה-eSIM במכשירים עם MEP לגרסאות שונות של Android, וארכיטקטורת שבב ה-eSIM במכשירים ללא MEP.

Android 14

במכשירים עם Android 14 ואילך, מערכת Android תומכת באפשרויות MEP-A1 ו-MEP-B לבחירת שורש דומיין האבטחה של המוסד המנפיק (ISD-R) ולבחירת יציאות eSIM, כפי שמפורט ב-GSMA SGP V22 3.0. בקטעים הבאים מתוארים מודלים לבחירת ISD-R של MEP-A1 ו-MEP-B:

  • MEP-A1: ISD-R נבחר ביציאה 0 (יציאת הפקודה היא 0) ופרופילים נבחרים ביציאות eSIM 1 ומעלה. פקודות ES10 תמיד נשלחות ליציאה 0, ויציאת הפקודה ויציאת היעד תמיד שונות. ה-LPA בוחר את הניוד.

    מודל בחירה של MEP-A1 ISD-R

    איור 1. מודל בחירה של MEP-A1 ISD-R

  • MEP-B: ISD-R נבחר בכל יציאה, ואפשר להקצות פרופיל לכל יציאה. פקודות ההפעלה וההשבתה נשלחות ליציאה שבה צריך להפעיל או להשבית את הפרופיל (כאשר יש רענון בהמתנה). יציאת הפקודה ויציאת היעד תמיד זהות.

    מודל בחירה של MEP-B ISD-R

    איור 2. מודל בחירה של MEP-B ISD-R

Android 13

ב-Android מגרסה 13 ואילך, במכשירים שתומכים ב-MEP, חריץ ה-eSIM מכיל כמה יציאות eUICC, ובכל יציאה יכול להיות פרופיל מופעל. כפי שמוצג באיור 3, בארכיטקטורה הזו, כרטיס eUICC יחיד (חריץ פיזי יחיד) תומך בתמיכה בשני כרטיסי SIM במצב Dual Standby (DSDS) כי כל יציאת eUICC מקושרת לפס בסיס של מודם. ‫HAL ו-API ב-Android 13 לא תלויים בגרסת MEP.

ארכיטקטורת צ'יפ eSIM עם תמיכה ב-MEP

איור 3. ארכיטקטורת שבב eSIM עם תמיכה ב-MEP (Android מגרסה 13 ואילך)

‫Android מגרסה 12 ומטה

במכשירים עם Android בגרסה 12 ומטה ללא MEP, כמו שמוצג באיור 4, חריץ ה-eSIM תומך רק בפרופיל מופעל אחד בכל פעם. המשמעות היא שהמכשיר לא תומך ב-DSDS.

ארכיטקטורת שבב eSIM ללא תמיכה ב-MEP

איור 4. ארכיטקטורת שבב eSIM ללא תמיכה ב-MEP (Android 12 ומטה)

זרימת מידע של API עבור כמה פרופילים מופעלים

איור 5 מתאר את זרימת המידע של MEP עבור eUICC ב-Android 13. מסגרת הטלפוניה כוללת את המחלקה UiccPort, שמייצגת את המבנה הפיזי ב-eUICC. הסיווג UiccPort משמש לכל סוגי כרטיסי ה-SIM: כרטיס SIM פיזי (pSIM), כרטיס SIM משולב (iSIM) וכרטיס SIM מוטמע (eSIM). ב-eUICC עם כמה יציאות, אובייקט UiccSlot אחד ואובייקט UiccCard אחד ממופים לכמה מופעים של UiccPort. כל מופע של UiccPort יכול להיות מקושר למופע אחד לכל היותר של UiccProfile. התהליך הזה מאפשר ל-UiccPort להיות ממופה למשבצת לוגית, ול-UiccSlot (משבצת פיזית) להיות ממופה לכמה משבצות לוגיות.

זרימת מידע ב-MEP

איור 5. זרימת המידע ב-eUICC עם תמיכה ב-MEP

הטמעה

בקטע הזה מוסבר איך להטמיע את התכונה MEP, כולל פרטים על דרישות HAL, ממשקי API וממשק משתמש. יצרני מכשירים צריכים לעבוד עם ספקי SoC וספקי ערכות שבבים של eSIM כדי לתמוך ב-MEP.

דרישות לגבי HAL

כדי לתמוך ב-MEP עבור eUICC, צריך להטמיע את ממשקי ה-API הבאים של IRadio AIDL HAL, שנמצאים בכתובת /platform/hardware/interfaces/radio/aidl/aidl_api.

במכשירים עם Android מגרסה 14 ואילך, צריך להשתמש בממשקי HAL בגרסה IRadio 2.1, שמשתמשים ב-MultipleEnabledProfileMode (מודל בחירת ISD-R שנתמך על ידי המודם או eUICC) ומעבירים מידע על פקודת ES10 APDU במהלך פעולות של ערוץ לוגי ICC.

CardStatus

המודם צריך לתמוך ב-API‏ CardStatus כתשובה ל-method‏ getIccCardStatusResponse. התגובה צריכה לכלול את אינדקס היציאה ואת אינדקס החריץ הפיזי שצוינו על ידי SimPortSlotMapping.

במכשירים עם Android מגרסה 14 ואילך, המודם צריך לעבור את מצב ה-MEP הנתמך עם כל האירועים של CardStatus.

SimSlotStatus

המודם צריך לתמוך ב-API‏ SimSlotStatus כתשובה ל-method‏ getSimSlotsStatus. סטטוס חריץ ה-SIM כולל מערך של הממשק SimPortInfo, שכולל את אינדקס היציאה, את ה-ICCID של הפרופיל המופעל ואת מצב היציאה. המודם צריך להחזיר לפחות שני אובייקטים של SimPortInfo.

במכשירים עם Android מגרסה 14 ואילך, המודם צריך לעבור את מצב ה-MEP הנתמך עם כל האירועים של CardStatus.

setSimSlotMapping

השיטה setSimSlotMapping חייבת להעביר מערך של SimPortSlotMapping. האינדקס של המערך הוא המשבצת הלוגית, וSimPortSlotMappingמצוינים בו היציאה הממופה המתאימה ואינדקס המשבצת הפיזית. השיטה setSimSlotMapping מגדירה את המיפוי מיציאות לחריצים לוגיים. אפליקציית ה-LPA משתמשת בשיטה הזו כדי לבחור את היציאה הפעילה.

ממשקי API שתומכים ב-MEP ל-eUICC

מכשירי Android שתומכים במספר פרופילים מופעלים כחלק מחבילת הטלפוניה של AOSP, נדרשים לתמוך בממשקי ה-API הבאים.

UiccCardInfo

  • (Android מגרסה 13 ואילך) isMultipleEnabledProfilesSupported: מחזירה אם כרטיס ה-UICC הזה תומך ב-MEP.
  • (Android מגרסה 13 ומעלה) getPorts: מחזירה את רשימת היציאות האפשריות ל-UICC מסוים. אם ה-UICC הוא pSIM או eSIM שלא תומך ב-MEP, הפונקציה מחזירה רשימה עם רכיב אחד.
  • (Deprecated) getIccId: מחזירה ICCID. במכשירים עם MEP, ל-UICC יכול להיות יותר מ-ICCID אחד, ולכן צריך להשתמש ב-UiccPortInfo.getIccId() במקום זאת.

‫(Android מגרסה 13 ואילך) UiccPortInfo

  • getIccId: הפונקציה מחזירה את מספר ה-ICCID אם יש מינוי פעיל ביציאה הזו.
  • getPortIndex: מחזירה את אינדקס היציאה.
  • getLogicalSlotIndex: מחזירה את האינדקס של מחסנית המודם הלוגית הפעילה.

SubscriptionInfo

  • (Android מגרסה 13 ואילך) getPortIndex: מחזירה את אינדקס היציאה שבו המינוי מופעל. אם המינוי מושבת, הפונקציה מחזירה INVALID_PORT_ID -1.

EuiccManager

  • switchToSubscription: מעבר למינוי נתון. ההרשאה הזו משמשת אפליקציות שאין להן הרשאת ספק במינויים פעילים. כשקוראים לפונקציה הזו, הפלטפורמה פותרת באופן פנימי את אינדקס היציאה באמצעות תיבת דו-שיח עם שלוש אפשרויות בחירה כדי להשבית את המינוי הפעיל שנבחר אם אין יציאות זמינות. באפליקציות שמטרגטות את Android 13 ואילך, אסור להשתמש ב-API הזה כדי להשבית מינוי באמצעות העברת מזהה מינוי לא תקין. במקום זאת, צריך להשתמש בשיטה switchToSubscription (נוספה ב-Android 13) עם אינדקס היציאה שצוין.
  • (Android מגרסה 13 ואילך) switchToSubscription(int subscriptionId, int portIndex, PendingIntent callback): מעבר למינוי נתון. אפליקציות לביצוע שיחות עם הרשאת ספק לגבי המינויים הפעילים יכולות לציין באיזה יציאה להפעיל את המינוי.
  • (Android מגרסה 13 ואילך) isSimPortAvailable: מחזירה את הערך true אם אינדקס היציאה שמועבר זמין, אחרת מחזירה את הערך false. פורט זמין אם לא מופעלת בו מינוי או אם לאפליקציית השיחות יש הרשאת ספק על המינוי שמותקן בפורט שנבחר.

EuiccService

  • (Android מגרסה 13 ואילך)onSwitchToSubscriptionWithPort: מעבר למינוי נתון ביציאה שצוינה. ההטמעה של LPA חייבת לתמוך בכך ב-Android מגרסה 13 ואילך.

TelephonyManager

  • (Android מגרסה 13 ואילך) getSimApplicationState: מחזירה קבוע שמציין את המצב של אפליקציית הכרטיס. ה-API הזה מעביר גם אינדקס של חריץ פיזי וגם אינדקס של יציאה. השיטה getSimApplicationState(int physicalSlotIndex) (שהוצאה משימוש) מעבירה רק את האינדקס של החריץ הפיזי כדי לקבל אובייקט simApplicationState.
  • (Android מגרסה 13 ואילך) setSimSlotMapping(Collection<UiccSlotMapping> slots): מיפוי של המשבצות הלוגיות למשבצות ולחיבורים פיזיים.
  • (Android מגרסה 13 ואילך) ‫Collection<UiccSlotMapping> getSimSlotMapping: מקבל את המיפוי מחריצים לוגיים לחריצי SIM פיזיים ומאינדקסים של יציאות.

ממשק משתמש

כדי לפתור את הבעיה של בחירת מספר לניוד ב-eSIM, במכשירים שתומכים ב-MEP, המשתמשים צריכים להשבית אחד מהמינויים הפעילים כדי להפעיל מינוי חדש. ב-Android 13, ‏ AOSP כולל תהליך למשתמש עם תיבת דו-שיח עם שלוש אפשרויות שאפשר להחיל על תהליכים למשתמש להפעלת מינויים מתוך אפליקציית ההגדרות. באיור 6 מוצג תהליך לדוגמה של חוויית המשתמש הזו.

מסלול המשתמש במינוי MEP SIM

איור 6. מסלול המשתמש באפליקציה להפעלת מינוי לכרטיס SIM

מתגי feature flag

כדי לתמוך ב-MEP, המכשירים צריכים להצהיר על דגלי התכונות הבאים:

הטמעה של LPA

כדי לתמוך ב-MEP, צריך לוודא שההטמעה של LPA עומדת בדרישות הבאות:

  • מיישם את ממשקי ה-API מ-EuiccService כדי לתמוך בכמה יציאות.
  • משתמש בממשקי ה-API לבחירת יציאות ולהפעלת פרופילים.
  • מספקת חוויית משתמש שמאפשרת לאפליקציות של ספקים להפעיל פרופילים ביציאות נבחרות.

אימות

כדי לבדוק את ההטמעה של התכונה MEP, צריך לוודא שה-builds עוברים את מקרי הבדיקה הבאים של CTS (עבור ממשקי API ציבוריים): /platform/cts/tests/tests/telephony/current/src/android/telephony/euicc/cts.

יצרני מכשירים צריכים גם לעבוד עם ספקי המודם, שבב ה-eUICC ומערכת ההפעלה של ה-eSIM כדי לוודא שהמכשיר יכול לבצע את הפעולות הבאות:

  • אפשר להפעיל שני פרופילים של eSIM ולחבר אותם לשתי רשתות שונות.
  • אפשר להפעיל ולהשבית פרופילים של eSIM בכל יציאת eSIM.
  • יש תהליך UX שמופעל על ידי אפליקציית הספק ומאפשר למשתמשים להחליף פרופילים.

המלצה לחברות תובלה

כדי לוודא שהמשתמשים לא יאבדו את השירות כשהם מעבירים פרופילים של eSIM מיציאה אחת לאחרת, מומלץ לספקי הסלולר לספק תמיכה בפעולות הבאות:

  • מיפוי דינמי של IMEI וכרטיס SIM
  • כמה מספרי ICCID או כרטיסי SIM לכל מזהה eUICC ‏ (EID)