वाई-फ़ाई STA/STA एक साथ काम करने की सुविधा

Android 12 में वाई-फ़ाई STA/STA को एक साथ दिखाने की सुविधा है. इससे डिवाइसों को एक साथ दो वाई-फ़ाई नेटवर्क से कनेक्ट किया जा सकता है. इस वैकल्पिक सुविधा की मदद से, ये फ़ंक्शन चालू किए जाते हैं.

  • ब्रेक होने से पहले बनाएं: डिवाइस मौजूदा कनेक्शन टूट जाने से पहले किसी नए वाई-फ़ाई नेटवर्क से कनेक्ट कर लेता है. इससे, वाई-फ़ाई नेटवर्क के बीच स्विच करते समय बेहतर ट्रांज़िशन होता है
  • एक ही समय पर लोकल-ओनली और इंटरनेट कनेक्शन: डिवाइस, डिवाइस के मुख्य इंटरनेट कनेक्शन में रुकावट डाले बिना, सिर्फ़ लोकल नेटवर्क से कनेक्ट होता है.
  • एक साथ प्रतिबंधित और इंटरनेट कनेक्शन: डिवाइस के मुख्य इंटरनेट कनेक्शन को रोके बिना, डिवाइस एक प्रतिबंधित नेटवर्क (सिर्फ़ कुछ खास ऐप्लिकेशन के लिए उपलब्ध) से कनेक्ट होता है.
  • (Android 13 या उसके बाद के वर्शन) इंटरनेट कनेक्शन के साथ एक साथ कई नेटवर्क: डिवाइस दो नेटवर्क से कनेक्ट होता है. ये दोनों नेटवर्क, बिना पाबंदी वाले और सभी ऐप्लिकेशन के लिए उपलब्ध हैं. साथ ही, ये दोनों नेटवर्क से इंटरनेट कनेक्टिविटी भी मिलती है.

इस पेज पर, डिवाइस के चालू रहने के तरीके की जानकारी दी गई है. साथ ही, डिवाइस बनाने वाली कंपनियों और वेंडर के लिए, इसे लागू करने की जानकारी भी दी गई है.

लागू करने का तरीका

वाई-फ़ाई STA/STA के साथ एक जैसा कॉन्फ़िगरेशन लागू करने के लिए, डिवाइसों पर ये सुविधाएं काम करनी चाहिए:

  • वाई-फ़ाई चिप या फ़र्मवेयर पर एक साथ दो एसटीए कनेक्शन काम करने चाहिए. फ़र्मवेयर को दोनों कनेक्शन के लिए, सभी चैनल और बैंड के कॉम्बिनेशन के साथ काम करना चाहिए. परफ़ॉर्मेंस की समस्याओं से बचने के लिए, हमारा सुझाव है कि आप 2x2+2x2 DBS की सुविधा वाली वाई-फ़ाई चिप का इस्तेमाल करें.

  • IWifiChip के एआईडीएल या HIDL लागू करने के दौरान, डिवाइस को इन एपीआई के साथ काम करना चाहिए.

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • HAL वाई-फ़ाई इंटरफ़ेस के कॉम्बिनेशन में एक साथ दो एसटीए इंटरफ़ेस होने चाहिए, जिन्हें स्पेसिफ़िकेशन वाले फ़ॉर्मैट, जैसे कि [{STA} <= 2, ...] का इस्तेमाल करके दिखाया गया हो. ज़्यादा जानकारी के लिए, वाई-फ़ाई मल्टी-इंटरफ़ेस की एक साथ काम करने की क्षमता लेख पढ़ें.

अगर ये ज़रूरी शर्तें पूरी हो जाती हैं, तो वाई-फ़ाई एसटीए/एसटीए को एक साथ इस्तेमाल करने के लिए ये तरीके अपनाएं:

  1. रनटाइम रिसॉर्स ओवरले का इस्तेमाल करके, एक या उससे ज़्यादा फ़ंक्शन को अलग-अलग चालू करें (डिफ़ॉल्ट रूप से बंद).

    • ब्रेक से पहले बनाएं: config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • एक ही समय पर लोकल-ओनली और इंटरनेट कनेक्शन: config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • एक साथ प्रतिबंधित और इंटरनेट कनेक्शन: config_wifiMultiStaRestrictedConcurrencyEnabled
    • इंटरनेट कनेक्शन के साथ एक साथ कई नेटवर्क: config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. लागू किए गए हर सेक्शन की पुष्टि उनसे जुड़े सेक्शन में बताए गए तरीके से करें.

वाई-फ़ाई STA/STA के कई वर्शन के साथ बेहतर तरीके से काम करने के लिए, हमारा सुझाव है कि OEM की पसंद के मुताबिक बनाए गए फ़्रेमवर्क और ऐप्लिकेशन, WifiManager#getConnectionInfo() के बजाय NetworkCallback#onCapabilitiesChanged() तरीके का इस्तेमाल करें. इससे सिर्फ़ एक नेटवर्क के लिए WifiInfo दिखता है. हालांकि, Android 12 में इसे बंद कर दिया गया था. ज़्यादा जानकारी के लिए, पीयर-टू-पीयर कनेक्टिविटी के लिए वाई-फ़ाई नेटवर्क के अनुरोध का एपीआई लेख पढ़ें.

ब्रेक से पहले बनाएं

make-before-break फ़ंक्शन की मदद से डिवाइस, मौजूदा वाई-फ़ाई नेटवर्क को बनाए रखते हुए नए वाई-फ़ाई नेटवर्क से कनेक्ट हो पाते हैं. यह पुराने नेटवर्क से सिर्फ़ तब डिसकनेक्ट होता है, जब वह नए वाई-फ़ाई नेटवर्क से कनेक्ट होता है और उसके पास इंटरनेट की सुविधा होती है.

अगर किसी डिवाइस को ब्रेक से पहले इस्तेमाल करना है, तो Android 11 या इससे पहले के वर्शन की इन समस्याओं को हल किया जाता है. नए नेटवर्क (ऐप्लिकेशन के बंद होने से पहले ही ब्रेक लें) से पहले, डिवाइस को मौजूदा वाई-फ़ाई नेटवर्क से डिसकनेक्ट होना ज़रूरी है.

  • किसी नए नेटवर्क से कनेक्ट करने पर, डिवाइस को पता चल सकता है कि उसमें गलत वाई-फ़ाई पासवर्ड सेव किया गया है या नए नेटवर्क में इंटरनेट का ऐक्सेस नहीं है. इससे डिवाइस, पुराने नेटवर्क पर वापस स्विच करता है. इससे डिवाइस को काफ़ी समय तक, वाई-फ़ाई कनेक्टिविटी के बिना भी इस्तेमाल करना पड़ता है.

  • पुराना नेटवर्क अचानक डिसकनेक्ट हो जाता है, इसका मतलब है कि सभी सॉकेट बंद हो जाते हैं. अचानक से कनेक्टिविटी बंद हो जाने पर, ऐप्लिकेशन ठीक से काम नहीं करते हैं. इस वजह से, जब तक नया कनेक्शन पूरी तरह नहीं बन जाता, तब तक उपयोगकर्ता को कुछ सेकंड के लिए इंटरनेट कनेक्टिविटी नहीं होगी.

  • डिफ़ॉल्ट नेटवर्क में दो बार बदलाव होता है, पुराने वाई-फ़ाई नेटवर्क से सेल्युलर नेटवर्क में और फिर सेल्युलर नेटवर्क से नए वाई-फ़ाई नेटवर्क में. इससे ऐप्लिकेशन, नेटवर्क में होने वाले बदलावों पर दो बार प्रतिक्रिया देते हैं. डिवाइस को सेल्युलर डेटा का उपयोग करके कुछ समय बिताना भी चाहिए.

ब्रेक लेने से पहले वाले फ़्लो का इस्तेमाल, सिर्फ़ ओएस की ओर से शुरू किए जाने वाले अपने-आप वाई-फ़ाई नेटवर्क स्विच करने के लिए किया जाता है. उपयोगकर्ता की ओर से शुरू किए गए नेटवर्क स्विच, 'बनाने से पहले के ब्रेक' फ़्लो का इस्तेमाल करते हैं. इसमें, नए नेटवर्क के कनेक्ट होने से पहले ही पिछला नेटवर्क पूरी तरह से डिसकनेक्ट हो जाता है. कुछ मामलों में, ओएस की ओर से शुरू किए गए अपने-आप स्विच होने के लिए भी ब्रेक लेने से पहले वाले फ़्लो का इस्तेमाल किया जाता है. उदाहरण के लिए, दो नेटवर्क के बीच स्विच करते समय, दोनों को फ़ैक्ट्री MAC पते का इस्तेमाल करने के लिए कॉन्फ़िगर किया जाता है.

ऐप्लिकेशन, WifiManager#isMakeBeforeBreakWifiSwitchingSupported() एपीआई का इस्तेमाल करके यह देख सकते हैं कि इस्तेमाल का यह उदाहरण आपके डिवाइस पर काम करता है या नहीं.

ब्रेक से पहले मेक-अप करें की पुष्टि करें

आपके लागू होने की पुष्टि करने के लिए, अपने-आप वाई-फ़ाई नेटवर्क स्विच ट्रिगर करें. इससे यह पक्का किया जा सकेगा कि कनेक्ट किए गए नेटवर्क की तुलना में, बेहतर सिग्नल वाला नेटवर्क उपलब्ध है. साथ ही, यह पुष्टि करें कि नए नेटवर्क से कनेक्ट होने के दौरान, डिवाइस का मौजूदा कनेक्शन बना रहता है. दोनों वाई-फ़ाई इंटरफ़ेस की स्थिति देखने और दोनों के कनेक्ट होने की पुष्टि करने के लिए, नीचे दिए गए निर्देश का इस्तेमाल करें.

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

अगर नए नेटवर्क में कनेक्टिविटी न हो, तो डिवाइस मौजूदा नेटवर्क से कनेक्ट रखते हुए, नेटवर्क से कनेक्ट करने की कोशिश करता है. साथ ही, नए नेटवर्क में इंटरनेट न होने का पता चलने पर यह कोशिश को रद्द कर देता है. इसके बाद डिवाइस, मुख्य वाई-फ़ाई नेटवर्क के तौर पर मौजूदा कनेक्शन का इस्तेमाल करना जारी रखता है.

एक ही समय पर लोकल-ओनली कनेक्शन और इंटरनेट कनेक्शन

एक ही समय पर लोकल-ओनली और इंटरनेट कनेक्शन फ़ंक्शन, डिवाइसों को सिर्फ़ लोकल कनेक्शन से कनेक्ट करने की सुविधा देता है. जैसे, इंटरनेट सेवा देने वाली मुख्य कंपनी के नेटवर्क के साथ-साथ IoT डिवाइस. यह फ़ंक्शन, कैमरे जैसे IoT डिवाइसों से सीधे कनेक्ट होने पर लोगों के अनुभव को बेहतर बनाता है. यह सुविधा Android 10 में जोड़े गए WifiNetworkSpecifier API की मदद से मुमकिन है.

Android 11 और उससे पहले के वर्शन में, जब किसी IoT डिवाइस को कनेक्ट किया जाता है, तो वे मुख्य वाई-फ़ाई नेटवर्क से डिसकनेक्ट हो जाते हैं. ऐसे में, इंटरनेट कनेक्टिविटी टूट जाती है (जब तक कि डिवाइस में परिवहन का कोई दूसरा तरीका उपलब्ध न हो, जैसे कि मोबाइल डेटा).

ऐप्लिकेशन यह पता लगा सकते हैं कि यह फ़ंक्शन, WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() एपीआई का इस्तेमाल करके, डिवाइस पर काम करता है या नहीं.

Android 12 में, एक साथ लोकल-ओनली कनेक्शन और इंटरनेट कनेक्शन फ़ंक्शन में हुए बदलावों के बारे में ज़्यादा जानकारी के लिए, पीयर-टू-पीयर कनेक्टिविटी के लिए वाई-फ़ाई नेटवर्क के अनुरोध का एपीआई देखें.

सिर्फ़ लोकल कनेक्शन और इंटरनेट कनेक्शन की पुष्टि करना

इस फ़ंक्शन की पुष्टि करने के लिए, MultiStaConcurrencyWifiNetworkSpecifierTest सीटीएस टेस्ट का इस्तेमाल करें.

समवर्ती प्रतिबंधित और इंटरनेट कनेक्शन

एक साथ पाबंदी वाले और इंटरनेट कनेक्शन फ़ंक्शन से, डिवाइस को उपयोगकर्ता के लिए मुख्य वाई-फ़ाई नेटवर्क से एक साथ कनेक्ट करने में मदद मिलती है. साथ ही, एक ही समय में सीमित वाई-फ़ाई नेटवर्क से कनेक्ट किया जा सकता है, जो सिर्फ़ चुनिंदा ऐप्लिकेशन के लिए उपलब्ध है.

ऐप्लिकेशन यह पता लगा सकते हैं कि यह फ़ंक्शन, WifiManager#isStaConcurrencyForRestrictedConnectionsSupported() एपीआई का इस्तेमाल करके, डिवाइस पर काम करता है या नहीं.

किसी डिवाइस को दूसरे प्रतिबंधित वाई-फ़ाई नेटवर्क से कनेक्ट करने की सुविधा चालू करने के लिए, यह तरीका अपनाएं:

  1. setOemPaid या setOemPrivate से वाई-फ़ाई नेटवर्क के सुझाव जोड़ें.

  2. ConnectivityManager में, उनसे जुड़ी क्षमताओं के साथ NetworkRequest फ़ाइल करें:

जब डिवाइस को, OEM के पेमेंट किए गए नेटवर्क या OEM के निजी सुझाव से मेल खाने वाले नेटवर्क से स्कैन के नतीजों का पता चलता है, तब डिवाइस अपने-आप सेकंडरी नेटवर्क के तौर पर उस नेटवर्क से कनेक्ट हो जाता है.

एक साथ चलने वाले प्रतिबंधित और इंटरनेट कनेक्शन की पुष्टि करें

इस फ़ंक्शन की पुष्टि करने के लिए, MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest सीटीएस टेस्ट का इस्तेमाल करें.

इंटरनेट कनेक्शन के साथ एक साथ कई नेटवर्क

इंटरनेट कनेक्शन के साथ एक साथ कई नेटवर्क देखने की सुविधा, Android 13 या उसके बाद वाले वर्शन में उपलब्ध है. इसकी मदद से, डिवाइस मौजूदा समय में दो नेटवर्क (APs) से एक साथ कनेक्ट हो सकता है. ये दोनों नेटवर्क, बिना पाबंदी वाले नेटवर्क (सभी ऐप्लिकेशन के पास ऐक्सेस है) और इंटरनेट का ऐक्सेस देते हैं.

WifiManager#isStaConcurrencyForMultiInternetSupported() वाले तरीके का इस्तेमाल करके, ऐप्लिकेशन यह पता लगा सकते हैं कि यह सुविधा, डिवाइस पर काम करती है या नहीं.

अगर यह सुविधा काम करती है, तो खास ऐप्लिकेशन, WifiManager#setStaConcurrencyForMultiInternetMode(int mode) तरीके का इस्तेमाल करके इस सुविधा को चालू कर सकते हैं. इस सुविधा में ये मोड हैं:

मौजूदा चालू फ़ीचर मोड के बारे में क्वेरी करने के लिए, WifiManager#getStaConcurrencyForMultiInternetMode() तरीका का इस्तेमाल करें.

जब यह सुविधा चालू हो, तो नीचे दिया गया तरीका अपनाकर, इंटरनेट उपलब्ध कराने वाले अन्य वाई-फ़ाई नेटवर्क का अनुरोध करें.

  1. WifiNetworkSpecifier.Builder का इस्तेमाल करके, वाई-फ़ाई नेटवर्क की खास जानकारी देने वाला प्रोग्राम बनाएं. setBand() तरीके का इस्तेमाल करके, स्पेसिफ़िकेशन के लिए बैंड चुनें. SSID या BSSID को तय न करें क्योंकि बताए गए बैंड के लिए अतिरिक्त नेटवर्क को वाई-फ़ाई फ़्रेमवर्क से चुना जाता है.

  2. ConnectivityManager का इस्तेमाल करके, NET_CAPABILITY_INTERNET की सुविधा वाला NetworkRequest बनाएं.

  3. NetworkCallback इंस्टेंस के साथ नेटवर्क अनुरोध में खास जानकारी जोड़ें, ताकि अनुरोध के स्टेटस को ट्रैक किया जा सके और अनुरोध को ConnectivityManager को जारी किया जा सके. अगर अनुरोध किए गए बैंड के साथ सेव किया गया नेटवर्क, स्कैन के नतीजे में उपलब्ध है और नेटवर्क से कनेक्ट हो गया है, तो कॉलबैक ऑब्जेक्ट पर NetworkCallback.onAvailable() को शुरू कर दिया जाएगा.

इंटरनेट कनेक्शन के साथ, एक साथ कई नेटवर्क की पुष्टि करें

इस फ़ंक्शन की पुष्टि करने के लिए, नीचे दिए गए सीटीएस टेस्ट का इस्तेमाल करें:

  • सीटीएस: MultiStaConcurrencyMultiInternetWifiNetworkTest

वेंडर के वाई-फ़ाई चिप से जुड़े दिशा-निर्देश

वाई-फ़ाई चिप वेंडर के लिए, वाई-फ़ाई STA/STA एक साथ काम करने की सुविधा के साथ काम करने के लिए इन दिशा-निर्देशों का पालन करें.

वाई-फ़ाई चिप को एक साथ दो STA कनेक्शन के साथ काम करना चाहिए. इसका मतलब है कि यह इन सुविधाओं के साथ काम करता है:

  • हर एसटीए इंटरफ़ेस में, फ़्रेमवर्क के मुताबिक एक यूनीक MAC प्रोग्राम किया जा सकता है.
  • दूसरा STA इंटरफ़ेस, डाइनैमिक तरीके से बनाया और बंद किया जा सकता है.
  • हर STA को एक अलग SSID से कनेक्ट किया जा सकता है चाहे वह एक ही बैंड में हो या अलग बैंड में.
  • हर STA को एक SSID से कनेक्ट किया जा सकता है (एक ही बैंड में या अलग बैंड में). दोनों एसटीए को कभी भी एक ही BSSID से कनेक्ट नहीं होना चाहिए.

ज़रूरी सुविधाएं हर इंटरफ़ेस के हिसाब से काम करनी चाहिए. साथ ही, ये सुविधाएं मुख्य इंटरफ़ेस पर उपलब्ध होनी चाहिए. इन ज़रूरी सुविधाओं की सूची नीचे दी गई है:

  • रोमिंग की सुविधा कम से कम मुख्य इंटरफ़ेस (IWifiChip.setMultiStaPrimaryConnection() का इस्तेमाल करके) पर काम करनी चाहिए. अगर दोनों इंटरफ़ेस पर रोमिंग की सुविधा काम करती है, तो किसी एक कनेक्शन पर फ़ैसला लेने की सुविधा, एक ही समय पर इस्तेमाल किए जा रहे दूसरे कनेक्शन से अलग नहीं होनी चाहिए. उदाहरण के लिए, एक इंटरफ़ेस को दूसरे कनेक्शन के BSSID पर नहीं घूमना चाहिए.

  • APF (और ARP और NS जैसे अन्य ऑफ़लोड) को कम से कम प्राइमरी इंटरफ़ेस (IWifiChip.setMultiStaPrimaryConnection() का इस्तेमाल करके सेट करें) पर काम करना चाहिए.

  • लिंक लेयर के आंकड़े, हर इंटरफ़ेस के हिसाब से काम करने चाहिए.

अलग-अलग समवर्ती स्थितियों के लिए नीचे दिए गए वाई-फ़ाई चिप इस्तेमाल करने के सुझाव दिए गए हैं:

  • वाई-फ़ाई चिप को, मौजूदा फ़ंक्शन की जानकारी देने के लिए, इनमें से किसी एक कॉन्सटेंट के साथ IWifiChip.setMultiStaUseCase() को कॉल करने की अनुमति देनी चाहिए:

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY: इससे पहले, Make-before-Break फ़ंक्शन के बारे में पता चलता है. प्राइमरी कनेक्शन की क्वालिटी को सेकंडरी कनेक्शन के बजाय को प्राथमिकता दी जानी चाहिए.
    • DUAL_STA_NON_TRANSIENT_UNBIASED: इससे एक ही समय पर लोकल-ओनली और इंटरनेट कनेक्शन या एक ही समय पर पाबंदी वाले और इंटरनेट कनेक्शन फ़ंक्शन के बारे में पता चलता है. दोनों कनेक्शन की क्वालिटी को बराबर प्राथमिकता दी जानी चाहिए.
  • ड्यूअल कनकरंट एसटीए की मदद से एमसीसी, एससीसी, और डीबीएस मोड की मदद से कार्रवाई की जा सकती है. इसलिए, वेंडर को लागू करने के लिए सबसे अच्छा रेडियो कॉन्फ़िगरेशन चुनना चाहिए. ऐसा तब होता है, जब फ़्रेमवर्क फ़ंक्शन को बताने के लिए IWifiChip.setMultiStaUseCase() को कॉल करता है. सामान्य दिशा-निर्देश ये हैं:

    • अगर उपलब्ध हो, तो 2x2+2x2 DBS को प्राथमिकता दी जाती है.
    • कनेक्शन क्वालिटी पर बहुत ज़्यादा असर होने की वजह से, अगर हो सके तो 1x1+1x1 DBS से बचें. इसके बजाय, एमसीसी को प्राथमिकता दें.
    • अलग-अलग फ़ंक्शन के लिए, एमसीसी ड्यूटी साइकल को ड्राइवर या फ़र्मवेयर से कॉन्फ़िगर करना ज़रूरी है. यह फ़्रेमवर्क, सीधे तौर पर एमसीसी का ड्यूटी साइकल सेट नहीं करता है. हालांकि, StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent का इस्तेमाल करके इस जानकारी के लिए क्वेरी करता है.
    • अगर एमसीसी का इस्तेमाल किया जा रहा है, तो हमारा सुझाव है कि प्राइमरी और सेकंडरी कनेक्शन के बीच ये ड्यूटी साइकल अपनाएं:

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY: 70% प्राइमरी और 30% सेकंडरी.
      • DUAL_STA_NON_TRANSIENT_UNBIASED: 50% प्राइमरी और 50% सेकंडरी.