ב-Android 12 נוספה האפשרות לבו-זמניות של Wi-Fi STA/STA, שמאפשרת למכשירים להתחבר לשתי רשתות Wi-Fi בו-זמנית. התכונה האופציונלית הזו מאפשרת את הפונקציות הבאות:
- Make-before-break: המכשיר מתחבר לרשת Wi-Fi חדשה לפני שהוא מנתק את החיבור הקיים. כך המעברים בין רשתות ה-Wi-Fi יהיו חלקים יותר.
- חיבור מקומי בלבד וחיבור לאינטרנט בו-זמנית: המכשיר מתחבר לרשת מקומית בלבד בלי לשבש את החיבור העיקרי של המכשיר לאינטרנט.
- חיבור מוגבל וחיבור לאינטרנט בו-זמנית: המכשיר מתחבר לרשת מוגבלת (שזמינה רק לאפליקציות מסוימות עם הרשאות מיוחדות) בלי לשבש את החיבור העיקרי של המכשיר לאינטרנט.
- (Android 13 ואילך) מספר רשתות בו-זמנית עם חיבור לאינטרנט: המכשיר מתחבר לשתי רשתות, ששתיהן לא מוגבלות וזמינות לכל האפליקציות, ומספקות קישוריות לאינטרנט.
בדף הזה מתואר אופן הפעולה של המכשיר כשהתכונה הזו מופעלת, ופרטי ההטמעה ליצרנים ולספקים של מכשירים.
הטמעה
כדי להטמיע במכשיר בו-זמניות של Wi-Fi STA/STA , המכשיר צריך לתמוך בדברים הבאים:
הקושחה או שבב ה-Wi-Fi צריכים לתמוך בשני חיבורי STA בו-זמנית. הקושחה צריכה לתמוך בכל השילובים של ערוצים ופסים בשני החיבורים. כדי למנוע בעיות בביצועים, מומלץ להשתמש בשבב Wi-Fi עם יכולת DBS 2x2+2x2.
המכשיר צריך לתמוך בממשקי ה-API הבאים בהטמעה של AIDL או HIDL של
IWifiChip.IWifiChip.setMultiStaPrimaryConnection(String ifName)IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
לשילוב של ממשק ה-Wi-Fi HAL צריכים להיות שני ממשקי STA בו-זמניים שמוצגים באמצעות פורמט מפרט כמו
[{STA} <= 2, ...]. מידע נוסף מופיע במאמר בנושא בו זמניות של ממשקי Wi-Fi מרובים.
אם התנאים המוקדמים האלה מתקיימים, מטמיעים בו-זמניות של Wi-Fi STA/STA באופן הבא:
מפעילים פונקציה אחת או יותר בנפרד באמצעות שכבות-על של משאבים בזמן ריצה (מושבתות כברירת מחדל).
- Make-before-break:
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled - חיבור מקומי בלבד וחיבור לאינטרנט בו-זמנית:
config_wifiMultiStaLocalOnlyConcurrencyEnabled - חיבור בו-זמני לאינטרנט ולרשת מוגבלת:
config_wifiMultiStaRestrictedConcurrencyEnabled - מספר רשתות בו-זמניות עם חיבור לאינטרנט:
config_wifiMultiStaMultiInternetConcurrencyEnabled
- Make-before-break:
מאמתים כל הטמעה כמו שמתואר בקטעים הרלוונטיים.
כדי לתמוך טוב יותר בהפעלה בו-זמנית של STA/STA ב-Wi-Fi, מומלץ שאפליקציות ומסגרות מותאמות אישית של יצרני ציוד מקורי ישתמשו בשיטה NetworkCallback#onCapabilitiesChanged() במקום בשיטה WifiManager#getConnectionInfo(), שמחזירה רק WifiInfo עבור רשת אחת והוצאה משימוש ב-Android 12. מידע נוסף זמין במאמר בנושא Wi-Fi Network Request API לקישוריות בין עמיתים.
Make-before-break
הפונקציה make-before-break מאפשרת למכשירים להתחבר לרשת Wi-Fi חדשה תוך שמירה על החיבור לרשת ה-Wi-Fi הקיימת. הניתוק מהרשת הישנה מתבצע רק אחרי שהמכשיר מתחבר בהצלחה לרשת ה-Wi-Fi החדשה ויש לו גישה לאינטרנט.
תרחיש השימוש 'חיבור לפני ניתוק' נועד לפתור את הבעיות הבאות ב-Android 11 ומגרסאות קודמות, שבהן המכשיר צריך להתנתק מרשת ה-Wi-Fi הקיימת לפני שהוא מתחבר לרשת חדשה (ניתוק לפני חיבור).
כשמתחברים לרשת חדשה, יכול להיות שהמכשיר יזהה שהסיסמה ל-Wi-Fi השמורה שגויה או שלרשת החדשה אין גישה לאינטרנט. הפעולה הזו גורמת למכשיר לחזור לרשת הישנה, וכתוצאה מכך הוא לא מחובר ל-Wi-Fi במשך זמן רב.
הרשת הישנה מתנתקת באופן פתאומי, כלומר כל השקעים נסגרים. לרוב, האפליקציות לא מגיבות טוב לאובדן פתאומי של הקישוריות, וזה עלול לגרום למשתמש לחוות כמה שניות ללא קישוריות לאינטרנט עד שהחיבור החדש יתבסס באופן מלא.
רשת ברירת המחדל משתנה פעמיים, מרשת ה-Wi-Fi הישנה לרשת הסלולרית, ואז מהרשת הסלולרית לרשת ה-Wi-Fi החדשה. כתוצאה מכך, האפליקציות מגיבות לשינויים ברשת פעמיים. בנוסף, המכשיר צריך להשתמש בנתונים סלולריים למשך זמן קצר.
תהליך היצירה לפני ההסרה משמש רק למעברים אוטומטיים בין רשתות Wi-Fi שהמערכת מפעילה. מעברים בין רשתות שמתבצעים על ידי המשתמשים מתבססים על התהליך הישן של ניתוק מלא של הרשת הקודמת לפני החיבור לרשת החדשה. במקרים מסוימים, התהליך של ניתוק לפני יצירת חיבור משמש גם במעברים אוטומטיים שהופעלו על ידי מערכת ההפעלה, למשל, כשעוברים בין שתי רשתות ששתיהן מוגדרות לשימוש בכתובת ה-MAC של היצרן.
אפליקציות יכולות לבדוק אם תרחיש השימוש הזה נתמך במכשיר באמצעות WifiManager#isMakeBeforeBreakWifiSwitchingSupported() API.
אימות של שיטת make-before-break
כדי לאמת את ההטמעה, מפעילים מעבר אוטומטי לרשת Wi-Fi (על ידי אימות של רשת עם עוצמת אות חזקה יותר מהרשת המחוברת) ומוודאים שהמכשיר שומר על החיבור הקיים בזמן שהוא מתחבר לרשת החדשה. כדי לראות את הסטטוס של שני ממשקי ה-Wi-Fi ולוודא ששניהם מחוברים, משתמשים בפקודה הבאה:
adb shell wpa_cli -i wlan0 status ; echo ; adb shell wpa_cli -i wlan1 status
אם אין קישוריות לרשת החדשה, המכשיר מנסה להתחבר לרשת, תוך שמירה על החיבור לרשת הקיימת, ומבטל את הניסיון כשהוא מזהה שאין אינטרנט ברשת החדשה. לאחר מכן המכשיר ממשיך להשתמש בחיבור הקיים כרשת ה-Wi-Fi הראשית.
חיבור מקומי בלבד וחיבור לאינטרנט בו-זמנית
הפונקציה חיבור מקומי בלבד וחיבור לאינטרנט בו-זמנית מאפשרת למכשירים להתחבר לחיבור מקומי בלבד, כמו חיבור למכשיר IoT, בו-זמנית עם הרשת הראשית שמספקת אינטרנט. הפונקציה הזו משפרת את חוויית המשתמש כשמתחברים ישירות למכשירי IoT, כמו מצלמות, וזה אפשרי באמצעות WifiNetworkSpecifier API שנוסף ב-Android 10.
ב-Android 11 ובגרסאות קודמות, המכשירים מתנתקים מרשת ה-Wi-Fi הראשית כשהם מתחברים למכשיר IoT, וכתוצאה מכך הם מאבדים את הגישה לאינטרנט (אלא אם יש למכשיר סוג העברה אחר שזמין, כמו חבילת גלישה).
אפליקציות יכולות לבדוק אם הפונקציה הזו נתמכת במכשיר באמצעות WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() API.
מידע נוסף על השינויים בפונקציה של חיבור בו-זמני לאינטרנט ולרשת מקומית בלבד ב-Android 12 זמין במאמר בנושא Wi-Fi Network Request API לקישוריות בין עמיתים.
אימות של חיבור לאינטרנט וחיבור מקומי בלבד
כדי לאמת את הפונקציה הזו, משתמשים בבדיקת CTS MultiStaConcurrencyWifiNetworkSpecifierTest.
חיבור מוגבל וחיבור לאינטרנט בו-זמנית
הפונקציה חיבור מוגבל וחיבור לאינטרנט בו-זמנית מאפשרת למכשיר להתחבר בו-זמנית לרשת Wi-Fi ראשית עבור המשתמש ולרשת Wi-Fi מוגבלת שזמינה רק לאפליקציות נבחרות.
אפליקציות יכולות לבדוק אם הפונקציה הזו נתמכת במכשיר באמצעות WifiManager#isStaConcurrencyForRestrictedConnectionsSupported() API.
כדי לאפשר למכשיר להתחבר לרשתות Wi-Fi משניות עם הגבלות, פועלים לפי השלבים הבאים:
מוסיפים הצעות לרשתות Wi-Fi עם
setOemPaidאוsetOemPrivateשמוגדרים כ-true.ב-
ConnectivityManager, מגישיםNetworkRequestעם היכולות המתאימות:-
NET_CAPABILITY_OEM_PAIDלמשךsetOemPaid -
NET_CAPABILITY_OEM_PRIVATEלמשךsetOemPrivate
-
כשהמכשיר מזהה תוצאות סריקה עם רשת שתואמת להצעה בתשלום של יצרן ציוד מקורי או להצעה פרטית של יצרן ציוד מקורי, הוא מתחבר אליה אוטומטית כרשת משנית.
אימות של חיבור לאינטרנט ושל הגבלות בו-זמניות
כדי לאמת את הפונקציה הזו, משתמשים בבדיקת CTS MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest.
מספר רשתות בו-זמניות עם חיבור לאינטרנט
התכונה חיבור בו-זמני למספר רשתות עם חיבור לאינטרנט זמינה ב-Android 13 ומעלה, ומאפשרת למכשיר להתחבר בו-זמנית לשתי רשתות (נקודות גישה) שאין להן הגבלות (לכל האפליקציות יש גישה) ומספקות גישה לאינטרנט.
אפליקציות יכולות לבדוק אם התכונה הזו נתמכת במכשיר באמצעות ה-method WifiManager#isStaConcurrencyForMultiInternetSupported().
אם התכונה נתמכת, אפליקציות עם הרשאות יכולות להפעיל אותה באמצעות השיטה WifiManager#setStaConcurrencyForMultiInternetMode(int mode).
לתכונה יש את המצבים הבאים:
-
WifiManager#WIFI_MULTI_INTERNET_MODE_DBS_AP: מגביל את החיבורים הכפולים לתדרים הכפולים של נקודת גישה מסוג DBS. -
WifiManager#WIFI_MULTI_INTERNET_MODE_MULTI_AP: מתחבר לנקודות גישה שרירותיות שבהן החיבורים האישיים משתמשים בפסים שונים. -
WifiManager#WIFI_MULTI_INTERNET_MODE_DISABLED: התכונה מושבתת.
כדי לשלוח שאילתה לגבי מצב התכונה הפעיל, משתמשים בשיטה WifiManager#getStaConcurrencyForMultiInternetMode().
כשהתכונה מופעלת, פועלים לפי השלבים הבאים כדי לבקש רשת Wi-Fi נוספת שמספקת אינטרנט.
יוצרים מזהה רשת Wi-Fi באמצעות
WifiNetworkSpecifier.Builder. בוחרים פס לציון באמצעות השיטהsetBand(). אל תציינו את ה-SSID או ה-BSSID כרשת הנוספת, כי מסגרת ה-Wi-Fi בוחרת את הרשת הנוספת עבור הפס שצוין.באמצעות
ConnectivityManager, צורNetworkRequestעם היכולתNET_CAPABILITY_INTERNET.מוסיפים את המזהה לבקשה לאחזור מהרשת יחד עם מופע של
NetworkCallbackכדי לעקוב אחרי סטטוס הבקשה, ושולחים את הבקשה אלConnectivityManager. אם רשת שמורה עם הפס המבוקש זמינה בתוצאת הסריקה, והחיבור לרשת מצליח, הפונקציהNetworkCallback.onAvailable()מופעלת באובייקט של פונקציית הקריאה החוזרת.
אימות של מספר רשתות בו-זמנית עם חיבור לאינטרנט
כדי לאמת את הפונקציה הזו, משתמשים בבדיקת ה-CTS הבאה:
- CTS:
MultiStaConcurrencyMultiInternetWifiNetworkTest
הנחיות לגבי צ'יפ Wi-Fi של ספק
ספקי שבבי Wi-Fi יכולים להיעזר בהנחיות הבאות כדי לתמוך בבו-זמניות של Wi-Fi STA/STA.
שבב ה-Wi-Fi צריך לתמוך בחיבורים כפולים בו-זמנית של STA. כלומר, הוא תומך בפעולות הבאות:
- לכל ממשק STA יש כתובת MAC ייחודית שניתנת לתכנות על ידי המסגרת.
- אפשר ליצור ולמחוק את ממשק ה-STA המשני באופן דינמי.
- כל STA יכול להתחבר ל-SSID אחר (באותו תדר או בתדר אחר).
- כל STA יכול להתחבר לאותו SSID (באותו פס או בפס אחר). שני מכשירי ה-STA אף פעם לא יכולים להיות מחוברים לאותו BSSID.
תכונות קריטיות צריכות לפעול על בסיס כל ממשק בנפרד, והן צריכות להיות זמינות בממשק הראשי. רשימה של התכונות החשובות האלה:
הנדידה צריכה להיות נתמכת לפחות בממשק הראשי (מוגדר באמצעות
IWifiChip.setMultiStaPrimaryConnection()). אם הנדידה נתמכת בשני הממשקים, ההחלטות לגבי חיבור אחד לא יכולות להתנגש עם החיבור השני שמתבצע בו-זמנית. לדוגמה, אסור לממשק אחד לבצע רומינג ל-BSSID של החיבור השני.צריך לתמוך ב-APF (ובפריקות עומס אחרות כמו ARP ו-NS) לפחות בממשק הראשי (מוגדר באמצעות
IWifiChip.setMultiStaPrimaryConnection()).הנתונים הסטטיסטיים של שכבת הקישור צריכים לפעול על בסיס כל ממשק.
אלה ההמלצות להטמעת שבב Wi-Fi בתרחישי שימוש שונים בו-זמנית:
שבב ה-Wi-Fi צריך לאפשר למסגרת לקרוא ל-
IWifiChip.setMultiStaUseCase()עם אחת מהקבועים הבאים כדי לציין את הפונקציה הנוכחית:-
DUAL_STA_TRANSIENT_PREFER_PRIMARY: מציין את הפונקציה Make-Before-Break. צריך לתת עדיפות לאיכות של החיבור הראשי על פני החיבור המשני. -
DUAL_STA_NON_TRANSIENT_UNBIASED: מציין את הפונקציה concurrent local-only and internet connection או את הפונקציה concurrent restricted and internet connection. צריך לתת עדיפות שווה לאיכות של שני החיבורים.
-
מכיוון ש-STA כפול בו-זמני יכול להוביל למצבי פעולה של MCC, SCC ו-DBS, הטמעת הספק צריכה לבחור את תצורת הרדיו הטובה ביותר כשהמסגרת קוראת ל-
IWifiChip.setMultiStaUseCase()כדי לציין את הפונקציה. אלה הנחיות כלליות:- מומלץ להשתמש ב-DBS בפורמט 2x2+2x2 אם הוא זמין.
- אם אפשר, כדאי להימנע משימוש ב-DBS בתצורת 1x1+1x1 בגלל ההשפעה המוגזמת על איכות החיבור. במקום זאת, מומלץ להשתמש בחשבון ניהול.
- מחזור הפעולה של ה-MCC צריך להיות ניתן להגדרה על ידי הנהג או הקושחה עבור הפונקציות השונות. המסגרת לא מגדירה ישירות את מחזור הפעילות של חשבון ה-MCC, אלא שולחת שאילתות לגבי המידע הזה באמצעות
StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent. אם משתמשים בחשבון ניהול, מומלץ להשתמש במחזורי הפעלה הבאים בין החיבורים הראשיים לבין החיבורים המשניים:
-
DUAL_STA_TRANSIENT_PREFER_PRIMARY: 70% ראשי, 30% משני. -
DUAL_STA_NON_TRANSIENT_UNBIASED: 50% ראשי, 50% משני.
-