वाई-फ़ाई/सेल्युलर 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 बचत का एल्गोरिदम, वाई-फ़ाई सेवा की जानकारी देता है
  4. फ़्रेमवर्क या ड्राइवर, वाई-फ़ाई से जुड़ी सही कार्रवाई करता है

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

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

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

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

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

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

ओवरराइड सूची

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

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

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

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

2जी श्रेणियां:

  • 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. यह वाई-फ़ाई चैनल से जुड़े हर बड़े चैनल (उदाहरण के लिए, 40M hz, 80 Mhz) और बैंड के हर बड़े चैनल को असुरक्षित चैनल के तौर पर मार्क करता है.
  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 मेगाहर्ट्ज़ वाई-फ़ाई चैनल का पता लगाता है, जो ऊपर से आ रहे हार्मोनिक की ऊपरी सीमा के अंदर है.
    6. यह वाई-फ़ाई चैनल पर हारमोनिक के ओवरलैप का हिसाब लगाता है. साथ ही, अगर ओवरलैप 2.4 गीगाहर्ट्ज़ की वाई-फ़ाई ओवरलैप थ्रेशोल्ड से ज़्यादा होता है, तो चैनल को असुरक्षित के तौर पर मार्क करता है.
    7. हर 20 मेगाहर्ट्ज़ चैनल को असुरक्षित चैनल के तौर पर मार्क करता है.
  3. अगर पैरामीटर तय किए गए हैं, तो हार्मोनिक से असुरक्षित 5 GHz चैनल ढूंढता है.

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

      1. पहले 20 मेगाहर्ट्ज़ वाई-फ़ाई चैनल का पता लगाता है, जो नीचे से आ रहे हार्मोनिक की निचली सीमा के अंदर है.
      2. यह वाई-फ़ाई चैनल पर हार्मोनिक के ओवरलैप का हिसाब लगाता है. साथ ही, अगर ओवरलैप 2.4 गीगाहर्ट्ज़ वाई-फ़ाई ओवरलैप थ्रेशोल्ड से ज़्यादा होता है, तो चैनल को असुरक्षित के तौर पर मार्क करता है.
      3. पहले 20 मेगाहर्ट्ज़ वाई-फ़ाई चैनल का पता लगाता है, जो ऊपर से आ रहे हार्मोनिक की ऊपरी सीमा के अंदर है.
      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>

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

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

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

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

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

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

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

जब कोएक्स चैनल एल्गोरिदम, असुरक्षित चैनलों का हिसाब लगा लेता है, तो अपने सिस्टम ऐप्लिकेशन को असुरक्षित चैनलों और उनकी पाबंदियों की जानकारी देने के लिए, 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)