التزامن بين محطة Wi-Fi الأساسية ومحطة Wi-Fi

يتيح الإصدار 12 من نظام التشغيل Android إمكانية استخدام شبكتَي Wi-Fi في الوقت نفسه (STA/STA)، ما يسمح للأجهزة بالاتصال بشبكتَي Wi-Fi في الوقت نفسه. تتيح هذه الميزة الاختيارية الوظائف التالية:

  • الاتصال قبل قطع الاتصال: يتصل الجهاز بشبكة Wi-Fi جديدة قبل قطع الاتصال الحالي. ويؤدي ذلك إلى انتقالات أكثر سلاسة عند التبديل بين شبكات Wi-Fi.
  • الاتصال المتزامن بالشبكة المحلية فقط والإنترنت: يتصل الجهاز بشبكة محلية فقط بدون مقاطعة الاتصال الأساسي الذي يوفّر الإنترنت للجهاز.
  • الاتصال المتزامن بشبكة مقيّدة والإنترنت: يتصل الجهاز بشبكة مقيّدة (تتوفّر فقط لبعض التطبيقات ذات الامتيازات) بدون مقاطعة الاتصال الأساسي الذي يوفّر الإنترنت للجهاز.
  • (الإصدار 13 من نظام التشغيل Android أو الإصدارات الأحدث) شبكات متعدّدة متزامنة مع اتصال بالإنترنت: يتصل الجهاز بشبكتَين غير مقيّدتَين ومتاحتَين لجميع التطبيقات، كما توفّران اتصالاً بالإنترنت.

توضّح هذه الصفحة سلوك الجهاز عند تفعيل هذه الميزة وتفاصيل التنفيذ الخاصة بمصنّعي الأجهزة والمورّدين.

التنفيذ

يجب أن تتوافق الأجهزة مع ما يلي لتنفيذ التزامن بين Wi-Fi STA/STA:

  • يجب أن تتوافق شريحة Wi-Fi أو البرامج الثابتة مع اتصالَين متزامنين من نوع STA. يجب أن يتيح البرنامج الثابت جميع مجموعات القنوات والنطاقات لكلا النوعين من الاتصالات. لتجنُّب مشاكل الأداء، ننصحك باستخدام شريحة Wi-Fi متوافقة مع نظام DBS ثنائي النطاق ثنائي القناة.

  • يجب أن يتوافق الجهاز مع واجهات برمجة التطبيقات التالية في تنفيذ IWifiChip باستخدام AIDL أو HIDL.

    • 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 بشكل متزامن، ننصح بأن تستخدم التطبيقات والأُطر المخصّصة من مصنّعي المعدات الأصلية الطريقة NetworkCallback#onCapabilitiesChanged() بدلاً من WifiManager#getConnectionInfo() التي تعرض WifiInfo لشبكة واحدة فقط وتم إيقافها نهائيًا في Android 12. لمزيد من المعلومات، يُرجى الاطّلاع على Wi-Fi Network Request API للاتصال بين الأجهزة.

Make-before-break

تسمح وظيفة الاتصال قبل الفصل للأجهزة بالاتصال بشبكة Wi-Fi جديدة مع الحفاظ على اتصال شبكة Wi-Fi الحالية، ولا يتم الفصل عن الشبكة القديمة إلا بعد الاتصال بنجاح بشبكة Wi-Fi الجديدة والوصول إلى الإنترنت.

تعالج حالة الاستخدام &quot;الاتصال قبل قطع الاتصال&quot; المشاكل التالية في نظام التشغيل Android 11 والإصدارات الأقدم، حيث يجب أن يقطع الجهاز الاتصال بشبكة Wi-Fi الحالية قبل الاتصال بشبكة جديدة (قطع الاتصال قبل الاتصال).

  • عند الاتصال بشبكة جديدة، قد يكتشف الجهاز أنّ كلمة مرور Wi-Fi المحفوظة غير صحيحة أو أنّ الشبكة الجديدة لا تتيح الوصول إلى الإنترنت. ويؤدي ذلك إلى إجبار الجهاز على العودة إلى الشبكة القديمة، ما يؤدي إلى عدم توفّر اتصال Wi-Fi لفترة طويلة.

  • يتم قطع اتصال الشبكة القديمة بشكل مفاجئ، ما يعني إغلاق جميع مآخذ التوصيل. غالبًا ما تتأثر التطبيقات سلبًا بفقدان الاتصال المفاجئ، وقد يؤدي ذلك إلى عدم توفّر اتصال بالإنترنت للمستخدم لبضع ثوانٍ إلى أن يتم إنشاء الاتصال الجديد بالكامل.

  • تتغيّر الشبكة التلقائية مرّتين، من شبكة Wi-Fi القديمة إلى شبكة الجوّال، ثم من شبكة الجوّال إلى شبكة Wi-Fi الجديدة. ويؤدي ذلك إلى تفاعل التطبيقات مع تغييرات الشبكة مرتين. يجب أيضًا أن يقضي الجهاز فترة قصيرة من الوقت في استخدام بيانات شبكة الجوّال.

يتم استخدام مسار make-before-break فقط لعمليات التبديل التلقائي بين شبكات Wi-Fi التي يبدأها نظام التشغيل. تستخدِم عمليات تبديل الشبكة التي يبدأها المستخدمون مسار الإيقاف قبل التشغيل القديم، حيث يتم قطع الاتصال بالشبكة السابقة بالكامل قبل الاتصال بالشبكة الجديدة. في بعض الحالات، يتم استخدام تسلسل break-before-make حتى في عمليات التبديل التلقائية التي يبدأها نظام التشغيل، على سبيل المثال، عند التبديل بين شبكتَين تم ضبط كلتيهما لاستخدام عنوان MAC الخاص بالمصنع.

يمكن للتطبيقات التحقّق مما إذا كانت حالة الاستخدام هذه متوافقة مع الجهاز باستخدام واجهة برمجة التطبيقات WifiManager#isMakeBeforeBreakWifiSwitchingSupported().

التحقّق من صحة عملية التبديل قبل الإيقاف

للتحقّق من صحة عملية التنفيذ، فعِّل التبديل التلقائي لشبكة Wi-Fi (عن طريق التحقّق من توفّر شبكة ذات قوة إشارة أعلى من الشبكة المتصلة) وتأكَّد من أنّ الجهاز يحافظ على الاتصال الحالي أثناء الاتصال بالشبكة الجديدة. لعرض حالة كلتا واجهتَي Wi-Fi والتأكّد من أنّهما متصلتان، استخدِم الأمر التالي:

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

إذا لم تتوفّر إمكانية الاتصال بالشبكة الجديدة، يحاول الجهاز الاتصال بها مع الحفاظ على الاتصال بالشبكة الحالية، ويتوقف عن المحاولة عندما يكتشف أنّ الشبكة الجديدة لا تتضمّن إنترنت. يواصل الجهاز بعد ذلك استخدام الاتصال الحالي كشبكة Wi-Fi الأساسية.

الاتصال بالإنترنت والشبكة المحلية في الوقت نفسه

تتيح وظيفة الاتصال المتزامن بالشبكة المحلية فقط وبشبكة الإنترنت للأجهزة إمكانية الاتصال بشبكة محلية فقط، مثل الاتصال بجهاز إنترنت الأشياء، بشكل متزامن مع الشبكة الأساسية التي توفّر الإنترنت. تعمل هذه الوظيفة على تحسين تجربة المستخدم عند الاتصال مباشرةً بأجهزة إنترنت الأشياء، مثل الكاميرات، وهو أمر ممكن من خلال واجهة برمجة التطبيقات WifiNetworkSpecifier التي تمت إضافتها في Android 10.

في الإصدار 11 من نظام التشغيل Android والإصدارات الأقدم، يتم قطع اتصال الأجهزة بشبكة Wi-Fi الأساسية عند الاتصال بجهاز إنترنت الأشياء، ما يؤدي إلى فقدان الاتصال بالإنترنت (إلا إذا كان الجهاز يتضمّن نوع نقل آخر متاح، مثل بيانات الجوّال).

يمكن للتطبيقات التحقّق مما إذا كانت هذه الوظيفة متاحة على الجهاز باستخدام واجهة برمجة التطبيقات WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported().

لمزيد من المعلومات حول التغييرات التي تم إجراؤها على وظيفة الاتصال المتزامن بالشبكة المحلية فقط والإنترنت في نظام التشغيل Android 12، يُرجى الاطّلاع على واجهة برمجة التطبيقات لطلبات شبكة Wi-Fi من أجل الاتصال من جهاز إلى جهاز.

التحقّق من الاتصال بالشبكة المحلية فقط والاتصال بالإنترنت

للتحقّق من صحة هذه الدالة، استخدِم اختبار MultiStaConcurrencyWifiNetworkSpecifierTest في مجموعة أدوات اختبار التوافق (CTS).

الاتصال بالشبكة المقيدة والإنترنت في الوقت نفسه

تتيح وظيفة الاتصال المتزامن المحدود بالإنترنت للجهاز الاتصال بشكل متزامن بشبكة Wi-Fi أساسية للمستخدم وشبكة Wi-Fi محدودة لا تتوفّر إلا لتطبيقات محدّدة.

يمكن للتطبيقات التحقّق مما إذا كانت هذه الوظيفة متاحة على الجهاز باستخدام واجهة برمجة التطبيقات WifiManager#isStaConcurrencyForRestrictedConnectionsSupported().

للسماح لجهاز بالاتصال بشبكات Wi-Fi ثانوية محظورة، اتّبِع الخطوات التالية:

  1. أضِف اقتراحات شبكات Wi-Fi مع ضبط setOemPaid أو setOemPrivate على "صحيح".

  2. في ConnectivityManager، قدِّم NetworkRequest مع الإمكانات المناسبة:

عندما يرصد الجهاز نتائج بحث تتضمّن شبكة تطابق اقتراح الشبكة المدفوعة أو الخاصة من الشركة المصنّعة للجهاز، يتصل الجهاز تلقائيًا بهذه الشبكة كشبكة ثانوية.

التحقّق من صحة القيود المتزامنة واتصال الإنترنت

للتحقّق من صحة هذه الدالة، استخدِم اختبار MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest في مجموعة أدوات اختبار التوافق (CTS).

شبكات متعددة متزامنة متصلة بالإنترنت

تتوفّر ميزة الشبكات المتعددة المتزامنة مع اتصال بالإنترنت على الإصدار 13 من نظام التشغيل Android أو الإصدارات الأحدث، وتتيح للجهاز الاتصال بشكل متزامن بشبكتَين (نقاط وصول) غير مقيّدتَين (يمكن لجميع التطبيقات الوصول إليهما) وتوفّران إمكانية الوصول إلى الإنترنت.

يمكن للتطبيقات التحقّق مما إذا كانت هذه الميزة متوافقة مع الجهاز باستخدام طريقة WifiManager#isStaConcurrencyForMultiInternetSupported().

إذا كانت الميزة متاحة، يمكن للتطبيقات ذات الأذونات المميزة تفعيلها باستخدام الطريقة WifiManager#setStaConcurrencyForMultiInternetMode(int mode). تتضمّن هذه الميزة الأوضاع التالية:

لطلب البحث عن وضع الميزة النشط، استخدِم طريقة WifiManager#getStaConcurrencyForMultiInternetMode().

عندما تكون الميزة مفعّلة، اتّبِع الخطوات التالية لطلب شبكة Wi-Fi إضافية توفّر الإنترنت.

  1. أنشئ معرّف شبكة Wi-Fi باستخدام WifiNetworkSpecifier.Builder. اختَر نطاقًا للمحدّد باستخدام طريقة setBand(). لا تحدِّد معرّف SSID أو BSSID كشبكة إضافية لأنّ إطار عمل Wi-Fi يختار الشبكة المحدّدة للنطاق المحدّد.

  2. باستخدام ConnectivityManager، أنشئ NetworkRequest باستخدام إمكانية NET_CAPABILITY_INTERNET.

  3. أضِف المحدّد إلى طلب الشبكة مع مثيل NetworkCallback لتتبُّع حالة الطلب، وأرسِل الطلب إلى ConnectivityManager. إذا كانت شبكة محفوظة بالنطاق المطلوب متاحة في نتيجة الفحص وتم الاتصال بالشبكة بنجاح، سيتم استدعاء NetworkCallback.onAvailable() في عنصر معاودة الاتصال.

التحقّق من صحة شبكات متعددة متزامنة مع اتصال بالإنترنت

للتحقّق من صحة هذه الدالة، استخدِم اختبار مجموعة أدوات اختبار التوافق (CTS) التالي:

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

إرشادات حول شريحة Wi-Fi الخاصة بالبائع

بالنسبة إلى مورّدي شرائح 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 إذا كان متاحًا.
    • تجنَّب استخدام 1x1+1x1 DBS إذا أمكن ذلك بسبب التأثير المفرط في جودة الاتصال. ننصحك بدلاً من ذلك باستخدام حساب "مركز عملائي".
    • يجب أن يكون دورة التشغيل في &quot;مركز التحكّم&quot; قابلاً للضبط من خلال برنامج التشغيل أو البرامج الثابتة لمختلف الوظائف. لا يضبط إطار العمل دورة تشغيل MCC مباشرةً، بل يستعلم عن هذه المعلومات باستخدام StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent.
    • في حال استخدام MCC، ننصحك باتّباع دورات التشغيل التالية بين الاتصالات الأساسية والثانوية:

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY: %70 أساسي و% 30 ثانوي
      • DUAL_STA_NON_TRANSIENT_UNBIASED: %50 أساسي، %50 ثانوي