Wi-Fi STA/STA בו-זמנית

ב-Android 12 יש תמיכה ב-Wi-Fi STA/STA בו-זמניות, שמאפשרת למכשירים להתחבר לשתי רשתות Wi-Fi בו-זמנית. התכונה האופציונלית הזו מפעילה את הפונקציות הבאות.

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

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

הטמעה

כדי להטמיע STA/STA ב-Wi-Fi, מכשירים צריכים לתמוך במכשירים הבאים בו-זמניות (concurrency):

  • הקושחה או שבב ה-Wi-Fi חייבים לתמוך בשני פרוטוקולים של STA בו-זמנית בחיבורים. הקושחה חייבת לתמוך בכל השילובים של הערוצים והתדרים לשני החיבורים. כדי להימנע מבעיות בביצועים, מומלץ להשתמש שבב Wi-Fi עם יכולות DBS בגודל 2x2+2x2.

  • המכשיר חייב לתמוך בממשקי ה-API הבאים ב-AIDL או HIDL של IWifiChip.

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • שילוב של ממשק HAL Wi-Fi חייב לכלול שני ממשקי STA בו-זמנית נחשפו באמצעות פורמט של מפרט כמו [{STA} <= 2, ...]. עבור מידע נוסף: ריבוי ממשקים של Wi-Fi בו-זמנית.

אם הדרישות המוקדמות האלה מתקיימות, מטמיעים את ה-Wi-Fi STA/STA בו-זמניות הבאים:

  1. הפעלת פונקציה אחת או יותר בנפרד באמצעות שכבות-על של משאבי זמן ריצה (מושבתות על ידי: כברירת מחדל).

    • לעשות לפני ההפסקה: config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • חיבור מקומי וחיבור לאינטרנט בו-זמנית: config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • חיבור מוגבל לאינטרנט וחיבור לאינטרנט בו-זמנית: config_wifiMultiStaRestrictedConcurrencyEnabled
    • מספר רשתות בו-זמנית עם חיבור לאינטרנט: config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. לאמת כל הטמעה כפי שמתואר בקטעים המתאימים.

כדי לתמוך טוב יותר ב-Wi-Fi STA/STA בו-זמניות, מומלץ להתאים אישית את ה-OEM (יצרן הציוד המקורי). frameworks ואפליקציות משתמשות בשיטה NetworkCallback#onCapabilitiesChanged() במקום WifiManager#getConnectionInfo(), המחזיר רק WifiInfo עבור רשת אחת והיא הוצאה משימוש ב-Android 12. עבור מידע נוסף: Wi-Fi Network Request API לקישוריות מקצה לקצה (P2P).

לעשות לפני ההפסקה

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

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

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

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

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

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

אפליקציות יכולות לבדוק אם התרחיש לדוגמה הזה נתמך במכשיר באמצעות API של WifiManager#isMakeBeforeBreakWifiSwitchingSupported().

אימות התשלום לפני ההפסקה

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

adb shell wpa_cli -i wlan0 status ; echo ; adb shell wpa_cli -i wlan1 status

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

חיבור מקומי וחיבור לאינטרנט בו-זמנית

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

ב-Android מגרסה 11 ומטה, המכשירים מתנתקים מ- לרשת ה-Wi-Fi הראשית בזמן החיבור למכשיר IoT, וכתוצאה מכך אובדן של קישוריות לאינטרנט (אלא אם למכשיר יש סוג תחבורה זמין אחר, כמו חבילת גלישה).

אפליקציות יכולות לבדוק אם הפונקציה הזו נתמכת במכשיר באמצעות API של WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported().

לקבלת מידע נוסף על שינויים בהגדרות המקומיות בלבד ובאינטרנט בו-זמנית את פונקציית החיבור ב-Android 12: Wi-Fi Network Request API לקישוריות מקצה לקצה (P2P).

אימות החיבור לאינטרנט וחיבור מקומי בלבד

כדי לאמת את הפונקציה הזו, משתמשים בדיקת CTS של MultiStaConcurrencyWifiNetworkSpecifierTest.

חיבור לאינטרנט והגבלה בו-זמנית

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

אפליקציות יכולות לבדוק אם הפונקציה הזו נתמכת במכשיר באמצעות API של WifiManager#isStaConcurrencyForRestrictedConnectionsSupported().

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

  1. הוסף הצעות לרשת Wi-Fi עם setOemPaid או setOemPrivate מוגדר כ-true.

  2. ב-ConnectivityManager, צריך להגיש NetworkRequest עם יכולות:

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

אימות החיבור לאינטרנט והגבלה בו-זמנית

כדי לאמת את הפונקציה הזו, משתמשים בדיקת CTS של MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest.

מספר רשתות עם חיבור לאינטרנט בו-זמנית

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

אפליקציות יכולות לבדוק אם התכונה הזו נתמכת במכשיר באמצעות WifiManager#isStaConcurrencyForMultiInternetSupported() .

אם התכונה נתמכת, אפליקציות שיש להן הרשאות יכולות להפעיל אותה באמצעות אמצעי תשלום אחד (WifiManager#setStaConcurrencyForMultiInternetMode(int mode)). כולל את המצבים הבאים:

כדי לשלוח שאילתה על מצב התכונה שפעילה כרגע, אפשר להשתמש WifiManager#getStaConcurrencyForMultiInternetMode() .

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

  1. יצירת מציין של רשת Wi-Fi באמצעות WifiNetworkSpecifier.Builder בחירת רצועה למציין באמצעות setBand() . אל תציינו את ה-SSID או BSSID כרשת הנוספת של התדר שצוין נבחר על ידי מסגרת ה-Wi-Fi.

  2. באמצעות ConnectivityManager ליצור NetworkRequest עם NET_CAPABILITY_INTERNET ליכולות של בינה מלאכותית גנרטיבית.

  3. הוספת המציין לבקשת הרשת יחד עם NetworkCallback לעקוב אחרי הסטטוס של הבקשה, ולשלוח את הבקשה ConnectivityManager אם רשת שמורה עם התדר המבוקש היא בתוצאת הסריקה, והחיבור לרשת מוצלח, NetworkCallback.onAvailable() מופעל באובייקט ה-callback.

אימות של כמה רשתות בו-זמנית עם חיבור לאינטרנט

כדי לאמת את הפונקציה הזו, צריך להשתמש בבדיקת CTS הבאה:

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

הנחיות של ספק לגבי צ'יפים של Wi-Fi

עבור ספקי שבבי Wi-Fi, יש לפעול לפי ההנחיות הבאות כדי לקבל תמיכה Wi-Fi STA/STA בו-זמנית.

שבב ה-Wi-Fi חייב לתמוך בשני חיבורי STA בו-זמנית. כלומר, תומך בתכונות הבאות:

  • לכל ממשק STA יש כתובת MAC ייחודית שניתן לתכנות על ידי ה-framework.
  • אפשר ליצור ולהשמיד את ממשק ה-STA המשני באופן דינמי.
  • ניתן לחבר כל STA ל-SSID שונה (באותו תדר אחר או תדר אחר).
  • ניתן לחבר כל STA לאותו SSID (באותו דרך תדר אחר או תדר אחר). שתי הודעות STA יכולות לעולם לא שמחובר לאותו BSSID.

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

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

  • ב-APF (ובעומסים אחרים כמו ARP ו-NS) צריכה להיות תמיכה לפחות בממשק הראשי (מוגדר באמצעות IWifiChip.setMultiStaPrimaryConnection()).

  • הנתונים הסטטיסטיים של שכבת הקישורים חייבים לפעול על בסיס ממשק יחיד.

בהמשך מפורטות המלצות להטמעות של צ'יפים של Wi-Fi תרחישים של בו-זמניות (concurrency):

  • שבב ה-Wi-Fi חייב לאפשר ל-framework לקרוא IWifiChip.setMultiStaUseCase() עם אחד מהקבועים הבאים כדי: מציינים את הפונקציה הנוכחית:

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY: מציין את הפונקציה Make-Before-Break. האיכות של החיבור הראשי צריך לקבל עדיפות על פני החיבור המשני.
    • DUAL_STA_NON_TRANSIENT_UNBIASED: מציין את חיבור מקומי וחיבור לאינטרנט בו-זמנית או בו-זמנית מוגבל וחיבור לאינטרנט. האיכות של שניהם צריך לקבל עדיפות זהה בחיבורים.
  • מכיוון שדוח STA כפול (בו-זמנית) יכול להוביל למצבים של חשבון ניהול (MCC), SCC ו-DBS של על ההטמעה של הספק, צריך לבחור את הרדיו המתאים ביותר כשה-framework קורא ל-IWifiChip.setMultiStaUseCase() כדי לציין את הפונקציה. אלה ההנחיות הכלליות:

    • אם קיים, עדיף להשתמש ברזולוציה 2x2+2x2 DBS.
    • אם אפשר, הימנעו משימוש ב-1x1+1x1 DBS בגלל ההשפעה המוגזמת על איכות החיבור. במקום זאת, עדיף להשתמש בחשבון ניהול (MCC).
    • חובה להגדיר את מחזור החיוב של חשבון הניהול (MCC) על ידי מנהל ההתקן או הקושחה עבור את הפונקציות השונות. המסגרת לא מגדירה את מחזור האחריות של חשבון הניהול (MCC) אבל שולח שאילתות על המידע הזה באמצעות StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent
    • אם אתם משתמשים בחשבון ניהול (MCC), מומלץ לבצע את מחזורי החוב הבאים בין וחיבורים משניים:

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY: 70% יסודיים, 30% משני.
      • DUAL_STA_NON_TRANSIENT_UNBIASED: 50% ראשוני, 50% משני.