הימנעות מערוצים של Wi-Fi/תקשורת סלולרית

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

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

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

רקע

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

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

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

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

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

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

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

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

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

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

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

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;hte

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

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

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

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

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

באופן כללי, התכונה 'הימנעות מערוצים' משתמשת בגישה של 'הסיכוי הטוב ביותר' כדי להימנע מערוצי Wi-Fi לא בטוחים, במטרה לבצע אופטימיזציה של הביצועים. אבל במקרים מסוימים (למשל, בגלל דרישות של ספקי סלולר), חובה בממשקים מסוימים להימנע מערוצים לא בטוחים עבור תדרי סלולר מסוימים. במקרים כאלה, הגבלות חובה מיוצגות כמסכת ביטים שמכילה ערכים שקובעים אם לאסור שימוש בערוצים מסוימים כמו Wi-Fi Direct ‏ (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)
  • 40mhz (ערוצי ‎5 GHz 40 MHz)
  • 80mhz (ערוצי 5 GHz‏ 80 MHz)
  • 160mhz (ערוצי 160 MHz‏ 5 GHz)

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

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

הפרעות בערוץ

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

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

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

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

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

  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, כל ערוץ גדול יותר שמכיל אותו (לדוגמה, 40M hz,‏ 80 Mhz) וכל ערוץ גבוה יותר באותו פס תדרים כמו הערוץ הלא בטוח.
  4. אם cellVictimMhz קיים ולערוץ הסלולרי יש קישור למטה.

    1. מבצע את שלב 3 באמצעות cellVictimMhz כסף ומשווה מול קישור downlink של התא במקום קישור uplink של התא.
  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 מגה-הרץ, 80 מגה-הרץ ו-160 מגה-הרץ

      1. חוזרים על שלב 3א, אבל עם 40 מגה-הרץ, 80 מגה-הרץ ו-160 מגה-הרץ.
      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 מסומן כערוץ לא בטוח, הערוץ הזה יוסר מהקבוצה.
  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>

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

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

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

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

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

בהתאם לדרישות של הספק, האלגוריתם למניעת הפרעות בערוץ מגדיר הגבלות חובה על SoftAP ו-Wi-Fi Direct ‏ (P2P) לכל תחום התדרים של Wi-Fi‏ 5 GHz. כדי שהאלגוריתם יטפל בתרחיש השימוש הזה, צריך להגדיר את הערך restrict_5g_softap_wifi_direct_for_laa של carrier config. אם הערוץ הסלולרי הוא LAA והערך של restrict_5g_softap_wifi_direct_for_laa הוא true, האלגוריתם מחזיר את קבוצת הערוצים הלא בטוחים עם כל תחום התדרים של ‎5 Ghz ומגדיר את דגלי ההגבלה הנדרשים עבור SoftAP ו-Wi-Fi Direct ‏ (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<CoexUnsafeChannels> unsafeChannels, int restrictions);
}

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

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

הודעה לנהג

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

ב-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. מנהל ההתקן או הקושחה של הספק נותנים עדיפות לערוצים בטוחים על פני ערוצים לא בטוחים.

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

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

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

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

‫Wi-Fi ישיר (P2P)

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

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

    1. הקושחה או מנהל ההתקן של הספק יחילו את מגבלת ההספק אם נעשה שימוש בערוץ לא בטוח ללא הגבלת Wi-Fi Direct ‏ (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)