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

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

  • قبل از قطع : دستگاه قبل از قطع اتصال موجود به یک شبکه Wi-Fi جدید متصل می شود. این منجر به انتقال نرم‌تر هنگام جابجایی بین شبکه‌های Wi-Fi می‌شود
  • اتصال فقط محلی و اینترنت همزمان : دستگاه بدون ایجاد اختلال در اتصال ارائه دهنده اینترنت اولیه دستگاه به یک شبکه فقط محلی متصل می شود.
  • اتصال همزمان محدود و اینترنت : دستگاه به یک شبکه محدود (فقط برای برخی برنامه‌های دارای امتیاز در دسترس است) وصل می‌شود، بدون اینکه اتصال اولیه ارائه‌دهنده اینترنت دستگاه را مختل کند.
  • (Android 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. یک یا چند عملکرد را به صورت جداگانه با استفاده از روکش های Runtime Resource (غیرفعال به طور پیش فرض) فعال کنید.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

در دسترس برای 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 ، با قابلیت NET_CAPABILITY_INTERNET یک NetworkRequest ایجاد کنید.

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

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

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

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

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