התכונה 'הימנעות מערוצים של 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 ו-Licensed Assisted Access (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 לא בטוחים
כשהמודם מדווח על שינוי בתדר הסלולר, האלגוריתם של ערוץ ה-Coex מחשב את ההפרעה בין ערוצי הסלולר לבין ערוצי ה-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
(כל תחום התדרים של 5GHz)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
לתדר הגבוה ביותר של ה-uplink הסלולרי. - חיפוש ערוץ ה-Wi-Fi הראשון של 20 MHz שקצהו התחתון חופף למגבלה.
- הסימון כולל את ערוץ ה-Wi-Fi, כל ערוץ עם רוחב פס גדול יותר שמכיל אותו (לדוגמה, 40 Mhz, 80 Mhz) וכל ערוץ עם רוחב פס נמוך יותר באותו פס כמו הערוץ הלא בטוח.
- חיפוש של המגבלה העליונה של ערוצים לא בטוחים על ידי הוספת
אם החלק העליון של תדר ה-Wi-Fi נמצא בסיכון
- הפונקציה מחשבת את המגבלה התחתונה של הערוצים הלא בטוחים על ידי חיסור הערך של wifiVictimMhz בתדר הנמוך ביותר של ה-uplink הסלולרי.
- הפונקציה מאתרת את ערוץ ה-Wi-Fi הראשון שקצהו העליון חופף למגבלה.
- מסמנים את ערוץ ה-Wi-Fi, כל ערוץ גדול יותר שמכיל אותו (לדוגמה, 40M hz, 80 Mhz) וכל ערוץ גבוה יותר באותו פס כמו הערוץ הלא בטוח.
אם השדה
cellVictimMhz
קיים ויש לערוץ התא קישור ירידה.- ביצוע שלב 3 באמצעות
cellVictimMhz
כסף ומשוואה לנתונים של ירידה (downlink) בתא במקום לנתונים של עלייה (uplink) בתא.
- ביצוע שלב 3 באמצעות
מחילה את מגבלת ההספק של הרשומה בטבלה על הערוצים הלא בטוחים שחושבו.
איור 3. חישוב ערוץ לא בטוח בגלל הפרעה מערוץ סמוך
עיוות הרמוני או עיוות של אינטרמודולציה
במקרה של עיוות הרמוני או עיוות של אינטרמודולציה, מנוע ה-Coex מחשב את הטווח של האות ההרמוני או האות של אינטרמודולציה, ומעריך את אחוז החפיפה שלו לערוץ קורבן פוטנציאלי. אם החפיפה חורגת מסף החפיפה, המערכת מתייחסת למצב כזה כמצב לא בטוח. החישוב של אחוז החפיפה של העיוות ההרמוני או העיוות של המשראות ההדדיים בערוץ הקורבן מתבצע באמצעות המשוואה הבאה:
במקרה של עיוות הרמוני, האלגוריתם מתייחס לעיוות ההרמוני של ערוץ uplink של תא שמזיק לערוצי 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 והקישור האלחוטי העליון של התא.
- הפונקציה מאתרת את ערוץ ה-Wi-Fi הראשון של 20 MHz שנמצא בתוך הגבול התחתון של התדר ההרמוני שמגיע מלמטה.
- חישוב החפיפה של התדר האופקי בערוץ ה-Wi-Fi, וסימון הערוץ כבלתי בטוח אם החפיפה חורגת מסף החפיפה של Wi-Fi בתדר 2.4GHz.
- הפונקציה מאתרת את ערוץ ה-Wi-Fi הראשון של 20 MHz שנמצא בגבול העליון של התדר ההרמוני שמגיע מלמעלה.
- חישוב החפיפה של התדר האופקי בערוץ ה-Wi-Fi, וסימון הערוץ כבלתי בטוח אם החפיפה חורגת מסף החפיפה של Wi-Fi בתדר 2.4GHz.
- כל ערוץ של 20 MHz בטווח הזה מסומן כערוץ לא בטוח.
אם מוגדרים פרמטרים, הפונקציה מאתרת את הערוצים הלא בטוחים בתדר 5GHz מהתדרים הנוספים.
- חישוב הדרגה ההרמונית N עבור 5 GHz. אם N הוא 0, מדלגים לשלב 5.
- חישוב התדר ההרמוני הגבוה והתדר ההרמוני הנמוך על סמך N והקישור האלחוטי העליון של התא.
חיפוש ערוצים לא בטוחים של 20 MHz.
- מאתר את ערוץ ה-Wi-Fi הראשון של 20 MHz שנמצא בגבול התחתון של התדר ההרמוני שמגיע מלמטה.
- מחשבת את החפיפה של התדר העל-תדרי לערוץ ה-Wi-Fi ומסמנת את הערוץ כלא בטוח אם החפיפה חורגת מסף החפיפה של Wi-Fi ב-2.4 GHz.
- הפונקציה מאתרת את ערוץ ה-Wi-Fi הראשון של 20 MHz שנמצא בגבול העליון של התדר ההרמוני שמגיע מלמעלה.
- מחשבת את החפיפה של התדר העל-תדרי לערוץ ה-Wi-Fi ומסמנת את הערוץ כלא בטוח אם החפיפה חורגת מסף החפיפה של Wi-Fi ב-2.4 GHz.
- כל ערוץ של 20MHz באמצע מסומן כערוץ לא בטוח עם מגבלת ההספק שצוינה.
חיפוש ערוצים לא בטוחים של 40 MHz, 80 MHz ו-160 MHz
- חוזרים על שלב 3א', אבל עם 40 MHz, 80 MHz, 160 MHz.
- במקום לחשב את החפיפה של הערוצים בקצה ההרמוני, המערכת משתמשת שוב בחפיפות המחושבות מהערוצים הקטנים יותר שמרכיבים אותו (לדוגמה, אם שני ערוצים של 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.4GHz.
אם מוגדרים פרמטרים, הפונקציה מאתרת את הערוצים הלא בטוחים של 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 שמוגדר במסגרת 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 בתרחישים שונים.
להודיע לנהג/ת
לנהג יש תפקיד חשוב בביצוע הימנעות מהשימוש בערוצים, ולכן חיוני להעביר את הערוצים הלא בטוחים לנהג ולקושחה. לשם כך, משתמשים ב-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 פעיל)
אם הערוצים לא בטוחים ויש הגבלה על SoftAP
- המסגרת מסירה ערוצים לא בטוחים מרשימת ה-ACS.
- אם הרשימה ריקה, המסגרת מפסיקה את SoftAP.
אם הערוצים לא בטוחים ואין הגבלות
- העדיפות של מנהל ההתקן או הקושחה של הספק היא לערוצים הבטוחים על פני הערוצים הלא בטוחים.
SoftAP פועל עם ACS מופעל וערוצים לא בטוחים מתעדכנים
אם ערוץ ה-SoftAP לא בטוח ויש הגבלה על SoftAP
- המערכת מעדכנת את רשימת ה-ACS על ידי הסרת הערוצים הלא בטוחים.
- אם הרשימה ריקה, המסגרת סוגרת את SoftAP.
אם ערוץ ה-SoftAP לא בטוח ואין הגבלות
- לא ננקטת פעולה על ידי המסגרת. מנהל ההתקן או הקושחה של הספק מטפלים בהימנעות מהערוצים הלא בטוחים או בהפעלת מגבלת ההספק אם אי אפשר להימנע מהם.
Wi-Fi Direct (P2P)
אם יש ערוצים לא בטוחים עם הגבלות על Wi-Fi Direct (P2P).
- המסגרת מבקשת מ-
wpa_supplicant
להימנע מהערוצים הלא בטוחים באמצעות שיטת HALISupplicantP2pIface::setDisallowedFrequencies()
.
- המסגרת מבקשת מ-
אם יש ערוצים לא בטוחים ללא הגבלות.
- מנהל ההתקן או הקושחה של הספק מחילים את מגבלת ההספק אם נעשה שימוש בערוץ לא בטוח ללא הגבלה של 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)