התכונה 'הימנעות מערוצים של Wi-Fi/תקשורת סלולרית', שהוצגה ב-Android 12, מזהה ערוצים לא בטוחים של Wi-Fi ומונעת שימוש בהם במקרים שבהם עשויה להיות הפרעה מערוצים סלולריים או אליהם. זה כולל ממשקים כמו STA, SoftAp, Wi-Fi Direct (P2P), Wi-Fi Aware (NAN).
בדף הזה נסביר את הנושאים הבאים:
- מידע שעליו המודם הסלולרי צריך לדווח למסגרת Android
- אלגוריתמים שמסגרת ה-Wi-Fi משתמשת בהם כדי לחשב ערוצי Wi-Fi שיש להימנע מהם
- טבלאות תצורה שחייבים לספק יצרני המכשירים למסגרת ה-Wi-Fi
- ממשקי API של מערכת, הגדרות וממשקי API של HAL שקשורים לתכונה של הימנעות מהפעלת ערוצים
- התנהגות מסגרת לטיפול בהימנעות מערוצים
- ההתנהגות של ספקי הצ'יפים לטיפול במצבים שבהם משתמשים מנסים להימנע מערוצים
- פרטי ההטמעה של הימנעות מערוצים
- בדיקות לאימות התנהגות של הימנעות מערוץ
רקע
במכשירים עם טכנולוגיות סלולריות כמו LTE, 5G NR ו'גישה בסיוע ברישיון (LAA), הערוצים הסלולריים בשימוש עלולים להפריע לערוץ ה-Wi-Fi בשימוש. המצב הזה מתרחש כשהערוצים הסלולריים וה-Wi-Fi נמצאים במרחק קצר זה מזה בתדר (ערוצים סמוכים) או כשיש הפרעות הרמוניות והפרעות של אינטרמודולציה.
הפרעה מסוג זה הופכת לבעיה כשאנטנה אחת משדרת ואנטנה אחרת מקבלת בו-זמנית. במקרה כזה, אנטנת השידור משבשת את אנטנת הקליטה, ופוגעת באיכות הקליטה שלה.
במסמך הזה מתייחסים למשדר שמפריע בתור הגורם לתוקפן, והנמען חווה את ההפרעה בתור הקורבן. ערוץ ה-Wi-Fi שמוגדר כאתגר או כקורבן נקרא ערוץ לא בטוח.
התכונה 'הימנעות מערוצים של Wi-Fi/תקשורת סלולרית' מספקת גישה עקבית להימנעות מערוצים, ומפחיתה את הצורך בקוד קנייני שחורג מהמסגרת של Wi-Fi. בנוסף, התכונה מאפשרת ליצרני המכשירים להגדיר, להפעיל, להשבית ולעקוף את התכונה.
התכונה מבצעת הימנעות מערוצים על ידי שליטה בערוצי ה-Wi-Fi. אפשר לתאר את תוכנית הימנעות מערוצי Wi-Fi כסדרה של ארבעה שלבים מופשטים:
- המודם מדווח על שינוי בתדר הסלולרי
- האלגוריתם למניעת Coex מחשב את ערוצי ה-Wi-Fi הלא בטוחים
- אלגוריתם הימנעות מקונפליקט של שימוש בו-זמני (Coex) מודיע לשירות ה-Wi-Fi
- המסגרת או מנהל ההתקן מבצעים פעולת 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;hte
/** Uplink cell bandwidth, in kHz */
int32_t cellBandwidthUplink;
}
חישוב ערוצי Wi-Fi לא בטוחים
כשהמודם מדווח על שינוי בתדר הסלולר, האלגוריתם של ערוץ הקו-קשיונציה מחשב את ההפרעה בין הערוצים הסלולריים לבין הערוצים של ה-Wi-Fi, ומחליט איזו קבוצה של ערוצי Wi-Fi לא בטוחה.
יש כמה סוגים של הפרעות שדורשים נוסחאות שונות: שכנות והרמוניות/אינטרמודולציה. בגלל ההבדלים הפיזיים באנטנה ובפריסה בין המכשירים, בכל מכשיר יש דפוסים שונים של הפרעות קשורות, הרמוניות/מודולריות. כדי להביא זאת בחשבון, יצרני המכשירים צריכים לספק טבלת חיפוש כדי לחבר את הפרמטרים לנוסחאות כלליות לשני סוגי ההפרעות. הפרמטרים האלה מוגדרים לכל תדר של תא, והתדרים של ערוצי התאים הפעילים מפנים אליהם.
אפשר להגדיר מכסת הספק מקסימלית בטבלת החיפוש. אם מוגדר מגבלה מקסימלית של הספק, הערוץ הלא בטוח משדר במגבלת הספק שצוינה. אם אין מגבלה על הספק, הערוץ משדר במלוא הספק.
באופן כללי, התכונה 'הימנעות מערוצים' פועלת לפי הגישה של 'מאמצים רבים' כדי להימנע מערוצי Wi-Fi לא בטוחים, וכך לבצע אופטימיזציה של הביצועים. אבל במקרים מסוימים (למשל, בגלל הדרישות של הספק), בממשקים מסוימים חובה להימנע מערוצים לא בטוחים עבור תדרי רדיו מסוימים. במקרים כאלה, הגבלות חובה מיוצגות כמסכת ביט (bitmask) שמכילה ערכים שמציינים אם יש לאסור ערוצים מסוימים, כמו Wi-Fi Direct (P2P), SoftAp ו-Wi-Fi Aware (NAN). כשמדובר בערוץ לא בטוח, ההמלצה היא לא להשתמש בערוץ הזה בכל תרחישי לדוגמה. לעומת זאת, כשמדובר בהגבלות חובה, אסור להשתמש בערוץ הזה בתרחישי לדוגמה ספציפיים.
אם כל הערוצים של תדר 2.4GHz או 5GHz מסומנים כבלתי בטוחים, טבלת החיפוש יכולה להגדיר ערוץ ברירת מחדל של 2.4GHz או ערוץ ברירת מחדל של 5GHz לכל תדר נייד שמפריע, כבחירה הבטוחה ביותר. ערוצי ברירת המחדל האלה לא ידווחו כערוצים לא בטוחים כששאר התדרים ידווחו כלא בטוחים.
רשימת שינויים
גישה נוסחאות מוגבלת במקרים שבהם ההפרעה תלויה במידה רבה ברוחב הפס (וכתוצאה מכך, ערוצים עם רוחב פס גדול יותר עשויים להיות לא בטוחים, אבל לא ערוצים עם רוחב פס קטן יותר). במקרים מסוימים, כמו LAA, מומלץ לדלג על החישובים ולהשתמש ברשימת ערוצים מסוימת של ערוצים לא בטוחים.
כדי לעשות זאת, אפשר לציין רשימת שינוי של ערוצים לא בטוחים בטבלת החיפוש של רשומות מסוימות. רשימת שינויי ברירת המחדל ברשומה בטבלה מציינת שהחישוב של ערוץ התא הספציפי הזה מושמט, ושערוצי ה-Wi-Fi הלא בטוחים של ערוץ התא התואם מצוינים ברשימת שינויי ברירת המחדל.
במקרים שבהם יש חשיבות רבה לרוחב הפס, אפשר להימנע באופן סלקטיבי מרוחב פס מסוים על ידי ציון ערוצים מסוימים עם רוחב פס מסוים ברשימת ההחרגות. הסיבה לכך היא שכל מספר ערוץ Wi-Fi תואם לרוחב פס מסוים.
רשימת ההחרגות מיוצגת על ידי רשימה של מספרי ערוצים או מילות מפתח מוגדרות מראש של קטגוריות לכל תחום תדר של Wi-Fi:
קטגוריות 2g:
all
(כל תדר 2.4GHz)
קטגוריות 5G:
all
(כל תדר 5 GHz)20mhz
(ערוצים של 20 MHz ב-5 GHz)40mhz
(ערוצים של 40 MHz ב-5 GHz)80mhz
(ערוצים של 80 MHz ב-5 GHz)160mhz
(ערוצים של 160 MHz ב-5 GHz)
הפרעה מערוץ סמוך
כדי לזהות הפרעות בערוץ סמוך, אלגוריתם המניעה השכנה מוודא שהמרחק ΔF בין ערוץ התוקץ לבין ערוץ הקורבן לא עובר מתחת לסף שצוין.
איור 2. המרחק בין תוקף לערוץ של הקורבן
הסף נקבע לפי התצורה הפיזית של המכשיר וערך הסף שצוין ברשומה בטבלת המיפוי לכל תדר שמפריע. לטבלה אין רשומה של תדרים שנחשבים לא מפריעים, ואין צורך לחשב ערוצים לא בטוחים (ברוב המקרים).
פרמטרים קרובים של הפרעה
wifiVictimMhz
: ערך הסף למרחק ב-MHz של קורבן Wi-Fi (קישור uplink לתא)cellVictimMhz
: ערך הסף למרחק ב-MHz של קורבן תא (קישור ירידה של תא)
האלגוריתם פועל באופן הבא עבור כל ערוץ תא פעיל:
- עבור התדר של הערוץ, ינסה למצוא ערך בטבלת חיפוש. אם לא נמצאת רשומה בטבלה, תוחזר ללא ערוצים לא בטוחים לערוץ התא הזה.
- על סמך תדר הרדיו הסלולרי, המערכת מזהה איזה תדר Wi-Fi נמצא בסיכון ומאיפה מגיעות ההפרעות (לדוגמה, ערוצים נמוכים יותר של 2.4GHz, ערוצים גבוהים יותר של 2.4GHz, ערוצים נמוכים יותר של 5GHz).
אם השדה
wifiVictimMhz
קיים וערוץ התא כולל קישור נתונים חזרה (uplink) ו-אם החלק התחתון של תדר ה-Wi-Fi נמצא בסיכון
- מוצאת את הגבול העליון של ערוצים לא בטוחים על ידי הוספת הערך
wifiVictimMhz
לתדירות הגבוהה ביותר של קישור התא. - חיפוש ערוץ ה-Wi-Fi הראשון של 20 MHz שקצהו התחתון חופף למגבלה.
- הסימון כולל את ערוץ ה-Wi-Fi, כל ערוץ עם רוחב פס גדול יותר שמכיל אותו (לדוגמה, 40 Mhz, 80 Mhz) וכל ערוץ עם רוחב פס נמוך יותר באותו פס כמו הערוץ הלא בטוח.
- מוצאת את הגבול העליון של ערוצים לא בטוחים על ידי הוספת הערך
אם החלק העליון של תדר ה-Wi-Fi נמצא בסיכון
- מוצא את הגבול התחתון של ערוצים לא בטוחים על ידי חיסור wifiVictimMhz לתדר הנמוך ביותר של קישור התא.
- מוצא את ערוץ ה-Wi-Fi הראשון שהקצה העליון שלו חופף למגבלה.
- מסמנים את ערוץ ה-Wi-Fi, כל ערוץ גדול יותר שמכיל אותו (לדוגמה, 40M hz, 80 Mhz) וכל ערוץ גבוה יותר באותו פס כמו הערוץ הלא בטוח.
אם השדה
cellVictimMhz
קיים וערוץ התא כולל קישור ירידה.- ביצוע שלב 3 באמצעות
cellVictimMhz
כסף ומשוואה לנתונים של ירידה (downlink) בתא במקום לנתונים של עלייה (uplink) בתא.
- ביצוע שלב 3 באמצעות
מחילים את מגבלת ההספק של הרשומה בטבלה על הערוצים הלא בטוחים שחושבו.
איור 3. חישוב ערוץ לא בטוח בגלל הפרעה מערוץ סמוך
עיוות הרמוני או עיוות של אינטרמודולציה
במקרה של עיוות הרמוני או עיוות של אינטרמודולציה, מנוע ה-Coex מחשב את הטווח של האות ההרמוני או האות של אינטרמודולציה, ומעריך את אחוז החפיפה שלו לערוץ קורבן פוטנציאלי. אם החפיפה חורגת מסף החפיפה, המערכת מתייחסת למצב כזה כמצב לא בטוח. כדי לחשב את אחוז החפיפה של העיוות ההרמוני או של האינטרפולציה בערוץ הקורבן, מבצעים את החישוב של המשוואה הבאה:
במקרה של עיוות הרמוני, האלגוריתם מתייחס לעיוות ההרמוני של ערוץ קישור תא שמהווה קורבן לערוצי Wi-Fi. לאחר מכן, מתבצעת החלפה של ערכי העיוות הגבוה והעיוות הנמוך בערכי הרמוניה על סמך תדרי ה-uplink של התא ודרגת הרמוניה N.
איור 4. חישוב ערוץ לא בטוח עבור עיוות הרמוני
במקרה של אינטרמודולציה, האלגוריתם מתייחס לעיוות האינטרמודולציה של ה-uplink הסלולרי וערוץ ה-Wi-Fi שפוגע בערוץ ה-downlink הסלולרי. לאחר מכן, מתבצעת החלפה של ערכי העיוות הגבוה והעיוות הנמוך בערכי המשראות המצטברים על סמך תדרי ה-uplink של התא, תדרי ה-Wi-Fi ושני מקורי המשראות המצטברים, $ M $ ו-$ N $.
איור 5. חישוב ערוץ לא בטוח לעיוות אינטרפולציה
אפשר לציין את הערכים של $ M $, $ N $ ושל חפיפה בטבלת החיפוש לכל פס תא שמפריע. אם אין הפרעה בתחום תדר מסוים, הערכים לא מופיעים בטבלה של אותו תחום תדר. אפשר להגדיר שתי קבוצות של ערכים כאלה עבור תדרי ה-Wi-Fi של 2.4GHz ו-5GHz בנפרד.
בדומה לאלגוריתם ההפרעה הקרוב, האלגוריתם עושה שימוש חוזר באותו ערך של מכסת כוח שמוגדר לכל תדר של התא.
האלגוריתם פועל באופן הבא עבור כל ערוץ תא פעיל:
- עבור התדר של ערוץ התא, הוא ינסה למצוא רשומה בטבלת החיפוש. אם לא נמצאת רשומה בטבלה, הפונקציה מחזירה הודעה על כך שאין ערוצים לא בטוחים עבור הערוץ הזה.
אם מוגדרים פרמטרים, הפונקציה מאתרת את הערוצים הלא בטוחים של 2.4 GHz מהתדרים הנוספים.
- חישוב הדרגה ההרמונית N עבור 2.4 GHz.
- חישוב התדר ההרמוני הגבוה והתדר ההרמוני הנמוך על סמך N והקישור האלחוטי הפסיבי (uplink) של התא.
- מוצא את ערוץ ה-Wi-Fi הראשון בנפח 20MHz שנמצא בגבול התחתון של ההרמוניה שמגיעה למטה.
- חישוב החפיפה של התדר האופקי בערוץ ה-Wi-Fi, וסימון הערוץ כבלתי בטוח אם החפיפה חורגת מסף החפיפה של Wi-Fi בתדר 2.4GHz.
- חיפוש ערוץ ה-Wi-Fi הראשון של 20 MHz שנמצא בגבול העליון של התדר ההרמוני שמגיע מלמעלה.
- חישוב החפיפה של התדר האופקי בערוץ ה-Wi-Fi, וסימון הערוץ כבלתי בטוח אם החפיפה חורגת מסף החפיפה של Wi-Fi בתדר 2.4GHz.
- כל ערוץ של 20 MHz בטווח הזה מסומן כערוץ לא בטוח.
אם מוגדרים פרמטרים, הפונקציה מאתרת את הערוצים הלא בטוחים בתדר 5GHz מהתדרים הנוספים.
- חישוב הדרגה ההרמונית N עבור 5GHz. אם N הוא 0, מדלגים לשלב 5.
- חישוב התדר ההרמוני הגבוה והתדר ההרמוני הנמוך על סמך N והקישור האלחוטי הפסיבי (uplink) של התא.
חיפוש ערוצים לא בטוחים של 20 MHz.
- מאתר את ערוץ ה-Wi-Fi הראשון של 20 MHz שנמצא בגבול התחתון של התדר ההרמוני שמגיע מלמטה.
- מחשבת את החפיפה של התדר האופקי בערוץ ה-Wi-Fi ומסמנת את הערוץ כלא בטוח אם החפיפה חורגת מסף החפיפה של Wi-Fi ב-2.4GHz.
- הפונקציה מאתרת את ערוץ ה-Wi-Fi הראשון של 20 MHz שנמצא בגבול העליון של התדר ההרמוני שמגיע מלמעלה.
- מחשבת את החפיפה של התדר האופקי בערוץ ה-Wi-Fi ומסמנת את הערוץ כלא בטוח אם החפיפה חורגת מסף החפיפה של Wi-Fi ב-2.4GHz.
- כל ערוץ 20MHz באמצע מסומן כערוץ לא בטוח עם מגבלת ההספק שצוינה.
חיפוש ערוצים לא בטוחים של 40MHz, 80MHz ו-160MHz
- חוזרת על שלב 3א אבל ב-40MHz, 80MHz, 160MHz.
- במקום לחשב את החפיפה של הערוצים בקצה ההרמוני, המערכת משתמשת שוב בחפיפות המחושבות מהערוצים הקטנים יותר שמרכיבים אותו (לדוגמה, אם שני ערוצים של 20 Mhz יוצרים ערוץ של 40 Mhz ויש להם חפיפה של 30% ו-90%, החפיפה הממוצעת בערוץ של 40 Mhz היא 60%).
אם מוגדרים פרמטרים, השירות מאתר את הערוצים הלא בטוחים של 2.4GHz מאיחוד תדרים.
- חיפוש המקדמים של הממולדות ההדדית N ו-M בתדר 2.4GHz.
לכל ערוץ Wi-Fi של 2.4 GHz:
- הפונקציה מחשבת את התדר הנמוך והתדר הגבוה של המערבולת על סמך N, M, קישור uplink של תא וערוץ Wi-Fi.
- מחשבת את החפיפה של המודולציה ההדדית במהלך הקישור התחתון של התא, ומסמן את הערוץ כלא בטוח אם החפיפה חורגת מסף החפיפה של תאים 2.4 GHz.
אם מוגדרים פרמטרים, הפונקציה מאתרת את הערוצים הלא בטוחים של 5GHz כתוצאה מאינטרמודולציה.
- חוזרים על שלב 4 באמצעות ערוצי ה-Wi-Fi של 5GHz וסף החפיפה של תאים ב-5GHz.
מחילים את מגבלת ההספק של הרשומה בטבלה על הערוצים הלא בטוחים שחושבו.
התוצאה הסופית
אחרי שמחשבים את שתי הקבוצות של הערוצים הלא בטוחים מהפרעות שכנות והרמוניות, המערכת מחשבת את הקבוצה הסופית על ידי איחוד שתי הקבוצות (ובחירת מגבלת ההספק הנמוכה יותר אם יש התנגשויות), והסרת הערוצים שמוגדרים כברירת מחדל מהקבוצה אם לא חלות הגבלות חובה.
האלגוריתם פועל באופן הבא:
- אם כל ערוץ Wi-Fi בתחום תדרים של 2.4GHz מסומן כערוץ לא בטוח, המערכת מסירה מהקבוצה את ערוץ ה-Wi-Fi בתחום תדרים של 2.4GHz שמוגדר כברירת מחדל.
- אם כל ערוץ Wi-Fi של 5GHz מסומן כערוץ לא בטוח, מערכת ההפעלה מסירה מהקבוצה את ערוץ ה-Wi-Fi של 5GHz שמוגדר כברירת מחדל.
- מחזירה את הקבוצה הסופית של ערוצים לא בטוחים.
פורמט של טבלת חיפוש
טבלאות החיפוש מיוצגות בקובץ 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 5GHz. כדי שהאלגוריתם יטפל בתרחיש לדוגמה הזה, צריך להגדיר את הערך restrict_5g_softap_wifi_direct_for_laa
של carrierconfig. אם ערוץ התא הוא ב-LAA ו-restrict_5g_softap_wifi_direct_for_laa
הוא true
, האלגוריתם מחזיר את קבוצת הערוצים הלא בטוחים עם כל תחום התדרים של 5GHz ומגדיר את דגלי ההגבלה החובה ל-SoftAP ול-Wi-Fi Direct (P2P).
שירות Wi-Fi מידע
אחרי שהאלגוריתם של ערוץ Coex חישב את הערוצים הלא בטוחים, כדי לספק לאפליקציות המערכת את הערוצים הלא בטוחים ואת ההגבלות שלהם, צריך להשתמש במבנה הנתונים @SystemApi הבא שמוגדר ב-framework של Android.
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 ובקריאה החוזרת (callback).
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 בתרחישים שונים.
הודעה לנהג/ת
לנהג יש תפקיד חשוב בביצוע הימנעות מהשימוש בערוצים, ולכן חיוני להעביר את הערוצים הלא בטוחים לנהג ולקושחה. כדי לעשות את זה צריך להשתמש ב-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 פעיל)
אם הערוצים לא בטוחים ויש הגבלה על SoftAP
- תוכנת ה-framework מסירה ערוצים לא בטוחים מרשימת ה-ACS.
- אם הרשימה ריקה, ה-framework מפסיק את SoftAP.
אם הערוצים לא בטוחים ואין הגבלות
- העדיפות של מנהל ההתקן או הקושחה של הספק היא לערוצים הבטוחים על פני הערוצים הלא בטוחים.
SoftAP פועל עם ACS מופעל וערוצים לא בטוחים מתעדכנים
אם ערוץ ה-SoftAP לא בטוח ויש הגבלה על SoftAP
- המערכת מעדכנת את רשימת ה-ACS על ידי הסרת הערוצים הלא בטוחים.
- אם הרשימה ריקה, המסגרת סוגרת את SoftAP.
אם ערוץ SoftAP לא בטוח ואין הגבלות
- לא ננקטת פעולה על ידי המסגרת. מנהל ההתקן או הקושחה של הספק מטפלים בהימנעות מהערוצים הלא בטוחים או בהפעלת מגבלת ההספק אם אי אפשר להימנע מהם.
Wi-Fi Direct (P2P)
אם יש ערוצים לא בטוחים עם הגבלות על Wi-Fi ישיר (P2P).
- ה-framework מבקש
wpa_supplicant
כדי להימנע מערוצים לא בטוחים באמצעות שיטת HALISupplicantP2pIface::setDisallowedFrequencies()
.
- ה-framework מבקש
אם יש ערוצים לא בטוחים ללא הגבלות.
- מנהל התקן או הקושחה של הספק מחילים את מכסת החשמל אם משתמשים בערוץ לא בטוח ללא הגבלת 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)