Wi-Fi STA/STA همزمان

اندروید ۱۲ قابلیت همزمانی Wi-Fi STA/STA را معرفی می‌کند که به دستگاه‌ها اجازه می‌دهد همزمان به دو شبکه Wi-Fi متصل شوند. این ویژگی اختیاری عملکردهای زیر را فعال می‌کند:

  • اتصال قبل از قطع: دستگاه قبل از قطع اتصال موجود، به یک شبکه وای‌فای جدید متصل می‌شود. این امر باعث می‌شود هنگام جابجایی بین شبکه‌های وای‌فای، انتقال‌ها روان‌تر انجام شوند.
  • اتصال همزمان محلی و اینترنتی: دستگاه بدون ایجاد اختلال در اتصال اصلی اینترنت خود، به یک شبکه محلی متصل می‌شود.
  • اتصال همزمان محدود و اینترنت: دستگاه بدون ایجاد اختلال در اتصال اصلی تأمین‌کننده اینترنت دستگاه، به یک شبکه محدود (که فقط برای برنامه‌های دارای امتیاز خاص در دسترس است) متصل می‌شود.
  • (اندروید ۱۳ یا بالاتر) چندین شبکه همزمان با اتصال به اینترنت: دستگاه به دو شبکه متصل می‌شود که هر دو نامحدود و در دسترس همه برنامه‌ها هستند و اتصال به اینترنت را فراهم می‌کنند.

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

پیاده‌سازی

دستگاه‌ها برای پیاده‌سازی همزمانی Wi-Fi STA/STA باید از موارد زیر پشتیبانی کنند:

  • تراشه یا میان‌افزار Wi-Fi باید از دو اتصال STA همزمان پشتیبانی کند. میان‌افزار باید از تمام ترکیبات کانال و باند برای هر دو اتصال پشتیبانی کند. برای جلوگیری از مشکلات عملکرد، توصیه می‌کنیم از یک تراشه Wi-Fi با قابلیت DBS 2x2+2x2 استفاده کنید.

  • دستگاه باید از APIهای زیر در پیاده‌سازی AIDL یا HIDL از IWifiChip پشتیبانی کند.

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • ترکیب رابط HAL Wi-Fi باید دو رابط STA همزمان داشته باشد که با استفاده از یک قالب مشخصات مانند [{STA} <= 2, ...] در معرض نمایش قرار می‌گیرند. برای اطلاعات بیشتر، به همزمانی چند رابط Wi-Fi مراجعه کنید.

اگر این پیش‌نیازها برآورده شده باشند، همزمانی Wi-Fi STA/STA را با انجام موارد زیر پیاده‌سازی کنید:

  1. فعال کردن یک یا چند تابع به صورت جداگانه با استفاده از همپوشانی منابع زمان اجرا (به طور پیش‌فرض غیرفعال است).

    • قبل از قطع ارتباط: config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • اتصال همزمان فقط محلی و اینترنت: config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • اتصال همزمان محدود و اینترنت: config_wifiMultiStaRestrictedConcurrencyEnabled
    • چندین شبکه همزمان با اتصال به اینترنت: config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. هر پیاده‌سازی را مطابق با بخش‌های مربوطه‌اش اعتبارسنجی کنید.

برای پشتیبانی بهتر از همزمانی Wi-Fi STA/STA، توصیه می‌کنیم چارچوب‌ها و برنامه‌های سفارشی‌شده توسط OEM از متد NetworkCallback#onCapabilitiesChanged() به جای WifiManager#getConnectionInfo() استفاده کنند، که فقط WifiInfo برای یک شبکه واحد برمی‌گرداند و در اندروید ۱۲ منسوخ شده است. برای اطلاعات بیشتر، به Wi-Fi Network Request API برای اتصال نظیر به نظیر مراجعه کنید.

قبل از شکست، بسازید

قابلیت «قبل از قطع ارتباط» به دستگاه‌ها اجازه می‌دهد تا ضمن حفظ اتصال شبکه وای‌فای موجود، به یک شبکه وای‌فای جدید متصل شوند و تنها زمانی از شبکه قدیمی جدا شوند که با موفقیت به شبکه وای‌فای جدید متصل شده و به اینترنت دسترسی داشته باشند.

مورد استفاده‌ی make-before-break مشکلات زیر را در اندروید ۱۱ یا پایین‌تر برطرف می‌کند، که در آن‌ها دستگاه قبل از اتصال به یک شبکه‌ی جدید باید از شبکه‌ی وای‌فای موجود جدا شود (break-before-make).

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

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

  • شبکه پیش‌فرض دو بار تغییر می‌کند، از شبکه وای‌فای قدیمی به شبکه تلفن همراه و سپس از شبکه تلفن همراه به شبکه وای‌فای جدید. این باعث می‌شود برنامه‌ها دو بار به تغییرات شبکه واکنش نشان دهند. دستگاه همچنین باید مدت زمان کوتاهی را صرف استفاده از داده تلفن همراه کند.

جریان make-before-break فقط برای سوئیچ‌های شبکه Wi-Fi خودکار که توسط سیستم عامل آغاز می‌شوند، استفاده می‌شود. سوئیچ‌های شبکه‌ای که توسط کاربر آغاز می‌شوند، از جریان break-before-make قدیمی استفاده می‌کنند، که در آن شبکه قبلی قبل از اتصال شبکه جدید کاملاً قطع می‌شود. در موارد خاص، جریان break-before-make حتی در سوئیچ‌های خودکار که توسط سیستم عامل آغاز می‌شوند نیز استفاده می‌شود، به عنوان مثال، هنگام جابجایی بین دو شبکه که هر دو برای استفاده از آدرس MAC کارخانه پیکربندی شده‌اند.

برنامه‌ها می‌توانند با استفاده از API مربوط به WifiManager#isMakeBeforeBreakWifiSwitchingSupported() بررسی کنند که آیا این مورد استفاده در دستگاه پشتیبانی می‌شود یا خیر.

اعتبارسنجی تنظیمات قبل از قطع ارتباط

برای اعتبارسنجی پیاده‌سازی خود، یک سوئیچ خودکار شبکه Wi-Fi را فعال کنید (با تأیید شبکه‌ای با قدرت سیگنال قوی‌تر از شبکه متصل موجود) و تأیید کنید که دستگاه هنگام اتصال به شبکه جدید، اتصال موجود را حفظ می‌کند. برای مشاهده وضعیت هر دو رابط Wi-Fi و تأیید اتصال هر دو، از دستور زیر استفاده کنید:

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

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

اتصال همزمان فقط محلی و اینترنت

عملکرد اتصال همزمان فقط محلی و اینترنت به دستگاه‌ها اجازه می‌دهد تا همزمان با شبکه اصلی ارائه دهنده اینترنت، به یک اتصال فقط محلی، مانند اتصال به یک دستگاه IoT، متصل شوند. این عملکرد، تجربه کاربر را هنگام اتصال مستقیم به دستگاه‌های IoT، مانند دوربین‌ها، بهبود می‌بخشد که از طریق API WifiNetworkSpecifier که در اندروید ۱۰ اضافه شده است، امکان‌پذیر است.

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

برنامه‌ها می‌توانند با استفاده از API مربوط به WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() بررسی کنند که آیا این عملکرد در دستگاه پشتیبانی می‌شود یا خیر.

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

اتصال محلی و اتصال اینترنتی را تأیید کنید

برای اعتبارسنجی این تابع، از آزمون MultiStaConcurrencyWifiNetworkSpecifierTest CTS استفاده کنید.

اتصال همزمان محدود و اینترنت

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

برنامه‌ها می‌توانند با استفاده از API مربوط به WifiManager#isStaConcurrencyForRestrictedConnectionsSupported() بررسی کنند که آیا این عملکرد در دستگاه پشتیبانی می‌شود یا خیر.

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

  1. با تنظیم setOemPaid یا setOemPrivate روی true، پیشنهادهای شبکه Wi-Fi اضافه کنید.

  2. در ConnectivityManager ، یک NetworkRequest با قابلیت‌های مربوطه ایجاد کنید:

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

اعتبارسنجی اتصال همزمان محدود و اتصال به اینترنت

برای اعتبارسنجی این تابع، از آزمون MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest CTS استفاده کنید.

چندین شبکه همزمان با اتصال به اینترنت

قابلیت اتصال همزمان چندین شبکه به اینترنت که برای اندروید ۱۳ یا بالاتر در دسترس است، به دستگاه اجازه می‌دهد تا همزمان به دو شبکه (AP) متصل شود که هر دو نامحدود هستند (همه برنامه‌ها به آنها دسترسی دارند) و دسترسی به اینترنت را فراهم می‌کنند.

برنامه‌ها می‌توانند با استفاده از متد WifiManager#isStaConcurrencyForMultiInternetSupported() بررسی کنند که آیا این ویژگی در دستگاه پشتیبانی می‌شود یا خیر.

اگر این ویژگی پشتیبانی شود، برنامه‌های دارای امتیاز بالا می‌توانند این ویژگی را با استفاده از متد WifiManager#setStaConcurrencyForMultiInternetMode(int mode) فعال کنند. این ویژگی حالت‌های زیر را دارد:

برای پرس و جو در مورد حالت فعال ویژگی، از متد WifiManager#getStaConcurrencyForMultiInternetMode() استفاده کنید.

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

  1. با استفاده از WifiNetworkSpecifier.Builder یک مشخص‌کننده شبکه Wi-Fi ایجاد کنید. با استفاده از متد setBand() یک باند برای مشخص‌کننده انتخاب کنید. SSID یا BSSID را مشخص نکنید زیرا شبکه اضافی برای باند مشخص شده توسط چارچوب Wi-Fi انتخاب می‌شود.

  2. با استفاده از ConnectivityManager ، یک NetworkRequest با قابلیت NET_CAPABILITY_INTERNET ایجاد کنید.

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

اعتبارسنجی چندین شبکه همزمان با اتصال به اینترنت

برای اعتبارسنجی این تابع، از آزمون CTS زیر استفاده کنید:

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

دستورالعمل‌های تراشه وای‌فای فروشنده

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

تراشه Wi-Fi باید از دو اتصال همزمان STA پشتیبانی کند. این به این معنی است که از موارد زیر پشتیبانی می‌کند:

  • هر رابط STA دارای یک MAC منحصر به فرد است که توسط چارچوب قابل برنامه‌ریزی است.
  • رابط STA ثانویه می‌تواند به صورت پویا ایجاد و از بین برود.
  • هر STA می‌تواند به یک SSID متفاوت (چه در همان باند فرکانسی و چه در باند فرکانسی متفاوت) متصل شود.
  • هر STA می‌تواند به SSID یکسانی متصل شود (چه در همان باند و چه در باندی متفاوت). دو STA هرگز نباید به BSSID یکسانی متصل شوند.

ویژگی‌های حیاتی باید بر اساس هر رابط کاربری عمل کنند و باید در رابط کاربری اصلی در دسترس باشند. در زیر لیستی از این ویژگی‌های حیاتی آمده است:

  • رومینگ باید حداقل روی رابط اصلی پشتیبانی شود (با استفاده از IWifiChip.setMultiStaPrimaryConnection() تنظیم شود). اگر رومینگ روی هر دو رابط پشتیبانی شود، تصمیمات مربوط به یک اتصال نباید با اتصال همزمان دوم تداخل داشته باشد. به عنوان مثال، یک رابط نباید به BSSID اتصال دیگر رومینگ کند.

  • APF (و سایر آفلودها مانند ARP و NS) باید حداقل روی رابط اصلی (که با استفاده از IWifiChip.setMultiStaPrimaryConnection() تنظیم می‌شود) پشتیبانی شوند.

  • آمار لایه پیوند باید بر اساس هر رابط عمل کند.

موارد زیر، پیاده‌سازی‌های پیشنهادی تراشه وای‌فای برای سناریوهای مختلف همزمانی هستند:

  • تراشه Wi-Fi باید به چارچوب اجازه دهد تا IWifiChip.setMultiStaUseCase() با یکی از ثابت‌های زیر برای مشخص کردن تابع فعلی فراخوانی کند:

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY : تابع Make-Before-Break را مشخص می‌کند. کیفیت اتصال اصلی باید نسبت به اتصال ثانویه در اولویت قرار گیرد.
    • DUAL_STA_NON_TRANSIENT_UNBIASED : عملکرد اتصال همزمان فقط محلی و اینترنت یا اتصال همزمان محدود و اینترنت را مشخص می‌کند. کیفیت هر دو اتصال باید به طور مساوی اولویت‌بندی شود.
  • از آنجا که STA های همزمان دوگانه می‌توانند منجر به حالت‌های عملیاتی MCC، SCC و DBS شوند، پیاده‌سازی فروشنده باید بهترین پیکربندی رادیویی را هنگام فراخوانی چارچوب IWifiChip.setMultiStaUseCase() برای نشان دادن تابع انتخاب کند. دستورالعمل‌های کلی زیر ارائه شده است:

    • در صورت امکان، سیستم DBS دو در دو + دو در دو (2x2+2x2) ترجیح داده می‌شود.
    • در صورت امکان از 1x1+1x1 DBS به دلیل تأثیر بیش از حد بر کیفیت اتصال خودداری کنید. در عوض، MCC را ترجیح دهید.
    • چرخه وظیفه MCC باید توسط درایور یا میان‌افزار برای عملکردهای مختلف قابل تنظیم باشد. این چارچوب چرخه وظیفه MCC را مستقیماً تنظیم نمی‌کند، بلکه این اطلاعات را با استفاده از StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent جستجو می‌کند.
    • در صورت استفاده از MCC، چرخه‌های کاری زیر را بین اتصالات اولیه و ثانویه توصیه می‌کنیم:

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY : ۷۰٪ اولیه، ۳۰٪ ثانویه.
      • DUAL_STA_NON_TRANSIENT_UNBIASED : ۵۰٪ اولیه، ۵۰٪ ثانویه.