वाई-फ़ाई/सेल्युलर coex चैनल से बचने की सुविधा

Android 12 में पेश की गई वाई-फ़ाई/सेल्युलर कोएक्स चैनल से बचने की सुविधा, असुरक्षित वाई-फ़ाई चैनलों की पहचान करती है और उनका इस्तेमाल करने से बचती है. ऐसा तब होता है, जब सेल्युलर चैनलों से या उनमें कोई रुकावट आ सकती है. इसमें STA, SoftAp, Wi-Fi Direct (P2P), Wi-Fi Aware (NAN) जैसे इंटरफ़ेस शामिल हैं.

इस पेज पर इनके बारे में बताया गया है:

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

बैकग्राउंड

LTE, 5G NR, और Licensed Assisted Access (LAA) जैसी सेल्युलर टेक्नोलॉजी वाले डिवाइसों के लिए, इस्तेमाल किए जा रहे सेल्युलर चैनल, इस्तेमाल किए जा रहे वाई-फ़ाई चैनल में रुकावट डाल सकते हैं. ऐसा तब होता है, जब मोबाइल और वाई-फ़ाई चैनल के बीच फ़्रीक्वेंसी का फ़र्क़ कम हो (आस-पास के चैनल) या जब हार्मोनिक और इंटरमॉड्यूलेशन इंटरफ़ियरेंस हो.

इस तरह का इंटरफ़ियर तब समस्या बन जाता है, जब एक ऐंटीना सिग्नल भेज रहा हो और दूसरा ऐंटीना एक ही समय पर सिग्नल पा रहा हो. इस मामले में, सिग्नल भेजने वाला ऐंटिना, सिग्नल पाने वाले ऐंटिना को भर देता है. इससे, सिग्नल पाने की क्वालिटी पर असर पड़ता है.

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

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

यह सुविधा, वाई-फ़ाई चैनलों को कंट्रोल करके, चैनल से जुड़ी समस्याओं से बचाती है. वाई-फ़ाई चैनल से बचने की स्कीम को चार अलग-अलग चरणों में बांटा जा सकता है:

  1. मॉडेम, मोबाइल फ़्रीक्वेंसी में बदलाव की रिपोर्ट करता है
  2. Coex avoidance algorithm, असुरक्षित वाई-फ़ाई चैनलों का हिसाब लगाता है
  3. Coex avoidance algorithm, वाई-फ़ाई सेवा को सूचना देता है
  4. फ़्रेमवर्क या ड्राइवर, वाई-फ़ाई से जुड़ी सही कार्रवाई करता है

चैनल से बचने की स्कीम

पहली इमेज. चैनल से बचने की स्कीम

मोबाइल फ़्रीक्वेंसी में हुए बदलाव की शिकायत करना

टेलीफ़ोन सेवा, फ़िलहाल इस्तेमाल किए जा रहे मोबाइल चैनलों की रिपोर्ट देती है. जब काम करने वाली सेल्युलर फ़्रीक्वेंसी बदलती है, तो मॉडेम इस जानकारी को IRadio::PhysicalChannelConfig के ज़रिए टेलीफ़ोन सेवा को भेजता है. इस जानकारी में, लाइसेंस वाले असिस्टेड ऐक्सेस (एलएए) और कैरियर एग्रीगेशन (सीए) के लिए निर्देश शामिल होते हैं.

Android 12 में, 1.6 IRadio::PhysicalChannelConfig में दिए गए ये फ़ील्ड, उन कोएक्स फ़ॉर्मूला के लिए ज़रूरी जानकारी देते हैं जिन्हें मॉडेम को भरना चाहिए.

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 Direct (P2P), SoftAp, और Wi-Fi Aware (NAN) जैसे कुछ चैनलों पर पाबंदी लगाने या न लगाने की वैल्यू होती हैं. असुरक्षित चैनल का मतलब है कि किसी भी तरह के इस्तेमाल के लिए, उस चैनल का इस्तेमाल न करें. वहीं, ज़रूरी पाबंदियों का मतलब है कि कुछ खास तरह के इस्तेमाल के लिए, उस चैनल का इस्तेमाल न करें.

अगर 2.4 गीगाहर्ट्ज़ या 5 गीगाहर्ट्ज़ बैंड के हर चैनल को असुरक्षित के तौर पर मार्क किया गया है, तो लुकअप टेबल, इंटरफ़ियर करने वाले हर सेल बैंड के लिए, सबसे सुरक्षित विकल्प के तौर पर डिफ़ॉल्ट 2.4 गीगाहर्ट्ज़ चैनल या डिफ़ॉल्ट 5 गीगाहर्ट्ज़ चैनल तय कर सकती है. जब बाकी बैंड को असुरक्षित के तौर पर रिपोर्ट किया जाता है, तब इन डिफ़ॉल्ट चैनलों को असुरक्षित के तौर पर रिपोर्ट नहीं किया जाता.

बदलाव करने की सूची

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

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

बैंडविड्थ के हिसाब से, कुछ चैनलों के लिए बैंडविड्थ को बदला जा सकता है. इसके लिए, बदलाव की सूची में कुछ चैनलों के लिए बैंडविड्थ की जानकारी दें. ऐसा इसलिए है, क्योंकि हर वाई-फ़ाई चैनल नंबर, एक तय बैंडविड्थ से जुड़ा होता है.

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

2G कैटगरी:

  • all (पूरा 2.4 गीगाहर्ट्ज़ बैंड)

5G कैटगरी:

  • all (पूरा 5 गीगाहर्ट्ज़ बैंड)
  • 20mhz (5 गीगाहर्ट्ज़ 20 मेगाहर्ट्ज़ चैनल)
  • 40mhz (5 गीगाहर्ट्ज़ 40 मेगाहर्ट्ज़ चैनल)
  • 80mhz (5 गीगाहर्ट्ज़ 80 मेगाहर्ट्ज़ चैनल)
  • 160mhz (5 गीगाहर्ट्ज़ 160 मेगाहर्ट्ज़ चैनल)

आस-पास के चैनल से इंटरफ़ियरेंस

आस-पास के चैनल से होने वाले इंटरफ़ियरेंस का पता लगाने के लिए, कोएक्स अवॉइडेंस एल्गोरिदम यह पक्का करता है कि ऐग्रेशन करने वाले और पीड़ित चैनल के बीच की दूरी ΔF, तय की गई थ्रेशोल्ड से कम न हो.

चैनल में रुकावट

दूसरी इमेज. हमलावर और पीड़ित चैनल के बीच की दूरी

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

आस-पास के इंटरफ़ियर करने वाले डिवाइसों के पैरामीटर

  • wifiVictimMhz: वाई-फ़ाई का इस्तेमाल करने वाले व्यक्ति के लिए, मेगाहर्ट्ज़ में दूरी का थ्रेशोल्ड (सेल अपलिंक)
  • cellVictimMhz: सेल के शिकार (सेल डाउनलिंक) के लिए मेगाहर्ट्ज़ की दूरी का थ्रेशोल्ड

हर चालू सेल चैनल के लिए, एल्गोरिदम इस तरह काम करता है:

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

    1. अगर वाई-फ़ाई बैंड के निचले हिस्से को खतरा है

      1. सेल अपलिंक की सबसे ज़्यादा फ़्रीक्वेंसी में wifiVictimMhz जोड़कर, असुरक्षित चैनलों की ऊपरी सीमा का पता लगाता है.
      2. वह पहला 20 मेगाहर्ट्ज़ वाला वाई-फ़ाई चैनल ढूंढता है जिसका निचला हिस्सा, तय सीमा से ओवरलैप होता है.
      3. वाई-फ़ाई चैनल, उसमें शामिल हर बड़े बैंडविड्थ चैनल (उदाहरण के लिए, 40 एमएचज़, 80 एमएचज़) और उसी बैंड के हर छोटे चैनल को असुरक्षित चैनल के तौर पर मार्क करता है.
    2. अगर वाई-फ़ाई बैंड के ऊपरी हिस्से को खतरा है

      1. सेल अपलिंक की सबसे कम फ़्रीक्वेंसी से wifiVictimMhz को घटाकर, असुरक्षित चैनलों की निचली सीमा का पता लगाता है.
      2. वह पहला वाई-फ़ाई चैनल ढूंढता है जिसका ऊपरी किनारा तय सीमा से ओवरलैप होता है.
      3. वाई-फ़ाई चैनल, उसमें शामिल हर बड़े चैनल (उदाहरण के लिए, 40 एमएचज़, 80 एमएचज़) और उसी बैंड के हर बड़े चैनल को असुरक्षित चैनल के तौर पर मार्क करता है.
  4. अगर cellVictimMhz मौजूद है और सेल चैनल में डाउनलिंक है.

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

असुरक्षित चैनल का हिसाब लगाना

तीसरी इमेज. आस-पास के चैनल के इंटरफ़ियरेंस के लिए, असुरक्षित चैनल का हिसाब लगाना

हारमोनिक या इंटरमॉड्यूलेशन डिस्टॉर्शन

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

$$ overlap = \frac{min(distortion_{high}, victim_{high}) - max(distortion_{low}, victim_{low})}{victim_{bandwidth}} $$

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

$$ harmonic_{high} = N * uplink_{high} $$
$$ harmonic_{low} = N * uplink_{low} $$

चैनल के हिसाब से हारमोनिक डिस्टॉर्शन का असुरक्षित होना

चौथी इमेज. हारमोनिक डिस्टॉर्शन के लिए चैनल के असुरक्षित होने का हिसाब लगाना

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

$$ intermod_{high} = |M*wifi_{high} + N*uplink_{high}| $$
$$ intermod_{low} = |M*wifi_{low} + N*uplink_{low}| $$

चैनल के गलत हिसाब से इंटरमॉड्यूलेशन डिस्टॉर्शन

पांचवीं इमेज. इंटरमॉड्यूलेशन डिस्टॉर्शन के लिए असुरक्षित चैनल का हिसाब लगाना

इंटरफ़ियर करने वाले हर सेल बैंड के लिए, लुकअप टेबल में $ M $, $ N $, और ओवरलैप वैल्यू तय की जा सकती हैं. अगर किसी बैंड के लिए कोई रुकावट नहीं है, तो उस बैंड की एंट्री के लिए टेबल से वैल्यू हटा दी जाती हैं. वाई-फ़ाई के 2.4 गीगाहर्ट्ज़ और 5 गीगाहर्ट्ज़ बैंड के लिए, इन वैल्यू के दो सेट अलग-अलग तय किए जा सकते हैं.

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

हर चालू सेल चैनल के लिए, एल्गोरिदम इस तरह काम करता है:

  1. यह सेल चैनल के बैंड के लिए, लुकअप टेबल की एंट्री ढूंढने की कोशिश करता है. अगर टेबल में कोई एंट्री नहीं मिलती है, तो इस चैनल के लिए असुरक्षित चैनलों की कोई जानकारी नहीं दिखती.
  2. अगर पैरामीटर तय किए गए हैं, तो हार्मोनिक से असुरक्षित 2.4 GHz चैनल ढूंढता है.

    1. 2.4 गीगाहर्ट्ज़ के लिए, हार्मोनिक डिग्री N ढूंढता है.
    2. N और सेल अपलिंक के आधार पर, हरमोनिक हाई फ़्रीक्वेंसी और हरमोनिक लो फ़्रीक्वेंसी का हिसाब लगाता है.
    3. सबसे पहला 20 MHz वाला Wi-Fi चैनल ढूंढता है, जो नीचे से आने वाले हार्मोनिक के निचले आंकड़े के अंदर हो.
    4. यह वाई-फ़ाई चैनल पर हार्मोनिक के ओवरलैप का हिसाब लगाता है. साथ ही, अगर ओवरलैप 2.4 गीगाहर्ट्ज़ वाई-फ़ाई ओवरलैप थ्रेशोल्ड से ज़्यादा होता है, तो चैनल को असुरक्षित के तौर पर मार्क करता है.
    5. ऊपर से आने वाले हार्मोनिक के ऊपरी सीमा के अंदर मौजूद पहला 20 MHz वाई-फ़ाई चैनल ढूंढता है.
    6. यह वाई-फ़ाई चैनल पर हार्मोनिक के ओवरलैप का हिसाब लगाता है. साथ ही, अगर ओवरलैप 2.4 गीगाहर्ट्ज़ वाई-फ़ाई ओवरलैप थ्रेशोल्ड से ज़्यादा होता है, तो चैनल को असुरक्षित के तौर पर मार्क करता है.
    7. बीच में मौजूद हर 20 MHz चैनल को असुरक्षित चैनल के तौर पर मार्क करता है.
  3. अगर पैरामीटर तय किए गए हैं, तो हार्मोनिक से असुरक्षित 5 GHz चैनल ढूंढता है.

    1. 5 गीगाहर्ट्ज़ के लिए, हार्मोनिक डिग्री N ढूंढता है. अगर N 0 है, तो सीधे पांचवें चरण पर जाएं.
    2. N और सेल अपलिंक के आधार पर, हरमोनिक हाई फ़्रीक्वेंसी और हरमोनिक लो फ़्रीक्वेंसी का हिसाब लगाता है.
    3. 20 Mhz के असुरक्षित चैनल ढूंढता है.

      1. सबसे पहला 20 MHz वाला Wi-Fi चैनल ढूंढता है, जो नीचे से आने वाले हार्मोनिक के निचले हिस्से में आता है.
      2. यह वाई-फ़ाई चैनल पर हार्मोनिक के ओवरलैप का हिसाब लगाता है. साथ ही, अगर ओवरलैप 2.4 गीगाहर्ट्ज़ वाई-फ़ाई ओवरलैप थ्रेशोल्ड से ज़्यादा होता है, तो चैनल को असुरक्षित के तौर पर मार्क करता है.
      3. ऊपर से आने वाले हार्मोनिक के ऊपरी हिस्से में मौजूद पहला 20 MHz वाई-फ़ाई चैनल ढूंढता है.
      4. यह वाई-फ़ाई चैनल पर हार्मोनिक के ओवरलैप का हिसाब लगाता है. साथ ही, अगर ओवरलैप 2.4 गीगाहर्ट्ज़ वाई-फ़ाई ओवरलैप थ्रेशोल्ड से ज़्यादा होता है, तो चैनल को असुरक्षित के तौर पर मार्क करता है.
      5. बीच में मौजूद हर 20 MHz चैनल को, तय की गई पावर कैप के साथ असुरक्षित चैनल के तौर पर मार्क करता है.
    4. 40 मेगाहर्ट्ज़, 80 मेगाहर्ट्ज़, और 160 मेगाहर्ट्ज़ के असुरक्षित चैनल ढूंढता है

      1. तीसरे चरण का दूसरा हिस्सा दोहराएं. हालांकि, इस बार 40 मेगाहर्ट्ज़, 80 मेगाहर्ट्ज़, और 160 मेगाहर्ट्ज़ का इस्तेमाल करें.
      2. यह हरमॉनिक एज पर चैनलों के ओवरलैप का हिसाब लगाने के बजाय, छोटे चैनलों के ओवरलैप का फिर से इस्तेमाल करता है. उदाहरण के लिए, अगर दो 20 एमएचज़ चैनल मिलकर एक 40 एमएचज़ चैनल बनाते हैं और उनका ओवरलैप 30% और 90% है, तो 40 एमएचज़ चैनल के लिए औसत ओवरलैप 60% होगा.
  4. अगर पैरामीटर तय किए गए हैं, तो इंटरमॉड्यूलेशन से असुरक्षित 2.4 गीगाहर्ट्ज़ चैनल ढूंढता है.

    1. 2.4 GHz के लिए इंटरमॉड्यूलेशन गुणांक N, M का पता लगाता है.
    2. हर 2.4 GHz वाई-फ़ाई चैनल के लिए:

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

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

आखिरी नतीजा

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

एल्गोरिदम इस तरह काम करता है:

  1. अगर हर 2.4 गीगाहर्ट्ज़ वाई-फ़ाई चैनल को असुरक्षित चैनल के तौर पर मार्क किया गया है, तो सेट से डिफ़ॉल्ट 2.4 गीगाहर्ट्ज़ वाई-फ़ाई चैनल हटा दें.
  2. अगर हर 5 गीगाहर्ट्ज़ वाई-फ़ाई चैनल को असुरक्षित चैनल के तौर पर मार्क किया गया है, तो सेट से डिफ़ॉल्ट 5 गीगाहर्ट्ज़ वाई-फ़ाई चैनल हटा दिया जाता है.
  3. असुरक्षित चैनलों का फ़ाइनल सेट दिखाता है.

लुकअप टेबल का फ़ॉर्मैट

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


<?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>

एक्सएमएल टेबल का उदाहरण

यहां एक्सएमएल लुकअप टेबल का एक उदाहरण दिया गया है:


<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>

कैरियर एग्रीगेशन

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

एल्गोरिदम, PCELL, PSCELL या SCELL के बीच कोई फ़र्क़ नहीं करता और उन्हें एक जैसे मानता है.

लाइसेंस की मदद से ऐक्सेस करना

लाइसेंस असिस्टेड ऐक्सेस (एलएए) को बैंड #46 के तौर पर पहचाना जाता है. एल्गोरिदम इस बैंड को अन्य बैंड की तरह ही मानता है. इस मामले में, लुकअप टेबल में 5 गीगाहर्ट्ज़ के सभी चैनलों को बदलाव करने वाली सूची के तौर पर सेट किया जा सकता है.

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

वाई-फ़ाई सेवा के बारे में जानकारी

जब कोएक्स चैनल एल्गोरिदम, असुरक्षित चैनलों का हिसाब लगा लेता है, तो अपने सिस्टम ऐप्लिकेशन को असुरक्षित चैनलों और उनकी पाबंदियों की जानकारी देने के लिए, Android फ़्रेमवर्क में बताए गए @SystemApi डेटा स्ट्रक्चर का इस्तेमाल करें.

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 तरीकों और कॉलबैक का इस्तेमाल करें.

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);
}

वाई-फ़ाई से जुड़ी कार्रवाई करना

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

ड्राइवर को बताएं

चैनल से बचने की सुविधा को चालू करने में ड्राइवर की अहम भूमिका होती है. इसलिए, ड्राइवर और फ़र्मवेयर को असुरक्षित चैनलों की जानकारी देना ज़रूरी है. इसके लिए, यहां दिए गए 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 के उन मुख्य उदाहरणों के बारे में बताया गया है जहां एसीएस के साथ चैनल बदलने की सुविधा लागू की जा सकती है. इन स्थितियों में, चैनल से बचने वाले एल्गोरिदम और ड्राइवर या फ़र्मवेयर के व्यवहार के बारे में बताया गया है.

एसीएस चालू होने पर, SoftAP शुरू करना (अभी तक कोई SoftAP चालू नहीं है)

  1. अगर चैनल असुरक्षित हैं और SoftAP पर पाबंदी है

    1. यह फ़्रेमवर्क, असुरक्षित चैनलों को एसीएस की सूची से हटा देता है.
    2. अगर सूची खाली है, तो फ़्रेमवर्क SoftAP को बंद कर देता है.
  2. अगर चैनल असुरक्षित हैं और उन पर कोई पाबंदी नहीं है

    1. वेंडर ड्राइवर या फ़र्मवेयर, असुरक्षित चैनलों के मुकाबले सुरक्षित चैनलों को प्राथमिकता देता है.

एसीएस चालू होने पर, सॉफ़्ट एपी चालू है और असुरक्षित चैनल अपडेट किए गए हैं

  1. अगर SoftAP चैनल असुरक्षित है और उस पर पाबंदी लगी है

    1. यह फ़्रेमवर्क, असुरक्षित चैनलों को हटाकर, एसीएस की सूची को अपडेट करता है.
    2. अगर सूची खाली है, तो फ़्रेमवर्क SoftAP को बंद कर देता है.
  2. अगर SoftAP चैनल असुरक्षित है और उस पर कोई पाबंदी नहीं है

    1. फ़्रेमवर्क कोई कार्रवाई नहीं करता. वेंडर ड्राइवर या फ़र्मवेयर, असुरक्षित चैनलों से बचने की सुविधा को मैनेज करता है. अगर असुरक्षित चैनलों से बचना मुमकिन नहीं है, तो पावर कैप लागू करता है.

Wi-Fi Direct (P2P)

  1. अगर वाई-फ़ाई डायरेक्ट (पी2पी) पर पाबंदी वाले असुरक्षित चैनल हैं.

    1. फ़्रेमवर्क, wpa_supplicant से HAL तरीके का इस्तेमाल करके असुरक्षित चैनलों से बचने का अनुरोध करता हैISupplicantP2pIface::setDisallowedFrequencies().
  2. अगर बिना पाबंदी वाले चैनल असुरक्षित हैं.

    1. अगर Wi-Fi Direct (P2P) की पाबंदी के बिना किसी असुरक्षित चैनल का इस्तेमाल किया जाता है, तो वेंडर ड्राइवर या फ़र्मवेयर, पावर कैप लागू करता है.

वाई-फ़ाई अवेयर (एनएएन)

फ़्रेमवर्क, वाई-फ़ाई अवेयर (एनएएन) के लिए चैनल चुनने में शामिल नहीं होता और कोई फ़्रेमवर्क कार्रवाई नहीं की जाती. Wi-Fi Aware (NAN) चैनल से बचने की सुविधा के लिए, वेंडर ड्राइवर या फ़र्मवेयर ज़िम्मेदार होता है.

एल्गोरिद्म बंद करना

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

public void setCoexUnsafeChannels(Set<CoexUnsafeChannel> coexUnsafeChannels,
  int coexRestrictions);

लागू करने की पुष्टि करना

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

सीटीएस टेस्ट

  • WifiManagerTest.java

    • testCoexMethodsShouldFailNoPermission()
    • testListenOnCoexUnsafeChannels()

ACTS टेस्ट

  • WifiManagerTest.py

    • test_set_get_coex_unsafe_channels()

वीटीएस टेस्ट

  • अगर AIDL लागू किया गया है, तो: wifi_chip_aidl_test.cpp

    • TEST_P(WifiChipAidlTest, SetCoexUnsafeChannels)
  • अगर HIDL लागू किया गया है, तो: wifi_chip_hidl_test.cpp

    • TEST_P(WifiChipHidlTest, setCoexUnsafeChannels)