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

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

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

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

پیاده سازی

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

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

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

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

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

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

    • Make-Before-Break : config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • اتصال همزمان محلی و اینترنت : config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • اتصال همزمان محدود و اینترنت : config_wifiMultiStaRestrictedConcurrencyEnabled
    • چندین شبکه همزمان با اتصال به اینترنت : config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. هر پیاده سازی را همانطور که در بخش های مربوطه در زیر توضیح داده شده است اعتبار سنجی کنید.

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

درست کردن قبل از شکستن

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

مورد استفاده make-fore-break مشکلات زیر را در Android 11 یا پایین‌تر برطرف می‌کند، جایی که دستگاه باید قبل از اتصال به شبکه جدید از شبکه Wi-Fi موجود جدا شود (قطع قبل از ساخت).

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

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

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

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

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

اعتبارسنجی ساخت قبل از شکست

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

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

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

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

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

در Android 11 و پایین‌تر، دستگاه‌ها هنگام اتصال به دستگاه IoT از شبکه Wi-Fi اولیه جدا می‌شوند و در نتیجه اتصال اینترنت قطع می‌شود (مگر اینکه دستگاه دارای نوع انتقال دیگری مانند داده‌های سلولی باشد).

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

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

اعتبارسنجی اتصال فقط محلی و اینترنت

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

  • CTS: MultiStaConcurrencyWifiNetworkSpecifierTest
  • ACTS: WifiStaConcurrencyNetworkRequestTest

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

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

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

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

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

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

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

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

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

  • CTS: MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
  • ACTS: WifiStaConcurrencyNetworkRequestTest

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

برای Android 13 یا بالاتر موجود است، شبکه‌های چندگانه همزمان با ویژگی اتصال به اینترنت به دستگاه اجازه می‌دهد همزمان به دو شبکه (AP) متصل شود که هر دو نامحدود هستند (همه برنامه‌ها دسترسی دارند) و دسترسی به اینترنت را فراهم می‌کنند.

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

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

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

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

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

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

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

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

برای تایید این تابع، از تست 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 برای سناریوهای مختلف همزمان توصیه می شود:

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

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

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

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY : 70٪ اولیه، 30٪ ثانویه.
      • DUAL_STA_NON_TRANSIENT_UNBIASED : 50٪ اولیه، 50٪ ثانویه.