اجتناب از کانال‌های همگرای وای‌فای و تلفن همراه

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

در این صفحه به موارد زیر پرداخته شده است:

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

پیشینه

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

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

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

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

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

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

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

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

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

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

از اندروید ۱۲، فیلدهای زیر در 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;

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

محاسبه کانال‌های وای‌فای ناامن

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

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

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

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

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

فهرست نادیده گرفته شده

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

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

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

فهرست لغو شده توسط فهرستی از شماره کانال‌ها یا کلمات کلیدی از پیش تعریف شده برای هر باند وای‌فای نمایش داده می‌شود:

دسته بندی های 2g:

  • all (تمام باند ۲.۴ گیگاهرتز)

دسته بندی های 5g:

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

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

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

تداخل کانال

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

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

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

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

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

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

    1. اگر قسمت پایین باند وای‌فای در معرض خطر است:

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

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

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

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

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

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

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

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

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

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

در مورد اینترمدولاسیون، الگوریتم اعوجاج اینترمدولاسیون کانال بالارونده سلول و کانال وای‌فای را که کانال پایین‌رونده سلول را تحت تأثیر قرار می‌دهد، در نظر می‌گیرد. سپس اعوجاج بالا و اعوجاج پایین را با مقادیر اینترمدولاسیون بر اساس فرکانس‌های آپ‌لینک سلول، فرکانس‌های وای‌فای و دو ضریب اینترمدولاسیون $M$ و $N$ جایگزین می‌کند.

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

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

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

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

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

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

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

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

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

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

      1. مرحله ۳a را تکرار می‌کند اما با ۴۰ مگاهرتز، ۸۰ مگاهرتز، ۱۶۰ مگاهرتز.
      2. به جای محاسبه همپوشانی کانال‌ها در لبه هارمونیک، از همپوشانی‌های محاسبه‌شده از کانال‌های تشکیل‌دهنده کوچکتر استفاده مجدد می‌کند (برای مثال، اگر دو کانال 20 مگاهرتزی یک کانال 40 مگاهرتزی را تشکیل دهند و 30٪ و 90٪ همپوشانی داشته باشند، میانگین همپوشانی برای کانال 40 مگاهرتز 60٪ است).
  4. در صورت تعریف پارامترها، کانال‌های ناامن ۲.۴ گیگاهرتز را از مدولاسیون داخلی پیدا می‌کند.

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

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

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

نتیجه نهایی

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

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

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

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

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


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

در زیر نمونه‌ای از جدول جستجوی 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 5 گیگاهرتز تعیین می‌کند. برای اینکه الگوریتم بتواند این مورد استفاده را مدیریت کند، باید مقدار پیکربندی اپراتور restrict_5g_softap_wifi_direct_for_laa تعریف شود. اگر کانال سلولی روی LAA باشد و restrict_5g_softap_wifi_direct_for_laa true باشد، الگوریتم مجموعه‌ای از کانال‌های ناامن را با کل باند 5 گیگاهرتز برمی‌گرداند و پرچم‌های محدودیت اجباری را برای SoftAP و Wi-Fi Direct (P2P) تنظیم می‌کند.

اطلاع رسانی سرویس وای فای

پس از اینکه الگوریتم کانال coex کانال‌های ناامن را محاسبه کرد، برای ارائه کانال‌های ناامن و محدودیت‌های آنها به برنامه‌های سیستمی خود، از ساختار داده @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<CoexUnsafeChannel> unsafeChannels,
      int restrictions);
}

انجام عملیات وای فای

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

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

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

برای AIDL:

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

برای HIDL (1.5 یا بالاتر):

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

سافت ای پی

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. هیچ اقدامی توسط چارچوب انجام نمی‌شود. درایور یا میان‌افزار فروشنده، اجتناب از کانال‌های ناامن یا اعمال محدودیت توان را در صورت عدم امکان اجتناب، مدیریت می‌کند.

وای‌فای دایرکت (P2P)

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

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

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

آگاه از وای‌فای (NAN)

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

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

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

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

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

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

آزمایش‌های 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)