اجتناب از کانال همزیستی Wi-Fi و شبکه تلفن همراه

ویژگی اجتناب از کانال همزیستی Wi-Fi و شبکه تلفن همراه که در Android 12 معرفی شده است، کانال‌های Wi-Fi ناامن را در مواردی که ممکن است تداخل از کانال‌های تلفن همراه یا به آن‌ها وجود داشته باشد شناسایی می‌کند و از آن‌ها استفاده نمی‌کند. این شامل میاناهایی مثل STA،‏ SoftAp،‏ Wi-Fi Direct (P2P)، و Wi-Fi Aware (NAN) می‌شود.

این صفحه موارد زیر را توضیح می‌دهد:

  • اطلاعاتی که مودم تلفن همراه باید به چارچوب Android گزارش دهد.
  • الگوریتم‌هایی که چارچوب Wi-Fi برای محاسبه کانال‌های Wi-Fi که باید اجتناب شود استفاده می‌کند.
  • جدول‌های پیکربندی که سازندگان دستگاه باید برای چارچوب Wi-Fi ارائه دهند.
  • میاناهای برنامه‌سازی کاربردی سیستم، پیکربندی‌ها، و میاناهای برنامه‌سازی کاربردی لایه انتزاع سخت‌افزار مربوط به ویژگی اجتناب از کانال.
  • رفتار چارچوب برای مدیریت اجتناب از کانال.
  • عملکرد فروشنده تراشه برای مدیریت اجتناب از کانال.
  • جزئیات پیاده‌سازی برای اجتناب از کانال.
  • آزمایش‌هایی برای تأیید رفتار اجتناب از کانال.

پس‌زمینه

برای دستگاه‌های دارای فناوری‌های سلولی مانند LTE،‏ 5G NR، و «دسترسی با پروانه کمکی» (LAA)، کانال‌های سلولی درحال استفاده می‌توانند با کانال Wi-Fi درحال استفاده تداخل ایجاد کنند. این اتفاق زمانی رخ می‌دهد که کانال‌های تلفن همراه و Wi-Fi در فاصله فرکانسی کوتاهی (کانال‌های همسایه) قرار داشته باشند یا زمانی که تداخل هارمونیک و بین‌مدولاسیون وجود داشته باشد.

این نوع تداخل زمانی مشکل‌ساز می‌شود که یک آنتن درحال انتقال و آنتن دیگر درحال دریافت هم‌زمان باشد. در این حالت، آنتن فرستنده آنتن گیرنده را اشباع می‌کند و بر کیفیت دریافت آن تأثیر می‌گذارد.

این سند فرستنده تداخل‌کننده را مهاجم و گیرنده دچار تداخل را قربانی می‌نامد. کانال Wi-Fi که یا مهاجم است یا قربانی، به‌عنوان کانال ناامن شناخته می‌شود.

ویژگی اجتناب از کانال هم‌زیستی Wi-Fi و شبکه تلفن همراه رویکردی یکپارچه برای اجتناب از کانال ارائه می‌دهد و نیاز به کد اختصاصی را که از چارچوب Wi-Fi منحرف می‌شود کاهش می‌دهد. علاوه‌براین، این ویژگی به سازندگان دستگاه اجازه می‌دهد تا این ویژگی را پیکربندی، فعال، غیرفعال، و لغو کنند.

این ویژگی با کنترل کانال‌های Wi-Fi، از کانال‌های شلوغ اجتناب می‌کند. طرح اجتناب از کانال Wi-Fi را می‌توان به‌عنوان مجموعه‌ای از چهار مرحله انتزاعی توصیف کرد:

  1. گزارش‌های مودم تغییر در بسامد تلفن همراه
  2. الگوریتم اجتناب از هم‌زیستی کانال‌های Wi-Fi ناامن را محاسبه می‌کند
  3. الگوریتم اجتناب از هم‌زیستی به سرویس Wi-Fi اطلاع می‌دهد
  4. چارچوب یا درایور کنش Wi-Fi مناسب را انجام می‌دهد

طرح اجتناب از کانال

شکل ۱. طرح اجتناب از کانال

گزارش تغییر در بسامد تلفن همراه

سرویس تلفنی کانال‌های تلفن همراه درحال استفاده را گزارش می‌کند. وقتی بسامد شبکه تلفن همراه درحال کار تغییر می‌کند، مودم این اطلاعات را ازطریق IRadio::PhysicalChannelConfig به سرویس تلفن گزارش می‌دهد. این اطلاعات شامل نشانگرهای «دسترسی کمکی پروانه‌دار» (LAA) و «تجميع شرکت مخابراتی» (CA) است.

از 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;

    /** Uplink cell bandwidth, in kHz */
    int32_t cellBandwidthUplink;
}

محاسبه کانال‌های Wi-Fi ناامن

وقتی مودم تغییر در بسامد تلفن همراه را گزارش می‌کند، الگوریتم کانال هم‌زیستی تداخل بین کانال‌های تلفن همراه و Wi-Fi را محاسبه می‌کند و تعیین می‌کند کدام کانال‌های Wi-Fi ناامن هستند.

انواع مختلفی از تداخل وجود دارد که به فرمول‌های مختلفی نیاز دارند: همسایگی و هارمونیک/بین‌مدولاسیون. به‌دلیل تفاوت‌های فیزیکی در آنتن و چیدمان بین دستگاه‌ها، الگوهای تداخل همسایگی و هارمونیک/میان‌مدولاسیون برای هر دستگاه متفاوت است. برای درنظر گرفتن این موضوع، سازندگان دستگاه باید جدول جستجویی ارائه دهند تا پارامترها را در فرمول‌های عمومی برای دو نوع تداخل وارد کنند. این پارامترها برای هر باند سلولی تعریف می‌شوند و باندهای کانال‌های سلولی فعال به آن‌ها ارجاع می‌دهند.

سقف توان حداکثر را می‌توان در جدول جستجو تعریف کرد. اگر تعریف شده باشد، کانال ناامن با سقف توان مشخص‌شده ارسال می‌کند. درغیراین‌صورت، کانال با توان کامل ارسال می‌کند.

به‌طور کلی، ویژگی اجتناب از کانال از رویکرد بهترین تلاش برای اجتناب از کانال‌های Wi-Fi ناامن برای بهینه‌سازی عملکرد استفاده می‌کند. اما در برخی موارد (برای مثال، به‌دلیل الزامات شرکت مخابراتی)، اجباری است که برخی‌از میان‌ها از کانال‌های ناامن برای برخی باندهای تلفن همراه اجتناب کنند. در چنین مواردی، محدودیت‌های اجباری به‌صورت ماسک بیتی نشان داده می‌شود که حاوی مقادیری برای ممنوع کردن کانال‌های خاصی مثل Wi-Fi Direct (P2P)،‏ SoftAp، و Wi-Fi Aware (NAN) است. درحالی‌که کانال ناامن به‌عنوان توصیه‌ای علیه استفاده از آن کانال برای همه موارد استفاده عمل می‌کند، محدودیت‌های اجباری موارد استفاده خاصی را برای اجتناب اجباری مشخص می‌کنند.

اگر همه کانال‌های باند ۲٫۴ گیگاهرتز یا ۵ گیگاهرتز به‌عنوان ناامن علامت‌گذاری شده باشند، جدول جستجو می‌تواند یک کانال ۲٫۴ گیگاهرتز پیش‌فرض یا یک کانال ۵ گیگاهرتز پیش‌فرض را برای هر باند سلولی تداخل‌کننده به‌عنوان امن‌ترین انتخاب تعریف کند. این کانال‌های پیش‌فرض زمانی که بقیه باند به‌عنوان ناامن گزارش می‌شود، به‌عنوان کانال‌های ناامن گزارش نمی‌شوند.

ملغی کردن فهرست

رویکرد فرمولی در مواردی که تداخل به‌شدت به پهنای باند وابسته است محدود است (و بنابراین کانال‌های با پهنای باند بزرگ‌تر ممکن است ناامن باشند اما کانال‌های با پهنای باند کوچک‌تر ناامن نباشند). در مواردی مانند LAA، بهتر است از محاسبات صرف‌نظر کنید و از فهرست مشخصی از کانال‌های ناامن استفاده کنید.

برای انجام این کار، می‌توانید یک فهرست ملغی‌کننده از کانال‌های ناامن را در جدول جستجو برای ورودی‌های خاص مشخص کنید. فهرست لغو در ورودی جدول نشان می‌دهد که محاسبه برای آن کانال سلولی خاص نادیده گرفته شده است. درعوض، فهرست لغو به‌طور صریح کانال‌های Wi-Fi ناامن را برای کانال سلولی مطابق مشخص می‌کند.

برای موارد حساس به پهنای باند، می‌توانید با مشخص کردن کانال‌های خاص با پهنای باند خاص در فهرست لغو، به‌طور انتخابی از پهنای باند خاصی اجتناب کنید. این به این دلیل است که هر شماره کانال Wi-Fi با پهنای باند مشخصی مطابقت دارد.

فهرست جایگزین با فهرستی از شماره‌های کانال یا کلیدواژه‌های دسته‌بندی ازپیش‌تعریف‌شده برای هر باند Wi-Fi نشان داده می‌شود:

دسته‌های ۲ گرمی:

  • ‫all (کل باند ۲٫۴ گیگاهرتز)

دسته‌های 5g:

  • all (کل باند ۵ گیگاهرتز)
  • 20mhz (کانال‌های ۲۰ مگاهرتزی ۵ گیگاهرتز)
  • ‫40mhz (کانال‌های ۴۰ مگاهرتزی ۵ گیگاهرتز)
  • ‫80mhz (کانال‌های ۸۰ مگاهرتزی ۵ گیگاهرتز)
  • ‫160mhz (کانال‌های ۵ گیگاهرتز ۱۶۰ مگاهرتز)

تداخل کانال همسایه

برای تعیین تداخل کانال همسایه، الگوریتم اجتناب از هم‌زیستی مطمئن می‌شود که فاصله ΔF بین کانال مهاجم و قربانی از آستانه مشخصی کمتر نشود.

تداخل کانال

شکل ۲. فاصله بین کانال متجاوز و کانال قربانی

آستانه با پیکربندی فیزیکی دستگاه و مقدار آستانه ارائه‌شده در ورودی جدول جستجو برای هر باند تداخل‌گر تعیین می‌شود. باند‌هایی که غیرتداخلی درنظر گرفته می‌شوند، ورودی جدول ندارند و کانال‌های ناامن نیازی به محاسبه ندارند (این حالت در اکثر مواقع صادق است).

پارامترهای تداخل همسایه

  • wifiVictimMhz: آستانه فاصله مگاهرتز برای قربانی Wi-Fi (بالاسوی سلولی)
  • ‫cellVictimMhz: آستانه فاصله مگاهرتز برای قربانی سلولی (پیوند پایین سلولی)

الگوریتم برای هر کانال سلولی فعال به این صورت عمل می‌کند:

  1. برای باند کانال، سعی می‌کند ورودی جدول جستجو را پیدا کند. اگر ورودی جدولی پیدا نشود، بدون کانال ناامن برای آن کانال سلولی برمی‌گرداند.
  2. براساس باند سلولی، مشخص می‌کند کدام باند Wi-Fi درمعرض خطر است و تداخل از کدام طرف باند می‌آید (برای مثال، کانال‌های پایین ۲٫۴ گیگاهرتز، کانال‌های بالای ۲٫۴ گیگاهرتز، کانال‌های پایین ۵ گیگاهرتز).
  3. اگر wifiVictimMhz حضور داشته باشد و کانال سلولی دارای پیوند بالادستی و

    1. اگر بخش پایین باند Wi-Fi درمعرض خطر باشد:

      1. با افزودن wifiVictimMhz به بالاترین فرکانس فراسوی سلول، حد بالای کانال‌های ناامن را پیدا می‌کند.
      2. اولین کانال Wi-Fi بیست مگاهرتزی را که لبه پایینی آن با حد هم‌پوشانی دارد پیدا می‌کند.
      3. کانال Wi-Fi، هر کانال پهنای باند بزرگ‌تر که شامل آن باشد (برای مثال، ۴۰ مگاهرتز، ۸۰ مگاهرتز)، و هر کانال پایین‌تر از همان باند را به‌عنوان کانال ناامن علامت‌گذاری می‌کند.
    2. اگر بخش بالایی باند Wi-Fi درمعرض خطر باشد:

      1. با کم کردن wifiVictimMhz از پایین‌ترین فرکانس پیوند بالادستی سلولی، حد پایین کانال‌های ناامن را پیدا می‌کند.
      2. اولین کانال Wi-Fi را که لبه بالایی آن با حد هم‌پوشانی دارد پیدا می‌کند.
      3. کانال Wi-Fi، هر کانال بزرگ‌تری که شامل آن باشد (برای مثال، ۴۰ مگاهرتز، ۸۰ مگاهرتز)، و هر کانال بالاتری از همان باند را به‌عنوان کانال ناامن علامت‌گذاری می‌کند.
  4. اگر cellVictimMhz وجود داشته باشد و کانال سلولی دارای اتصال پایین‌سو باشد:

    1. این معیار مرحله ۳ را بااستفاده از cellVictimMhz به‌عنوان آستانه انجام می‌دهد و به‌جای فراسوی سلولی، با فروسوی سلولی مقایسه می‌کند.
  5. این ویژگی سقف توان ورودی جدول را بر کانال‌های ناامن محاسبه‌شده اعمال می‌کند.

محاسبه کانال ناامن

شکل ۳. محاسبه کانال ناامن برای تداخل کانال همسایه

اعوجاج هارمونیک یا میان‌مدولاسیون

برای اعوجاج هارمونیک یا بین‌مدولاسیون، موتور هم‌زیستی محدوده سیگنال هارمونیک یا بین‌مدولاسیون را محاسبه می‌کند و درصد هم‌پوشانی آن با کانال قربانی احتمالی را ارزیابی می‌کند. اگر هم‌پوشانی از آستانه هم‌پوشانی فراتر رود، الگوریتم این وضعیت را ناامن تلقی می‌کند. محاسبه درصد هم‌پوشانی اعوجاج هارمونیک یا اعوجاج میان‌مدولاسیون در کانال قربانی با معادله زیر انجام می‌شود:

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

در مورد اعوجاج هارمونیک، الگوریتم اعوجاج هارمونیک کانال فراسوی سلولی را که کانال‌های Wi-Fi را قربانی می‌کند درنظر می‌گیرد. سپس اعوجاج بالا و اعوجاج پایین را با مقادیر هارمونیک براساس بسامدهای پیوند بالادستی سلول و درجه هارمونیک $ N $ جایگزین می‌کند.

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

محاسبه کانال ناامن اعوجاج هارمونیک

شکل ۴. محاسبه کانال ناامن برای اعوجاج هارمونیک

در مورد میان‌مدولاسیون، الگوریتم اعوجاج میان‌مدولاسیون پیوند بالایی سلول و کانال Wi-Fi را که کانال پیوند پایینی سلول را قربانی می‌کند درنظر می‌گیرد. سپس اعوجاج بالا و اعوجاج پایین را با مقادیر بین‌مدولاسیون براساس بسامدهای پیوند بالادستی سلولی، بسامدهای Wi-Fi، و دو ضریب بین‌مدولاسیون $ M $ و $ N $ جایگزین می‌کند.

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

محاسبه کانال ناامن برای اعوجاج بین‌مدولاسیون

شکل ۵. محاسبه کانال ناامن برای اعوجاج میان‌مدولاسیون

می‌توانید مقادیر $ M $، $ N $، و هم‌پوشانی را در جدول جستجو برای هر باند سلول تداخل‌کننده مشخص کنید. اگر تداخلی برای یک باند وجود نداشته باشد، مقادیر از جدول برای آن ورودی باند حذف می‌شوند. دو مجموعه از این مقادیر برای باند Wi-Fi ۲٫۴ گیگاهرتز و ۵ گیگاهرتز می‌توانند به‌طور مستقل تعریف شوند.

مشابه با الگوریتم تداخل همسایه، الگوریتم از مقدار سقف توان یکسان تعریف‌شده برای هر باند سلول تداخل‌کننده استفاده مجدد می‌کند.

الگوریتم برای هر کانال سلولی فعال به‌صورت زیر عمل می‌کند:

  1. برای باند کانال سلولی، سعی می‌کند ورودی جدول جستجویی را پیدا کند. اگر ورودی جدولی پیدا نشد، بدون کانال‌های ناامن برای این کانال برمی‌گردد.
  2. اگر پارامترها تعریف شده باشند، کانال‌های ناامن ۲٫۴ گیگاهرتز را از هارمونیک‌ها پیدا می‌کند.

    1. درجه هارمونیک N را برای ۲٫۴ گیگاهرتز پیدا می‌کند.
    2. بسامد بالای همساز و بسامد پایین همساز را براساس N و پیوند بالادستی سلول محاسبه می‌کند.
    3. اولین کانال Wi-Fi با پهنای ۲۰ مگاهرتز را که در محدوده پایین هارمونیک از پایین قرار دارد پیدا می‌کند.
    4. هم‌پوشانی هارمونیک را روی کانال Wi-Fi محاسبه می‌کند و اگر هم‌پوشانی از آستانه هم‌پوشانی Wi-Fi در باند ۲٫۴ گیگاهرتز فراتر رود، کانال را به‌عنوان ناامن علامت‌گذاری می‌کند.
    5. اولین کانال Wi-Fi‏ ۲۰ مگاهرتزی را که در محدوده بالایی هارمونیک بالایی قرار دارد پیدا می‌کند.
    6. هم‌پوشانی هارمونیک را روی کانال Wi-Fi محاسبه می‌کند و اگر هم‌پوشانی از آستانه هم‌پوشانی Wi-Fi در باند ۲٫۴ گیگاهرتز فراتر رود، کانال را به‌عنوان ناامن علامت‌گذاری می‌کند.
    7. هر کانال ۲۰ مگاهرتزی را که در این بین قرار دارد به‌عنوان کانال ناامن علامت‌گذاری می‌کند.
  3. اگر پارامترها تعریف شده باشند، کانال‌های ۵ گیگاهرتزی ناامن را از هارمونیک‌ها پیدا می‌کند.

    1. درجه هارمونیک N را برای ۵ گیگاهرتز پیدا می‌کند. اگر N برابر با ۰ باشد، به مرحله ۵ می‌رود.
    2. بسامد بالای همساز و بسامد پایین همساز را براساس N و پیوند بالادستی سلول محاسبه می‌کند.
    3. کانال‌های ناامن ۲۰ مگاهرتزی را پیدا می‌کند.

      1. اولین کانال Wi-Fi با پهنای باند ۲۰ مگاهرتز را که در محدوده پایین هارمونیک از پایین قرار دارد پیدا می‌کند.
      2. هم‌پوشانی هارمونیک را روی کانال Wi-Fi محاسبه می‌کند و اگر هم‌پوشانی از آستانه هم‌پوشانی Wi-Fi‏ ۲٫۴ گیگاهرتز فراتر رود، کانال را به‌عنوان ناامن علامت‌گذاری می‌کند.
      3. اولین کانال Wi-Fi با فرکانس ۲۰ مگاهرتز را که در محدوده بالایی هارمونیک بالایی قرار دارد پیدا می‌کند.
      4. هم‌پوشانی هارمونیک را روی کانال Wi-Fi محاسبه می‌کند و اگر هم‌پوشانی از آستانه هم‌پوشانی Wi-Fi‏ ۲٫۴ گیگاهرتز فراتر رود، کانال را به‌عنوان ناامن علامت‌گذاری می‌کند.
      5. هر کانال ۲۰ مگاهرتزی بین آن‌ها را به‌عنوان کانال ناامن با سقف توان مشخص‌شده علامت‌گذاری می‌کند.
    4. کانال‌های ناامن ۴۰ مگاهرتز، ۸۰ مگاهرتز، ۱۶۰ مگاهرتز را پیدا می‌کند

      1. مرحله ۳الف را تکرار می‌کند اما با ۴۰ مگاهرتز، ۸۰ مگاهرتز، ۱۶۰ مگاهرتز.
      2. به‌جای محاسبه هم‌پوشانی‌های کانال‌ها در لبه هارمونیک، از هم‌پوشانی‌های محاسبه‌شده از کانال‌های سازنده کوچک‌تر مجدداً استفاده می‌کند (برای مثال، اگر دو کانال ۲۰ مگاهرتزی یک کانال ۴۰ مگاهرتزی بسازند و ۳۰٪ و ۹۰٪ هم‌پوشانی داشته باشند، میانگین هم‌پوشانی برای کانال ۴۰ مگاهرتزی ۶۰٪ است).
  4. اگر پارامترها تعریف شده باشند، کانال‌های ناامن ۲٫۴ گیگاهرتزی را از میان‌مدولاسیون پیدا می‌کند.

    1. ضرایب بین‌مدولاسیون N و M را برای ۲٫۴ گیگاهرتز پیدا می‌کند.
    2. برای هر کانال Wi-Fi ۲٫۴ گیگاهرتز:

      1. بسامد پایین میان‌مدولاسیون و بسامد بالای میان‌مدولاسیون را براساس N،‏ M، پیوند بالادستی سلولی، و کانال Wi-Fi محاسبه می‌کند.
      2. هم‌پوشانی بین‌مدولاسیون را در پیوند پایین سلول محاسبه می‌کند و اگر هم‌پوشانی از آستانه هم‌پوشانی سلول ۲٫۴ گیگاهرتز فراتر رود، کانال را به‌عنوان ناامن علامت‌گذاری می‌کند.
  5. اگر پارامترها تعریف شده باشند، کانال‌های ۵ گیگاهرتزی ناامن را از میان‌مدولاسیون پیدا می‌کند.

    1. مرحله ۴ را بااستفاده از کانال‌های Wi-Fi ‏۵ گیگاهرتز و آستانه هم‌پوشانی سلول ۵ گیگاهرتز تکرار می‌کند.
  6. سقف توان ورودی جدول را روی کانال‌های ناامن محاسبه‌شده اعمال می‌کند.

نتیجه نهایی

پس‌از محاسبه هر دو مجموعه کانال ناامن ناشی از تداخل همسایه و هارمونیک، مجموعه نهایی با گرفتن اجتماع هر دو مجموعه (و انتخاب سقف توان پایین‌تر درصورت وجود تصادم) و حذف کانال‌های پیش‌فرض از مجموعه درصورت عدم اعمال محدودیت‌های اجباری محاسبه می‌شود.

الگوریتم به‌صورت زیر عمل می‌کند:

  1. اگر همه کانال‌های Wi-Fi ۲٫۴ گیگاهرتزی به‌عنوان کانال ناامن علامت‌گذاری شده باشند، کانال Wi-Fi ۲٫۴ گیگاهرتزی پیش‌فرض را از مجموعه برمی‌دارد.
  2. اگر همه کانال‌های Wi-Fi‏ ۵ گیگاهرتزی به‌عنوان کانال ناامن علامت‌گذاری شده باشند، کانال Wi-Fi‏ ۵ گیگاهرتزی پیش‌فرض را از مجموعه برمی‌دارد.
  3. مجموعه نهایی کانال‌های ناامن را برمی‌گرداند.

قالب جدول جستجو

جدول‌های جستجو در فایل XML واقع در رشته پیکربندی پوشش‌دادنی config_wifiCoexTableFilepath نشان داده می‌شود و با زبان نشانه‌گذاری طرحواره XML زیر تعریف می‌شود.


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

جدول زبان نشانه‌گذاری توسعه‌پذیر نمونه

در زیر نمونه‌ای از جدول جستجوی XML آورده شده است:


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

تجمیع حامل فرکانسی

برای «تجميع حامل» (CA)، ممکن است محدوده‌های هارمونیک یا بین‌مدولاسیون برای هر پیوند بالادست یا پایین‌دست به‌تنهایی هم‌پوشانی کافی برای ایجاد تداخل نداشته باشند، اما ممکن است درصورت ترکیب شدن هم‌پوشانی کافی ایجاد کنند. الگوریتم هر محدوده هارمونیک یا میان‌مدولاسیون را به‌طور مستقل درنظر می‌گیرد و اجتماع کانال‌های ناامن برگردانده‌شده را می‌گیرد. برای مورد میان‌مدولاسیون، این به‌معنای ارزیابی محدوده میان‌مدولاسیون هر UL روی هر DL است.

الگوریتم بین PCELL،‏ PSCELL، یا SCELL تمایزی قائل نمی‌شود و آن‌ها را یکسان درنظر می‌گیرد.

مجوز «دسترسی آسان»

«دسترسی با کمک پروانه» (LAA) به‌عنوان باند شماره ۴۶ شناسایی می‌شود. الگوریتم این گروه را مشابه گروه‌های دیگر درنظر می‌گیرد. در این مورد، کانال‌های کامل ۵ گیگاهرتز می‌توانند به‌عنوان فهرست جایگزین در جدول جستجو تنظیم شوند.

بسته به الزامات شرکت مخابراتی، الگوریتم اجتناب از کانال محدودیت‌های الزامی را برای SoftAP و Wi-Fi Direct (P2P) برای کل باند Wi-Fi ۵ گیگاهرتز تنظیم می‌کند. برای اینکه الگوریتم بتواند این مورد استفاده را مدیریت کند، مقدار پیکربندی شرکت مخابراتی restrict_5g_softap_wifi_direct_for_laa باید تعریف شود. اگر کانال سلولی روی LAA باشد و restrict_5g_softap_wifi_direct_for_laa true باشد، الگوریتم مجموعه کانال‌های ناامن را با کل باند ۵ گیگاهرتز برمی‌گرداند و پرچم‌های محدودیت اجباری را برای SoftAP و Wi-Fi Direct (P2P) تنظیم می‌کند.

اطلاع‌رسانی به سرویس Wi-Fi

پس‌از اینکه الگوریتم کانال هم‌زیستی کانال‌های ناامن را محاسبه کرد، برای ارائه کانال‌های ناامن و محدودیت‌های آن‌ها به برنامه‌های سیستم، از ساختار داده SystemApi @زیر که در چارچوب Android تعریف شده است استفاده کنید.

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<CoexUnsafeChannel> unsafeChannels,
      int restrictions);
}

انجام کنش Wi-Fi

وقتی سرویس Wi-Fi اطلاعات مربوط به مجموعه کانال‌های ناامن را دریافت می‌کند، کنش مناسب را برای اجتناب از آن کانال‌ها انجام می‌دهد. این بخش عملکرد سرویس Wi-Fi را در سناریوهای مختلف توضیح می‌دهد.

اطلاع دادن به راننده

ازآنجایی‌که درایور نقش مهمی در اجتناب از کانال دارد، ضروری است که کانال‌های ناامن به درایور و سفت‌افزار منتقل شوند. برای انجام این کار، از IWifiChip HAL API زیر استفاده کنید.

برای AIDL:

void setCoexUnsafeChannels(in CoexUnsafeChannel[] unsafeChannels,
    in int restrictions)

برای HIDL (نسخه ۱.۵ یا بالاتر):

setCoexUnsafeChannels(vec<CoexUnsafeChannel> unsafeChannels,
  bitfield<IfaceType> restrictions);

SoftAP

‫SoftAP مورد استفاده اصلی برای اجتناب از کانال ناامن است. بخش زیر سناریوهای کلیدی SoftAp را که در آن‌ها می‌توان از اجتناب از کانال با ACS استفاده کرد شرح می‌دهد. این سناریوها رفتار الگوریتم اجتناب از کانال و درایور یا سفت‌افزار را توصیف می‌کنند.

شروع SoftAP با ACS فعال (هنوز هیچ SoftAP فعالی وجود ندارد)

  1. اگر کانال‌ها ناامن باشند و محدودیت SoftAP وجود داشته باشد:

    1. این چارچوب کانال‌های ناامن را از فهرست ACS حذف می‌کند.
    2. اگر فهرست خالی باشد، چارچوب SoftAP را متوقف می‌کند.
  2. اگر کانال‌ها ناامن باشند و هیچ محدودیتی وجود نداشته باشد:

    1. سفت‌افزار یا درایور فروشنده اولویت را به کانال‌های امن نسبت‌به کانال‌های ناامن می‌دهد.

SoftAP با ACS فعال‌شده راه‌اندازی شده است و کانال‌های ناامن به‌روز شده‌اند

  1. اگر کانال SoftAP ناامن باشد و محدودیت SoftAP وجود داشته باشد:

    1. چارچوب با برداشتن کانال‌های ناامن، فهرست ACS را به‌روز می‌کند.
    2. اگر فهرست خالی باشد، چارچوب SoftAP را می‌بندد.
  2. اگر کانال SoftAP ناامن باشد و هیچ محدودیتی وجود نداشته باشد:

    1. چارچوب هیچ اقدامی انجام نمی‌دهد. اگر اجتناب از کانال‌های ناامن امکان‌پذیر نباشد، فروشنده راه‌انداز یا میان‌افزار از کانال‌های ناامن اجتناب می‌کند یا سقف توان را اعمال می‌کند.

‫Wi-Fi Direct (همتابه‌همتا)

  1. اگر کانال‌های ناامن با محدودیت‌های Wi-Fi Direct (P2P) وجود داشته باشند:

    1. چارچوب از wpa_supplicant درخواست می‌کند تا بااستفاده از روش HAL، از کانال‌های ناامن اجتناب کندISupplicantP2pIface::setDisallowedFrequencies().
  2. اگر کانال‌های ناامن بدون محدودیت وجود داشته باشند:

    1. اگر از کانال ناامن بدون محدودیت «Wi-Fi بی‌واسطه» (P2P) استفاده شود، درایور یا میان‌افزار فروشنده سقف توان را اعمال می‌کند.

‫Wi-Fi Aware (شبکه اتصال مجاورتی)

چارچوب در انتخاب کانال برای Wi-Fi Aware (NAN) دخالت ندارد و هیچ کنش چارچوبی انجام نمی‌شود. درایور یا میان‌افزار فروشنده مسئول اجتناب از کانال Wi-Fi Aware (NAN) است.

غیرفعال کردن الگوریتم

اگر می‌خواهید پیاده‌سازی الگوریتم پیش‌فرض را غیرفعال کنید و فهرست کانال‌های ناامن خودتان را برای اجتناب ارسال کنید، رونهاد config_wifiDefaultCoexAlgorithmEnabled را پیکربندی کنید. اگر رونهاد روی false تنظیم شده باشد، الگوریتم پیش‌فرض غیرفعال می‌شود. سپس می‌توانید از الگوریتم اختصاصی خارج از باند خودتان برای تولید فهرستی از کانال‌های ناامن استفاده کنید تا بااستفاده از میانای برنامه‌سازی کاربردی سیستم زیر، به چارچوب متصل شوند.

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

پیاده‌سازی را اعتبارسنجی کنید

برای اعتبارسنجی پیاده‌سازی ویژگی اجتناب از کانال همزیستی Wi-Fi و سلولی، از آزمایش‌های زیر استفاده کنید.

آزمایش‌های CTS

  • WifiManagerTest.java
    • testCoexMethodsShouldFailNoPermission()
    • testListenOnCoexUnsafeChannels()

آزمایش‌های ACTS

  • WifiManagerTest.py
    • test_set_get_coex_unsafe_channels()

آزمایش‌های VTS

  • اگر AIDL پیاده‌سازی شده باشد: wifi_chip_aidl_test.cpp
    • TEST_P(WifiChipAidlTest, SetCoexUnsafeChannels)
  • اگر HIDL پیاده‌سازی شده باشد: wifi_chip_hidl_test.cpp
    • TEST_P(WifiChipHidlTest, setCoexUnsafeChannels)