מניעת חפיפה בין ערוצים ב-Wi-Fi וברשת הסלולרית

תכונת הימנעות מערוצים של Wi-Fi ורשת סלולרית, שהושקה ב-Android 12, מזהה ערוצי Wi-Fi לא בטוחים ונמנעת משימוש בהם במקרים שבהם עלולה להיות הפרעה מערוצים סלולריים או לערוצים סלולריים. זה כולל ממשקים כמו STA,‏ SoftAp,‏ Wi-Fi ישיר (P2P) ו-Wi-Fi Aware (NAN).

בדף הזה נסביר את הנושאים הבאים:

  • מידע שמודם סלולרי צריך לדווח למסגרת Android.
  • אלגוריתמים שמשמשים במסגרת ה-Wi-Fi לחישוב ערוצי ה-Wi-Fi שצריך להימנע מהם.
  • טבלאות הגדרה שיצרני המכשירים צריכים לספק עבור מסגרת ה-Wi-Fi.
  • ממשקי API של המערכת, הגדרות וממשקי HAL API שקשורים לתכונה של הימנעות מהפרעות.
  • התנהגות של מסגרת לטיפול במניעת שימוש בערוצים.
  • התנהגות של ספק שבבים בטיפול במקרים של הימנעות מערוצים.
  • פרטים על ההטמעה של החרגת ערוצים.
  • בדיקות לאימות התנהגות של הימנעות מערוצים.

רקע

במכשירים עם טכנולוגיות סלולריות כמו LTE,‏ 5G NR וגישה מורשית בסיוע (LAA), הערוצים הסלולריים שבשימוש עלולים להפריע לערוץ ה-Wi-Fi שבשימוש. זה קורה כשהערוצים הסלולריים וערוצי ה-Wi-Fi נמצאים בטווח הפרדה קצר של תדרים (ערוצים סמוכים) או כשיש הפרעות הרמוניות והפרעות של אינטרמודולציה.

הפרעה כזו הופכת לבעיה כשאנטנה אחת משדרת ואנטנה אחרת קולטת בו-זמנית. במקרה כזה, אנטנת השידור מציפה את אנטנת הקליטה, ומשפיעה על איכות הקליטה שלה.

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

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

התכונה מאפשרת להימנע מערוצים על ידי שליטה בערוצי ה-Wi-Fi. אפשר לתאר את תוכנית ההימנעות מערוצי Wi-Fi כסדרה של ארבעה שלבים מופשטים:

  1. דיווח על שינוי בתדר הסלולרי של המודם
  2. אלגוריתם למניעת הפרעות בין רשתות מחשב ערוצי Wi-Fi לא בטוחים
  3. אלגוריתם למניעת הפרעות משפיע על שירות ה-Wi-Fi
  4. המסגרת או מנהל ההתקן מבצעים פעולת Wi-Fi מתאימה

תוכנית למניעת שידור בערוצים מסוימים

איור 1. תוכנית למניעת שידור בערוצים מסוימים

דיווח על שינוי בתדר הסלולרי

שירות הטלפוניה מדווח על הערוצים הסלולריים שנמצאים בשימוש. כשמשתנה תדר הרשת הסלולרית הפעילה, המודם מדווח על המידע הזה לשירות הטלפוניה באמצעות IRadio::PhysicalChannelConfig. המידע הזה כולל אינדיקציות לגישה מורשית בסיוע (LAA) ולצירוף ערוצים (CA).

החל מ-Android 12, השדות הבאים ב-1.6 IRadio::PhysicalChannelConfig מספקים מידע נדרש לנוסחאות של Coex שהמודם צריך לאכלס.

struct PhysicalChannelConfig {
    /** Connection status for cell. Valid values are PRIMARY_SERVING and SECONDARY_SERVING */
    CellConnectionStatus status;

    /** The radio technology for this physical channel */
    RadioTechnology rat;

    /** Downlink Absolute Radio Frequency Channel Number */
    int32_t channelNumberDownlink;

    /** Uplink Absolute Radio Frequency Channel Number */
    int32_t channelNumberUplink;

    /** Downlink cell bandwidth, in kHz */
    int32_t cellBandwidthDownlink;

    /** Uplink cell bandwidth, in kHz */
    int32_t cellBandwidthUplink;
}

חישוב של ערוצי Wi-Fi לא בטוחים

כשהמודם מדווח על שינוי בתדר הסלולרי, האלגוריתם של ערוץ ה-coex מחשב את ההפרעות בין הערוצים הסלולריים וערוצי ה-Wi-Fi, וקובע אילו ערוצי Wi-Fi לא בטוחים.

יש כמה סוגים של הפרעות שדורשים נוסחאות שונות: שכנות והרמונית/אינטרמודולציה. בגלל ההבדלים הפיזיים באנטנה ובפריסה בין המכשירים, דפוסי ההפרעות של שכנים והרמוניות/אינטרמודולציה שונים בכל מכשיר. כדי להתמודד עם הבעיה הזו, יצרני מכשירים צריכים לספק טבלת חיפוש להצבת פרמטרים בנוסחאות כלליות לשני סוגי ההפרעות. הפרמטרים האלה מוגדרים לכל פס תדרים של תא, והם מפנים לפסי התדרים של הערוצים הפעילים של התא.

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

באופן כללי, התכונה 'הימנעות מערוצים' משתמשת בגישה של 'הכי טוב שאפשר' כדי להימנע מערוצי Wi-Fi לא בטוחים ולבצע אופטימיזציה של הביצועים. אבל במקרים מסוימים (למשל, בגלל דרישות של ספקי סלולר), חובה להימנע משימוש בערוצים לא בטוחים עבור פסי תדרים סלולריים מסוימים בממשקים מסוימים. במקרים כאלה, הגבלות חובה מיוצגות כמסיכת ביטים שמכילה ערכים שקובעים אם לאסור שימוש בערוצים מסוימים כמו Wi-Fi ישיר ‏ (P2P),‏ SoftAp ו-Wi-Fi Aware ‏(NAN). ערוץ לא בטוח הוא המלצה לא להשתמש בערוץ הזה בכל תרחישי השימוש, אבל הגבלות חובה מציינות תרחישי שימוש ספציפיים שאסור להשתמש בהם.

אם כל הערוצים בתדר ‎2.4 GHz או ‎5 GHz מסומנים כלא בטוחים, טבלת החיפוש יכולה להגדיר ערוץ ברירת מחדל בתדר ‎2.4 GHz או ערוץ ברירת מחדל בתדר ‎5 GHz לכל תדר של תא שגורם להפרעות, כאפשרות הבטוחה ביותר. הערוצים האלה שמוגדרים כברירת מחדל לא מדווחים כערוצים לא בטוחים, גם אם שאר הערוצים בתחום התדרים מדווחים כלא בטוחים.

רשימת חריגים

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

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

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

רשימת ההחלפות מיוצגת על ידי רשימה של מספרי ערוצים או מילות מפתח מוגדרות מראש של קטגוריות לכל פס Wi-Fi:

קטגוריות 2g:

  • all (כל התדר ‎2.4 GHz)

קטגוריות של 5G:

  • all (תחום התדרים כולו של ‎5 GHz)
  • 20mhz (5 GHz 20 MHz channels)
  • 40mhz (ערוצי ‎5 GHz 40 MHz)
  • 80mhz (ערוצי 5 GHz‏ 80 MHz)
  • 160mhz (ערוצי 160 MHz ב-5 GHz)

הפרעות מערוצים סמוכים

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

הפרעות בערוץ

איור 2. המרחק בין הערוץ של התוקף לבין הערוץ של הקורבן

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

פרמטרים של הפרעות משכנות

  • wifiVictimMhz: ערך הסף של המרחק ב-MHz עבור קורבן Wi-Fi (העלאה של תא)
  • cellVictimMhz: ערך הסף של המרחק ב-MHz לתא שמוגדר כקורבן (קישור downlink של התא)

האלגוריתם פועל באופן הבא לכל ערוץ פעיל של תא:

  1. לגבי הפס של הערוץ, המערכת מנסה למצוא רשומה בטבלת מיפוי. אם לא נמצא ערך בטבלה, הפונקציה מחזירה את הערך ללא ערוצים לא בטוחים עבור הערוץ של התא.
  2. על סמך פס התדרים הסלולרי, המערכת מזהה איזה פס תדרים של Wi-Fi נמצא בסיכון ומאיזה צד של פס התדרים מגיעות ההפרעות (לדוגמה, ערוצים נמוכים של ‎2.4 GHz, ערוצים גבוהים של ‎2.4 GHz, ערוצים נמוכים של ‎5 GHz).
  3. אם wifiVictimMhz מופיע והערוץ הסלולרי כולל קישור

    1. אם החלק התחתון של תדר ה-Wi-Fi נמצא בסיכון:

      1. הפונקציה מוצאת את הגבול העליון של ערוצים לא בטוחים על ידי הוספת wifiVictimMhz לתדר הגבוה ביותר של העלייה של התא.
      2. הפונקציה מוצאת את ערוץ ה-Wi-Fi הראשון ברוחב פס של 20 MHz שהקצה התחתון שלו חופף למגבלה.
      3. מסמן את ערוץ ה-Wi-Fi, כל ערוץ ברוחב פס גדול יותר שמכיל אותו (לדוגמה, 40 MHz,‏ 80 MHz) וכל ערוץ נמוך יותר באותו פס כמו הערוץ הלא בטוח.
    2. אם החלק העליון של פס ה-Wi-Fi נמצא בסיכון:

      1. כדי למצוא את הגבול התחתון של ערוצים לא בטוחים, מחסרים את הערך של wifiVictimMhz מהתדר הנמוך ביותר של הערוץ להעלאה של התא.
      2. הפונקציה מוצאת את ערוץ ה-Wi-Fi הראשון שהקצה העליון שלו חופף למגבלה.
      3. מסומן ערוץ ה-Wi-Fi, כל ערוץ גדול יותר שמכיל אותו (לדוגמה, 40 Mhz,‏ 80 Mhz) וכל ערוץ גבוה יותר באותו פס תדרים כמו הערוץ הלא בטוח.
  4. אם cellVictimMhz מופיע ולערוץ הסלולרי יש קישור למטה:

    1. הוא מבצע את שלב 3 באמצעות cellVictimMhz כסף, ומשווה אותו לנתוני הורדה מהתא במקום לנתוני העלאה מהתא.
  5. הוא מחיל את מכסת ההספק של רשומת הטבלה על הערוצים הלא בטוחים המחושבים.

חישוב של ערוץ לא בטוח

איור 3. חישוב לא בטוח של ערוץ להפרעות בערוץ סמוך

עיוות הרמוני או עיוות אינטרמודולרי

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

$$ overlap = \frac{min(distortion_{high}, victim_{high}) - max(distortion_{low}, victim_{low})}{victim_{bandwidth}} $$

במקרה של עיוות הרמוני, האלגוריתם מתייחס לעיוות ההרמוני של ערוץ העלאה של תא שפוגע בערוצי Wi-Fi. לאחר מכן, הפונקציה מחליפה את הערכים של עיוות גבוה ועיוות נמוך בערכים ההרמוניים על סמך תדרי העלייה של התא ודרגה הרמונית $ N $.

$$ harmonic_{high} = N * uplink_{high} $$
$$ harmonic_{low} = N * uplink_{low} $$

חישוב עיוות הרמוני של ערוץ לא בטוח

איור 4. חישוב לא בטוח של ערוץ לעיוות הרמוני

במקרה של אינטרמודולציה, האלגוריתם מביא בחשבון את עיוות האינטרמודולציה של הערוץ מהטלפון הסלולרי אל האנטנה ואת ערוץ ה-Wi-Fi שפוגע בערוץ מהאנטנה אל הטלפון הסלולרי. לאחר מכן, המערכת מחליפה את הערכים של העיוות הגבוה והעיוות הנמוך בערכים של האינטרמודולציה על סמך התדרים של העלייה מהתא, תדרי ה-Wi-Fi ושני מקדמי האינטרמודולציה $ M $ ו-$ N $.

$$ intermod_{high} = |M*wifi_{high} + N*uplink_{high}| $$
$$ intermod_{low} = |M*wifi_{low} + N*uplink_{low}| $$

חישוב עיוות אינטרמודולציה של ערוץ לא בטוח

איור 5. חישוב של ערוץ לא בטוח לעיוות אינטרמודולציה

אפשר לציין ערכים של $ M $, $ N $ וחפיפה בטבלת החיפוש לפי פס תאים מפריע. אם אין הפרעות בפס מסוים, הערכים לא יופיעו בטבלה עבור הרשומה של הפס הזה. אפשר להגדיר באופן עצמאי שני סטים של הערכים האלה עבור תדרי ה-Wi-Fi‏ ‎2.4 GHz ו-‎5 GHz.

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

האלגוריתם פועל באופן הבא לכל ערוץ פעיל של תא:

  1. לגבי הפס של הערוץ הסלולרי, המערכת מנסה למצוא רשומה בטבלת מיפוי. אם לא נמצאה רשומה בטבלה, הפונקציה מחזירה את הערוץ ללא ערוצים לא בטוחים.
  2. אם הפרמטרים מוגדרים, הפונקציה מוצאת את הערוצים הלא בטוחים בתדר 2.4 GHz מההרמוניות.

    1. הפונקציה מחזירה את הדרגה ההרמונית N עבור ‎2.4 GHz.
    2. הפונקציה מחשבת את התדר ההרמוני הגבוה ואת התדר ההרמוני הנמוך על סמך N והקישור של התא.
    3. הפונקציה מוצאת את ערוץ ה-Wi-Fi הראשון של 20 MHz שנמצא בתוך הגבול התחתון של ההרמוניה שמגיעה מלמטה.
    4. הפונקציה מחשבת את החפיפה של ההרמוניה בערוץ ה-Wi-Fi ומסמנת את הערוץ כלא בטוח אם החפיפה חורגת מסף החפיפה של Wi-Fi בתדר 2.4 GHz.
    5. הפונקציה מוצאת את ערוץ ה-Wi-Fi הראשון של 20 MHz שנמצא בתוך הגבול העליון של ההרמוניה שמגיעה מלמעלה.
    6. הפונקציה מחשבת את החפיפה של ההרמוניה בערוץ ה-Wi-Fi ומסמנת את הערוץ כלא בטוח אם החפיפה חורגת מסף החפיפה של ה-Wi-Fi בתחום התדרים של 2.4 GHz.
    7. מסמן כל ערוץ של 20 MHz ביניהם כערוץ לא בטוח.
  3. אם מוגדרים פרמטרים, הפונקציה מוצאת את הערוצים הלא בטוחים בתדר 5 GHz מההרמוניות.

    1. הפונקציה מוצאת את הדרגה ההרמונית N עבור ‎5 GHz. אם N הוא 0, מדלגים לשלב 5.
    2. הפונקציה מחשבת את התדר ההרמוני הגבוה ואת התדר ההרמוני הנמוך על סמך N והקישור של התא.
    3. מוצא ערוצים לא בטוחים של 20 MHz.

      1. הפונקציה מוצאת את ערוץ ה-Wi-Fi הראשון בתדר 20 MHz שנמצא בתוך הגבול התחתון של ההרמוניה שמגיעה מלמטה.
      2. הפונקציה מחשבת את החפיפה של ההרמוניה בערוץ ה-Wi-Fi ומסמנת את הערוץ כלא בטוח אם החפיפה חורגת מסף החפיפה של ה-Wi-Fi בתדר ‎2.4 GHz.
      3. הפונקציה מוצאת את ערוץ ה-Wi-Fi הראשון של 20 MHz שנמצא בתוך הגבול העליון של ההרמוניה שמגיעה מלמעלה.
      4. הפונקציה מחשבת את החפיפה של ההרמוניה בערוץ ה-Wi-Fi ומסמנת את הערוץ כלא בטוח אם החפיפה חורגת מסף החפיפה של ה-Wi-Fi בתדר ‎2.4 GHz.
      5. מסמן כל ערוץ של 20 MHz ביניהם כערוץ לא בטוח עם מגבלת ההספק שצוינה.
    4. מאתר ערוצים לא בטוחים של 40 MHz,‏ 80 MHz ו-160 MHz

      1. חוזרים על שלב 3א, אבל עם 40 MHz, ‏ 80 MHz ו-160 MHz.
      2. במקום לחשב את החפיפות של הערוצים בקצה ההרמוני, נעשה שימוש חוזר בחפיפות המחושבות מהערוצים הקטנים יותר (לדוגמה, אם שני ערוצים של 20 MHz יוצרים ערוץ של 40 MHz ויש להם חפיפה של 30% ו-90%, אז החפיפה הממוצעת של הערוץ של 40 MHz היא 60%).
  4. אם מוגדרים פרמטרים, הפונקציה מוצאת את הערוצים הלא בטוחים בתדר ‎2.4 GHz מתוך אינטרמודולציה.

    1. הפונקציה מוצאת את מקדמי האינטרמודולציה N ו-M עבור 2.4 GHz.
    2. לכל ערוץ Wi-Fi בתדר ‎2.4 GHz:

      1. מחשבת את התדר הנמוך של אינטרמודולציה ואת התדר הגבוה של אינטרמודולציה על סמך N,‏ M, הערוץ של העלייה מהתא אל הרשת והערוץ של ה-Wi-Fi.
      2. הפונקציה מחשבת את החפיפה של האינטרמודולציה בקישור Downlink של התא ומסמנת את הערוץ כלא בטוח אם החפיפה חורגת מסף החפיפה של התא בתדר 2.4 GHz.
  5. אם הפרמטרים מוגדרים, הפונקציה מוצאת את הערוצים הלא בטוחים של 5 GHz מתוך אינטרמודולציה.

    1. חוזרים על שלב 4 באמצעות ערוצי ה-Wi-Fi בתדר 5 GHz וסף החפיפה של התאים בתדר 5 GHz.
  6. מחיל את מגבלת ההספק של רשומת הטבלה על הערוצים הלא בטוחים המחושבים.

תוצאה סופית

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

האלגוריתם פועל באופן הבא:

  1. אם כל ערוץ Wi-Fi בתחום תדרים של 2.4 GHz מסומן כערוץ לא בטוח, הפונקציה מסירה את ערוץ ה-Wi-Fi שמוגדר כברירת מחדל בתחום תדרים של 2.4 GHz מהקבוצה.
  2. אם כל ערוץ Wi-Fi בתחום תדרים של 5 GHz מסומן כערוץ לא בטוח, המערכת מסירה את ערוץ ה-Wi-Fi בתחום תדרים של 5 GHz מברירת המחדל מהקבוצה.
  3. הפונקציה מחזירה את קבוצת הערוצים הסופית שלא בטוח להשתמש בהם.

הפורמט של טבלת המיפוי

טבלאות החיפוש מיוצגות בקובץ XML שנמצא במחרוזת התצורה config_wifiCoexTableFilepath שאפשר להוסיף לה שכבות, ומוגדרות על ידי ה-XSD הבא.


<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            version="1.0">

  <xsd:element name="table">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="entry" minOccurs="1" maxOccurs="unbounded"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="entry">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="rat" type="ratType"/>
        <xsd:element name="band" type="xsd:int"/>
        <xsd:element name="powerCapDbm" type="xsd:int" minOccurs="0"/>
        <xsd:choice>
          <xsd:element ref="params"/>
          <xsd:element ref="override"/>
        </xsd:choice>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:simpleType name="ratType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="LTE"/>
      <xsd:enumeration value="NR"/>
    </xsd:restriction>
  </xsd:simpleType>

  <!-- Define coex algorithm parameters -->
  <xsd:element name="params">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="neighborThresholds" minOccurs="0"/>
        <xsd:element name="harmonicParams2g" type="harmonicParams" minOccurs="0"/>
        <xsd:element name="harmonicParams5g" type="harmonicParams" minOccurs="0"/>
        <xsd:element name="intermodParams2g" type="intermodParams" minOccurs="0"/>
        <xsd:element name="intermodParams5g" type="intermodParams" minOccurs="0"/>
        <xsd:element ref="defaultChannels" minOccurs="0"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="neighborThresholds">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="wifiVictimMhz" type="xsd:int" minOccurs="0"/>
        <xsd:element name="cellVictimMhz" type="xsd:int" minOccurs="0"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:complexType name="harmonicParams">
    <xsd:sequence>
      <xsd:element name="N" type="xsd:int"/>
      <xsd:element name="overlap" type="xsd:int"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="intermodParams">
    <xsd:sequence>
      <xsd:element name="N" type="xsd:int"/>
      <xsd:element name="M" type="xsd:int"/>
      <xsd:element name="overlap" type="xsd:int"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:element name="defaultChannels">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="default2g" type="xsd:int" minOccurs="0"/>
        <xsd:element name="default5g" type="xsd:int" minOccurs="0"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <!-- Define algorithm override lists -->
  <xsd:element name="override">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="override2g" minOccurs="0"/>
        <xsd:element ref="override5g" minOccurs="0"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="override2g">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="category" type="overrideCategory2g" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element name="channel" type="xsd:int" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="override5g">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="category" type="overrideCategory5g" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element name="channel" type="xsd:int" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:simpleType name="overrideCategory2g">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="all"/>
    </xsd:restriction>
  </xsd:simpleType>

  <xsd:simpleType name="overrideCategory5g">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="all"/>
      <xsd:enumeration value="20Mhz"/>
      <xsd:enumeration value="40Mhz"/>
      <xsd:enumeration value="80Mhz"/>
      <xsd:enumeration value="160Mhz"/>
    </xsd:restriction>
  </xsd:simpleType>
</xsd:schema>

טבלת XML לדוגמה

זוהי דוגמה לטבלת חיפוש בפורמט XML:


<table>
  <!-- Entry using algorithm parameters -->
  <entry>
    <rat>LTE</rat>
    <band>40</band>
    <powerCapDbm>50</powerCapDbm>
    <params>
      <neighborThresholds>
        <wifiVictimMhz>25</wifiVictimMhz>
        <cellVictimMhz>40</cellVictimMhz>
      </neighborThresholds>

      <harmonicParams2g>
        <N>3</N>
        <overlap>50</overlap>
      </harmonicParams2g>

      <harmonicParams5g>
        <N>3</N>
        <overlap>50</overlap>
      </harmonicParams5g>

      <intermodParams2g>
        <N>-2</N>
        <M>1</M>
        <overlap>75</overlap>
      </intermodParams2g>

      <intermodParams5g>
        <N>-2</N>
        <M>1</M>
        <overlap>75</overlap>
      </intermodParams5g>

      <defaultChannels>
        <default2g>6</default2g>
        <default5g>36</default5g>
      </defaultChannels>
    </params>
  </entry>
  <!-- Entry using the override list -->
  <entry>
    <rat>LTE</rat>
    <band>41</band>
    <powerCapDbm>50</powerCapDbm>
    <override>
      <override2g>
        <channel>6</channel>
        <channel>11</channel>
        ...
      </override2g>
      <override5g>
        <category>40Mhz</category>
        <channel>34</channel>
        ...
      </override5g>
    </override>
  </entry>
</table>

שילוב תדרי רדיו

ב-Carrier Aggregation ‏ (CA), יכול להיות שהטווחים ההרמוניים או טווחי האינטרמודולציה של כל קישור עולה או יורד לא יחפפו מספיק כדי לגרום להפרעות באופן עצמאי, אבל יחפפו מספיק כשהם משולבים. האלגוריתם בודק כל טווח הרמוני או טווח של אפנון בין תדרים באופן עצמאי, ומחזיר את איחוד הערוצים הלא בטוחים. במקרה של אינטרמודולציה, המשמעות היא הערכה של טווח האינטרמודולציה של כל UL על כל DL.

האלגוריתם לא מבחין בין PCELL, ‏ PSCELL או SCELL, ומתייחס אליהם כאל ערכים שווים.

גישה מסייעת לרישיון

הגישה בסיוע רישיון (LAA) מזוהה כפס מספר 46. האלגוריתם מתייחס לפס הזה באופן דומה לפסים אחרים. במקרה כזה, אפשר להגדיר את כל הערוצים בתדר 5 GHz כרשימת החלפה בטבלת החיפוש.

בהתאם לדרישות של ספקי הסלולר, האלגוריתם למניעת הפרעות מגדיר הגבלות חובה על SoftAP ו-Wi-Fi ישיר ‏ (P2P) לכל תחום התדרים של 5GHz ב-Wi-Fi. כדי שהאלגוריתם יטפל בתרחיש השימוש הזה, צריך להגדיר את הערך restrict_5g_softap_wifi_direct_for_laa של carrier config. אם הערוץ של התא נמצא ב-LAA ו-restrict_5g_softap_wifi_direct_for_laa הוא true, האלגוריתם מחזיר את קבוצת הערוצים הלא בטוחים עם כל תחום התדרים של ‎5 GHz ומגדיר את דגלי ההגבלה המחייבים עבור SoftAP ו-Wi-Fi ישיר (P2P).

הודעה לשירות ה-Wi-Fi

אחרי שאלגוריתם הערוצים לדו-קיום מחשב את הערוצים הלא בטוחים, כדי לספק לאפליקציות המערכת את הערוצים הלא בטוחים וההגבלות שלהם, משתמשים במבנה הנתונים הבא של ‎ @SystemApi שמוגדר ב-Android Framework.

public final class CoexUnsafeChannel {
  public static final int POWER_CAP_NONE
  public @WifiAnnotations.WifiBandBasic int getBand();
  public int getChannel();
  // Returns the specified power cap in dBm, or POWER_CAP_NONE if not specified.
  public int getPowerCapDbm();
}

כדי לאפשר לאפליקציות לקבל ערכים מעודכנים כשערוצים לא בטוחים משתנים, משתמשים בשיטות ובקריאה החוזרת הבאות של WifiManager @SystemApi.

public static final int COEX_RESTRICTION_WIFI_DIRECT;
public static final int COEX_RESTRICTION_SOFTAP;
public static final int COEX_RESTRICTION_WIFI_AWARE;

// Register a CoexCallback to listen on onCoexUnsafeChannelsChanged callbacks. The callback will be called whenever the unsafe channels change, as well as immediately after registering to get the current values.
public void registerCoexCallback(Executor executor, CoexCallback callback);
public void unregisterCoexCallback(CoexCallback callback);

public abstract static class CoexCallback {
  //Gets called whenever getCoexUnsafeChannels()/getCoexRestrictions() have updated values
  public void onCoexUnsafeChannelsChanged(List<CoexUnsafeChannel> unsafeChannels,
      int restrictions);
}

ביצוע פעולה ב-Wi-Fi

כששירות ה-Wi-Fi מקבל מידע על קבוצת הערוצים הלא בטוחים, הוא מבצע את הפעולה המתאימה כדי להימנע מהערוצים האלה. בקטע הזה מתוארת ההתנהגות של שירות ה-Wi-Fi בתרחישים שונים.

הודעה לנהג

לנהג יש תפקיד מרכזי בביצוע הימנעות מערוצים, ולכן חשוב להעביר את הערוצים הלא בטוחים לנהג ולתוכנת הקושחה. כדי לעשות את זה, משתמשים ב-IWifiChip HAL API הבא.

ל-AIDL:

void setCoexUnsafeChannels(in CoexUnsafeChannel[] unsafeChannels,
    in int restrictions)

‫HIDL (גרסה 1.5 ואילך):

setCoexUnsafeChannels(vec<CoexUnsafeChannel> unsafeChannels,
  bitfield<IfaceType> restrictions);

SoftAP

SoftAP הוא תרחיש השימוש העיקרי להימנעות מערוצים לא בטוחים. בקטע הבא מפורטים תרחישי מפתח של SoftAp שבהם אפשר להשתמש ב-ACS כדי להימנע משימוש בערוצים מסוימים. בתרחישים מתואר אופן הפעולה של האלגוריתם למניעת הפרעות בערוץ ושל מנהל ההתקן או הקושחה.

הפעלת SoftAP עם ACS מופעל (עדיין לא הופעל SoftAP)

  1. אם הערוצים לא בטוחים ויש הגבלה על SoftAP:

    1. המסגרת מסירה ערוצים לא בטוחים מרשימת ה-ACS.
    2. אם הרשימה ריקה, המסגרת מפסיקה את SoftAP.
  2. אם הערוצים לא בטוחים ואין הגבלות:

    1. קובץ ה-driver או הקושחה של הספק נותנים עדיפות לערוצים הבטוחים על פני הערוצים הלא בטוחים.

ה-SoftAP פועל עם ACS מופעל והערוצים הלא בטוחים מעודכנים

  1. אם ערוץ SoftAP לא בטוח ויש הגבלה על SoftAP:

    1. ה-framework מעדכן את רשימת ה-ACS על ידי הסרת הערוצים הלא בטוחים.
    2. אם הרשימה ריקה, המסגרת סוגרת את SoftAP.
  2. אם ערוץ SoftAP לא בטוח ואין הגבלות:

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

‫Wi-Fi Direct (P2P)

  1. אם יש ערוצים לא בטוחים עם הגבלות על Wi-Fi ישיר (P2P):

    1. הבקשה של מסגרת העבודה wpa_supplicant היא להימנע מערוצים לא בטוחים באמצעות שיטת HAL‏ ISupplicantP2pIface::setDisallowedFrequencies().
  2. אם יש ערוצים לא בטוחים ללא הגבלות:

    1. מנהל ההתקן או הקושחה של הספק מחילים את מגבלת ההספק אם נעשה שימוש בערוץ לא בטוח ללא הגבלת Wi-Fi ישיר ‏ (P2P).

Wi-Fi Aware (NAN)

המסגרת לא מעורבת בבחירת הערוץ עבור Wi-Fi Aware ‏ (NAN) ולא מתבצעת פעולה במסגרת. התוכנה או הקושחה של הספק אחראיות להימנעות מערוץ Wi-Fi Aware ‏ (NAN).

השבתת האלגוריתם

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

public void setCoexUnsafeChannels(Set<CoexUnsafeChannel> coexUnsafeChannels,
  int coexRestrictions);

אימות ההטמעה

כדי לאמת את ההטמעה של התכונה למניעת חפיפה בין ערוצי Wi-Fi וערוצים סלולריים, אפשר להשתמש בבדיקות הבאות.

בדיקות CTS

  • WifiManagerTest.java
    • testCoexMethodsShouldFailNoPermission()
    • testListenOnCoexUnsafeChannels()

בדיקות ACTS

  • WifiManagerTest.py
    • test_set_get_coex_unsafe_channels()

בדיקות VTS

  • אם AIDL מיושם: wifi_chip_aidl_test.cpp
    • TEST_P(WifiChipAidlTest, SetCoexUnsafeChannels)
  • אם HIDL מיושם: wifi_chip_hidl_test.cpp
    • TEST_P(WifiChipHidlTest, setCoexUnsafeChannels)