تجنّب شبكة Wi-Fi أو قنوات الكابلات غير المتوافقة مع شبكة الجوّال

ميزة تجنُّب قنوات الشبكة الخلوية/Wi-Fi المشترَكة، التي تم طرحها في الإصدار 12 من نظام التشغيل Android، ترصد قنوات Wi-Fi غير الآمنة وتتجنّب استخدامها في الحالات التي قد يحدث فيها تداخل من قنوات شبكة الجوّال أو إليها. ويشمل ذلك واجهات مثل STA و SoftAp وWi-Fi Direct (P2P) وWi-Fi Aware (NAN).

تتناول هذه الصفحة ما يلي:

  • المعلومات التي يجب أن يبلِغ عنها المودم الخلوي لإطار عمل Android
  • الخوارزميات التي يستخدمها إطار عمل Wi-Fi لاحتساب قنوات Wi-Fi التي يجب تجنُّبها
  • جداول الإعدادات التي يجب أن يوفّرها المصنّعون للأجهزة ضمن إطار عمل Wi-Fi
  • واجهات برمجة تطبيقات النظام والإعدادات وHAL API ذات الصلة بميزة تجنُّب القنوات
  • سلوك إطار العمل في ما يتعلّق بمعالجة تجنُّب القنوات
  • سلوك مورّدي الشرائح في ما يتعلّق بمعالجة تجنّب القنوات
  • تفاصيل التنفيذ لتجنّب القنوات
  • اختبارات للتحقّق من سلوك تجنُّب القنوات

خلفية

بالنسبة إلى الأجهزة التي تتضمّن تقنيات شبكة الجوّال، مثل LTE و5G NR وLicensed Assisted Access (LAA)، يمكن أن تتداخل القنوات الخلوية المستخدَمة مع قناة Wi-Fi المستخدَمة. ويحدث ذلك عندما تكون قنوات الجوّال وWi-Fi ضمن فاصل تردد قصير (القنوات المجاورة) أو عند حدوث تداخل توافقي و تداخل بين الترميزات.

يصبح هذا النوع من التداخل مشكلة عندما يُرسِل هوائي إشارة ويتلقّاها هوائي آخر في الوقت نفسه. في هذه الحالة، يُرسِل هوائي الإرسال إشارة قوية تُغرق هوائي الاستقبال، ما يؤثر في جودة الاستقبال.

يشير هذا المستند إلى جهاز الإرسال الذي يسبب التداخل باسم المعتدي ويشير إلى جهاز الاستقبال الذي يواجه التداخل باسم الضحية. يُشار إلى قناة Wi-Fi التي تشير إلى المُعتداء أو الضحية على أنّها قناة غير آمنة.

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

تتيح الميزة تجنب القنوات من خلال التحكم في قنوات Wi-Fi. يمكن وصف مخطط تجنب قنوات Wi-Fi في سلسلة من أربع خطوات مجردة:

  1. يُبلغ المودم عن تغيير في معدّل تكرار شبكة الجوّال
  2. تحسب خوارزمية تجنُّب الازدحام قنوات Wi-Fi غير الآمنة.
  3. تُعلم خوارزمية تجنُّب الازدحام خدمة Wi-Fi
  4. ينفِّذ إطار العمل أو برنامج التشغيل إجراء شبكة Wi-Fi المناسب

مخطّط لتجنّب القنوات

الشكل 1: مخطّط لتجنّب القنوات

الإبلاغ عن تغيير في معدّل تكرار شبكة الجوّال

تُبلغ خدمة الهاتف عن القنوات الخلوية المستخدَمة حاليًا. عند تغيُّر تردد شبكة الجوّال، يُبلغ المودم عن هذه المعلومات إلى خدمة الهاتف من خلال IRadio::PhysicalChannelConfig. وتشمل هذه المعلومات مؤشرات الوصول المُساعَد المرخّص (LAA) و تجميع مشغّلي الشبكات (CA).

بدءًا من Android 12، توفّر الحقول التالية في 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;hte

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

احتساب قنوات Wi-Fi غير الآمنة

عندما يُبلغ المودم عن حدوث تغيير في التردد الخلوي، تحسب خوارزمية قناة coex التداخل بين قنوات الجوّال وقنوات Wi-Fi وتحدد مجموعة قنوات Wi-Fi غير الآمنة.

هناك أنواع متعدّدة من التداخل تتطلّب استخدام صِيَغ مختلفة: التداخل المجاور والتداخل التوافقي/التداخل المتعدّد التردد. بسبب الاختلافات المادية في الهوائي والتخطيط بين الأجهزة، تختلف أنماط التداخل والتداخل التوافقي/البيني لكل جهاز. ولتفادي ذلك، على الشركات المصنّعة للأجهزة توفير جدول بحث لإدخال المَعلمات في الصِيَغ العامة للنوعَين من التداخل. يتم تعريف هذه الإعدادات لكل نطاق خلية ويتم الإشارة إليها من خلال نطاقات قنوات الخلايا النشطة.

يمكن تحديد الحد الأقصى للطاقة في جدول البحث. إذا تم تحديد الحد الأقصى لاستهلاك الطاقة، تنقل القناة غير الآمنة الطاقة وفقًا للحد الأقصى المقدَّم. وإذا لم يكن هناك حد أقصى لاستهلاك الطاقة، تنقل القناة الطاقة بأقصى طاقتها.

بشكل عام، تستخدم ميزة تجنُّب القنوات أفضل الجهود لتجنُّب قنوات Wi-Fi غير الآمنة من أجل تحسين الأداء. ولكن في بعض الحالات (على سبيل المثال، بسبب متطلبات مشغّل شبكة الجوّال)، يكون على واجهات معينة تجنُّب القنوات غير الآمنة لنطاقات شبكة خلوية معينة. في هذه الحالات، يتم تمثيل قيود الإلزامية على شكل قناع بت يحتوي على قيم لتحديد ما إذا كان سيتم منع قنوات معيّنة، مثل Wi-Fi Direct (P2P) وSoftAp وWi-Fi Aware (NAN). في حين أنّ القناة غير الآمنة تُعدّ اقتراحًا بعدم استخدام هذه القناة في جميع حالات الاستخدام، تشير القيود الإلزامية إلى حالات استخدام محدّدة يجبتجنّبها بشكل إلزامي.

إذا تم وضع علامة "غير آمن" على كل قناة من نطاقي 2.4 غيغاهرتز أو 5 غيغاهرتز، يمكن أن يحدِّد جدول البحث قناة تلقائية في نطاق 2.4 غيغاهرتز أو قناة تلقائية في نطاق 5 غيغاهرتز لكل نطاق خلية متداخل كخيار الأكثر أمانًا. ولا يتم إدراج هذه القنوات التلقائية كقنوات غير آمنة عندما يتم إدراج بقية النطاق على أنّه غير آمن.

قائمة إلغاء الإعدادات

يكون المنهج المعادلة محدودًا في الحالات التي يعتمد فيها التداخل بشدة على معدل نقل البيانات (وبالتالي قد تكون القنوات ذات النطاق الترددي الأكبر غير آمنة، ولكنها ليست قنوات ذات نطاق ترددي أصغر). في بعض الحالات، مثل "الإعلانات على شبكة البحث"، من المفيد تخطّي العمليات الحسابية واستخدام قائمة محدّدة بالقنوات غير الآمنة.

لإجراء ذلك، يمكنك تحديد قائمة إلغاء للقنوات غير الآمنة في جدول البحث عن إدخالات معيّنة. تشير قائمة الاستبدال في إدخال الجدول إلى أنّه تم تخطي عملية احتساب قناة الخلية هذه وأنّه تم تحديد قنوات Wi-Fi غير الآمنة لقناة الخلية المطابِقة من خلال قائمة الاستبدال.

في الحالات الحسّاسة لسعة النطاق، يمكنك تجنُّب نطاقات سرعة نقل بيانات معيّنة بشكل انتقائي من خلال تحديد قنوات معيّنة ذات نطاقات سرعة نقل بيانات معيّنة في قائمة إلغاء الإعدادات. ويعود سبب ذلك إلى أنّ كل رقم قناة Wi-Fi يتوافق مع معدل نقل بيانات محدّد.

يتم تمثيل قائمة الاستبدال بقائمة بأرقام القنوات أو الكلمات الرئيسية المحدّدة مسبقًا للفئات لكل نطاق Wi-Fi:

فئات شبكة الجيل الثاني:

  • all (نطاق 2.4 غيغاهرتز بالكامل)

فئات شبكة الجيل الخامس:

  • all (نطاق التردد 5 غيغاهرتز بالكامل)
  • 20mhz (قنوات 5 غيغاهيرتز 20 ميغاهرتز)
  • 40mhz (قنوات 40 ميغاهرتز على تردد 5 غيغاهرتز)
  • 80mhz (قنوات 5 غيغاهيرتز، 80 ميغاهرتز)
  • 160mhz (قنوات 160 ميغهرتز بتردد 5 غيغاهرتز)

التداخل مع القنوات المجاورة

لتحديد التداخل مع القناة المجاورة، تضمن خوارزمية تجنُّب ظاهرة "العمل المشترَك" أنّ المسافة ΔF بين القناة المعتدية والضحية لا تنخفض عن حدّ أدنى محدّد.

التدخل في القناة

الشكل 2: المسافة بين قناة مقتضبة وقناة ضحية

ويتم تحديد هذا الحدّ من خلال الإعداد الفعلي للجهاز وقيمة الحدّ المقدّمة في إدخال جدول البحث لكل نطاق متداخل. لا تحتوي النطاقات التي تُعتبر غير متداخلة على إدخال في الجدول، ولا يلزم احتساب قنوات غير الآمنة (في معظم الأحيان).

مَعلمات التدخل المجاور

  • wifiVictimMhz: الحد الأدنى للمسافة بالميغاهرتز لضحية شبكة Wi-Fi (رابط أعلى للخلية)
  • cellVictimMhz: حد مسافة ميغاهرتز لضحية الخلية (الرابط السفلي للخلية)

ويعمل الخوارزمية على النحو التالي لكل قناة خلية نشطة:

  1. بالنسبة إلى نطاق القناة، يحاول العثور على إدخال في جدول البحث. في حال عدم العثور على إدخال جدول، لا يتم عرض أي قنوات غير آمنة لخلية القناة هذه.
  2. استنادًا إلى نطاق شبكة الجوّال، يحدِّد نطاق Wi-Fi المعرض للخطر ويحدد جانب النطاق الذي يأتي منه التداخل (على سبيل المثال، قنوات 2.4 غيغاهرتز المنخفضة، وقنوات 2.4 غيغاهرتز العالية، وقنوات 5 غيغاهرتز المنخفضة).
  3. إذا كان wifiVictimMhz متوفّرًا وكانت قناة الخلية تحتوي على رابط اتصال بالإنترنت

    1. في حال كان الجزء السفلي من نطاق Wi-Fi معرّضًا للخطر

      1. يحدِّد الحدّ الأقصى للقنوات غير الآمنة من خلال إضافة wifiVictimMhz إلى أعلى تردد لرابط البيانات الخلوي.
      2. يبحث عن أول قناة Wi-Fi‏ 20 ميغهرتز التي تتجاوز نهايتها السفلية الحدّ المسموح به.
      3. تُستخدَم لتمييز قناة Wi-Fi وكل قناة ذات نطاق ترددي أكبر تحتوي عليها (مثل 40 ميغهرتز و80 ميغهرتز) وكل قناة أدنى من النطاق نفسه على أنّها قناة غير آمنة.
    2. في حال كان الجزء العلوي من نطاق Wi-Fi معرّضًا للخطر

      1. يبحث عن الحد الأدنى للقنوات غير الآمنة من خلال طرح wifiVictimMhz من أدنى تردد لرابط البيانات الخلوي.
      2. يبحث عن أول قناة Wi-Fi تتداخل قاعدتها العلوية مع الحد الأقصى.
      3. يُستخدَم هذا الرمز لتحديد قناة Wi-Fi وكل قناة أكبر تتضمنها (مثل 40 ميجاهرتز و80 ميجاهرتز) وكل قناة أعلى من النطاق نفسه الذي تنتمي إليه القناة غير الآمنة.
  4. إذا كانت السمة cellVictimMhz موجودة وكانت قناة الخلية تحتوي على رابط تنزيل.

    1. تنفيذ الخطوة 3 باستخدام cellVictimMhz كحدّ أدنى والمقارنة مع سرعة التحميل الخلوي بدلاً من سرعة التحميل الخلوي
  5. تُطبّق هذه الوظيفة الحدّ الأقصى لطاقة إدخال الجدول على القنوات غير الآمنة التي تم احتسابها.

احتساب القنوات غير الآمنة

الشكل 3. احتساب القناة غير الآمنة بسبب التداخل مع قناة مجاورة

التشوّه التوافقي أو التشوّه الناتج عن الالتداخل

بالنسبة إلى التشويه التوافقي أو التشويه الناتج عن الالتداخل، يحسب محرّك تقنية "العمل المشترَك في الشبكة" نطاق إشارة التشويه التوافقي أو التشويه الناتج عن الالتداخل ويقيم المئة التداخل الذي يحدث مع قناة محتملة تتلقّى التشويش. إذا تجاوز التداخل الحدّ الأقصى للتداخل، تعتبر الخوارزمية هذا الموقف غير آمن. يتم حساب ‎ النسبة المئوية لتداخل التشوه التوافقي أو التشوه الناتج عن الالتداخل بين الطورَين ‎ في القناة المتأثرة باستخدام المعادلة التالية:

$$ overlap = \frac{min(distortion_{high}, victim_{high}) - max(distortion_{low}, victim_{low})}{victim_{bandwidth}} $$

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

$$ harmonic_{high} = N * uplink_{high} $$
$$ harmonic_{low} = N * uplink_{low} $$

التشوّه التوافقي لحساب القنوات غير الآمنة

الشكل 4: احتساب قناة غير آمنة للتشوّه التوافقي

في حالة الالتداخل، تأخذ الخوارزمية في الاعتبار الالتداخل التشويش في قناة الربط الخلوي وقناة Wi-Fi التي تؤثر سلبًا في قناة الربط الخلوي. بعد ذلك، يتم استبدال التشويه العالي والتشويه المنخفض بقيم الالتداخل التوافقي استنادًا إلى ترددات الربط الخلوي وترددات Wi-Fi ومعاملَي الالتداخل التوافقي $ M $ و$ N $.

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

تشويه الالتداخل بين القنوات في عملية احتساب القناة غير الآمنة

الشكل 5: حساب القناة غير آمن للتشويه البيني

يمكنك تحديد قيم $ M $ و$ N $ والتداخل في جدول البحث لكل نطاق خلية مسبب للتشويش. إذا لم يكن هناك تداخل في أحد النطاقات، يتم حذف القيم من الجدول الخاص بإدخال هذا النطاق. يمكن تحديد مجموعتَين من هذه القيم لنطاقَي Wi-Fi 2.4 غيغاهيرتز و5 غيغاهيرتز بشكل مستقل.

على غرار خوارزمية التداخل المجاور، تعيد الخوارزمية استخدام قيمة الحد الأقصى للطاقة نفسها المحدّدة لكل نطاق خلية متداخل.

تعمل الخوارزمية على النحو التالي لكل قناة خلية نشطة:

  1. بالنسبة إلى نطاق قناة الخلية، يحاول العثور على إدخال جدول بحث. في حال عدم العثور على أي إدخال في الجدول، لا يتم عرض أي قنوات غير آمنة لهذه القناة.
  2. يعثر على القنوات غير الآمنة بتردد 2.4 غيغاهرتز من خلال الأنظمة التوافقية في حال تحديد المَعلمات.

    1. يبحث عن الدرجة التوافقية N لتردد 2.4 غيغاهرتز.
    2. لحساب التردد العالي التوافقي والتردد المنخفض التوافقي استنادًا إلى N والرابط العلوي للخلية.
    3. يبحث عن أول قناة Wi-Fi‏ 20 MHz ضمن الحدّ المنخفض للتوافق التوافقي القادم من الأسفل.
    4. تحسب تداخل التوافق مع قناة Wi-Fi وتضع علامة على القناة باعتبارها غير آمنة إذا تجاوز التداخل حد تداخل Wi-Fi بتردد 2.4 غيغاهيرتز.
    5. يتم العثور على أول قناة Wi-Fi بتردد 20 ميغاهرتز وتقع ضمن الحد الأقصى للأصوات التوافقية الصادرة من الأعلى.
    6. تُحتسب هذه الوظيفة تداخل التوافقية في قناة Wi-Fi وتصنِّف القناة على أنّها غير آمنة إذا تجاوز التداخل الحدّ الأقصى لتداخل Wi-Fi عند تردد 2.4 غيغاهرتز.
    7. يتم وضع علامة على كل قناة بتردد 20 ميغهرتز بين النطاقَين على أنّها قناة غير آمنة.
  3. يعثر على القنوات غير الآمنة في نطاق التردد 5 GHz من التوافقيات في حال تحديد المَعلمات.

    1. للعثور على الدرجة التوافقية N بتردد 5 غيغاهرتز. إذا كان N يساوي 0، يتم التخطّي إلى الخطوة 5.
    2. لحساب التردد العالي التوافقي والتردد المنخفض التوافقي استنادًا إلى N والرابط العلوي للخلية.
    3. يرصد القنوات غير الآمنة التي تعمل بتردد 20 ميغهرتز.

      1. يبحث عن أول قناة Wi-Fi ذات تردد 20 MHz ضمن الحدّ الأدنى للتوافقية مع الترددات التوافقية القادمة من الأسفل.
      2. تُحتسب هذه السمة تداخل التوافقية في قناة Wi-Fi ويُصنَّف تداخل القناة على أنّه غير آمن إذا تجاوز الحدّ الأقصى لتداخل Wi-Fi بتردد 2.4 غيغاهرتز.
      3. يبحث عن أول قناة Wi-Fi‏ 20 MHz ضمن الحد الأقصى للتوافقية القادمة من الأعلى.
      4. تُحتسب هذه السمة تداخل التوافقية في قناة Wi-Fi ويُصنَّف تداخل القناة على أنّه غير آمن إذا تجاوز الحدّ الأقصى لتداخل Wi-Fi بتردد 2.4 غيغاهرتز.
      5. وضع علامة على كل قناة تبلغ ترددها 20 MHz بين النطاقَين على أنّها قناة غير آمنة مع الحد الأقصى للطاقة المحدّد
    4. العثور على القنوات غير الآمنة التي تعمل بتردد 40 ميغاهرتز أو 80 ميغاهرتز أو 160 ميغاهرتز

      1. كرِّر الخطوة 3(أ) ولكن مع 40 ميغاهرتز و80 ميغاهرتز و160 ميغاهرتز.
      2. بدلاً من احتساب التداخلات بين القنوات عند الحدّ الأدنى للتوافق، تتم إعادة استخدام التداخلات المحسوبة من القنوات المكوّنة الأصغر حجمًا (على سبيل المثال، إذا كانت قناتان بتردد 20 ميغهرتز تكوّنان قناة بتردد 40 ميغهرتز وتتداخلان بنسبة% 30 و% 90، يكون متوسط التداخل% 60 للقناة التي تبلغ ترددها 40 ميغهرتز).
  4. يعثر على القنوات غير الآمنة التي تعمل بتردد 2.4 غيغاهرتز من خلال التأثير المتبادل إذا تم تحديد المَعلمات.

    1. يحدِّد معاملات الالتداخل N وM لتردد 2.4 غيغاهرتز.
    2. بالنسبة إلى كل قناة Wi-Fi بسرعة 2.4 غيغاهرتز:

      1. لحساب التردّد المنخفض والتردد العالي للدمج المتعدد استنادًا إلى إشارات N وM والرابط الأعلى للخلية وقناة Wi-Fi.
      2. تحسب التداخل بين التعديل البيني على الرابط السفلي للخلية وتضع علامة على القناة على أنّها غير آمنة إذا تجاوز التداخل بين 2.4 غيغاهيرتز لحد تداخل الخلية.
  5. يبحث عن قنوات 5 غيغاهرتز غير الآمنة من خلال الالتداخل إذا كانت المَعلمات محددة.

    1. يكرّر الخطوة 4 باستخدام قنوات Wi-Fi بتردد 5 غيغاهرتز وحدّ التداخل مع الخلايا بتردد 5 غيغاهرتز.
  6. تُطبّق هذه الوظيفة الحدّ الأقصى لطاقة إدخال الجدول على القنوات غير الآمنة التي تم احتسابها.

النتيجة النهائية

بعد احتساب كلتا مجموعتَي القنوات غير الآمنة من التداخل المجاور والمتناغم، يتم احتساب المجموعة النهائية من خلال تجميع كلتا المجموعتَين (واختيار الحد الأدنى للطاقة في حال حدوث تداخلات) وإزالة القنوات التلقائية من المجموعة في حال عدم تطبيق أي قيود إلزامية.

تعمل الخوارزمية على النحو التالي:

  1. إذا تم وضع علامة على كل قناة Wi-Fi ذات تردد 2.4 غيغاهرتز كقناة غير آمنة، تتم إزالة channel قناة Wi-Fi التلقائية ذات التردد 2.4 غيغاهرتز من المجموعة.
  2. إذا تم وضع علامة على كل قناة Wi-Fi ذات تردد 5 غيغاهرتز كقناة غير آمنة، تتم إزالة قناة Wi-Fi التلقائية ذات تردد 5 غيغاهرتز من المجموعة.
  3. تعرض المجموعة النهائية من القنوات غير الآمنة.

تنسيق جدول البحث

يتم تمثيل جداول البحث في ملف XML يقع في سلسلة الإعدادات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)، قد لا تؤدي نطاقات التوافقية أو التوافق التوافقي لكل من إشارة uplink أو downlink إلى تداخل كافٍ للتسبب في تداخلٍ مستقل، ولكن قد تؤدي إلى تداخل كافٍ عند دمجها. تأخذ الخوارزمية في الاعتبار كل نطاق توافقي أو نطاق تفاعل بين الترددات بشكل مستقل وتأخذ اتحاد القنوات غير الآمنة التي تم عرضها. بالنسبة إلى حالة التعديل البيني، هذا يعني تقييم نطاق التعديل البيني لكل UL على كل DL.

لا تميّز الخوارزمية بين PCELL أو PSCELL أو SCELL وتتعامل معهم على أنّهم متساوون.

الوصول المدعوم بالترخيص

يتم تحديد تقنية "الوصول بمساعدة الترخيص" (LAA) على أنّها النطاق رقم 46. تتعامل الخوارزمية مع هذا النطاق بالطريقة نفسها التي تتعامل بها مع النطاقات الأخرى. في هذه الحالة، يمكن ضبط قنوات التردد 5 غيغاهرتز بالكامل كقائمة إلغاء في جدول البحث.

استنادًا إلى متطلبات مشغّل شبكة الجوّال، تضع خوارزمية تجنُّب القنوات قيودًا إلزامية على SoftAP وWi-Fi Direct (P2P) في نطاق Wi-Fi بالكامل بتردد 5 غيغاهرتز. لكي تتمكّن الخوارزمية من معالجة حالة الاستخدام هذه، يجب تحديد قيمة carrier config‏ restrict_5g_softap_wifi_direct_for_laa. إذا كانت قناة الخلية مفعَّلة في LAA وكان restrict_5g_softap_wifi_direct_for_laa هو true، تعرض الخوارزمية مجموعة القنوات غير الآمنة مع نطاق 5 غيغاهرتز بالكامل وتضبط علامات القيود الإلزامية لـ SoftAP وWi-Fi Direct (P2P).

إبلاغ خدمة Wi-Fi

بعد أن تحسب خوارزمية قناة البث المشترك القنوات غير الآمنة، يمكنك استخدام بنية البيانات التالية @SystemApi المحدّدة في إطار عمل Android لتوفير القنوات غير الآمنة والقيود المفروضة عليها في تطبيقات النظام.

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<CoexUnsafeChannels> unsafeChannels, int restrictions);
}

تنفيذ إجراء بشأن شبكة Wi-Fi

عندما تتلقّى خدمة Wi-Fi معلومات عن مجموعة القنوات غير الآمنة، تتّخذ الإجراء المناسب لضمان تجنُّب هذه القنوات. يصف هذا القسم سلوك خدمة Wi-Fi في سيناريوهات مختلفة.

إبلاغ السائق

ولأنّ برنامج التشغيل يلعب دورًا رئيسيًا في تجنُّب القنوات، من الضروري إعلامه بالقنوات غير الآمنة ونقل المعلومات إلى البرامج الثابتة. لإجراء ذلك، استخدِم واجهة برمجة التطبيقات IWifiChip HAL API التالية.

بالنسبة إلى لغة تعريف واجهة نظام Android (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. لا يتّخذ إطار العمل أي إجراء. يتعامل ملف تعريف السائق أو البرامج الثابتة للمورّد مع تجنُّب القنوات غير الآمنة أو تطبيق الحد الأقصى لاستهلاك الطاقة إذا لم يكن تجنُّبها ممكنًا.

اتصال Wi-Fi المباشر (P2P)

  1. إذا كانت هناك قنوات غير آمنة تفرض قيود على اتصال Wi-Fi المباشر (P2P).

    1. يطلب إطار العمل wpa_supplicant لتجنُّب القنوات غير الآمنة باستخدام طريقة HAL ISupplicantP2pIface::setDisallowedFrequencies().
  2. إذا كانت هناك قنوات غير آمنة بدون قيود

    1. يطبّق برنامج تشغيل المورّد أو البرامج الثابتة الحد الأقصى للطاقة في حال استخدام قناة غير آمنة بدون تقييد "الاتصال المباشر عبر Wi-Fi" (P2P).

Wi-Fi Aware (الاتصال المباشر بمحطات لاسلكية مجاورة)

لا يشارك إطار العمل في اختيار القناة لتقنية Wi-Fi Aware (NAN) ولا يتم اتخاذ أي إجراء في إطار العمل. يتولّى برنامج تشغيل أو البرامج الثابتة الخاصَين بالمورّد مسؤولية تجنُّب قناة Wi-Fi Aware (NAN).

إيقاف الخوارزمية

إذا كنت تريد إيقاف تنفيذ الخوارزمية التلقائية واستخدام قائمة القنوات غير الآمنة التي أنشأتها، عليك ضبط العنصر المتراكب config_wifiDefaultCoexAlgorithmEnabled. في حال ضبط التراكب على خطأ، يتم إيقاف الخوارزمية التلقائية. يمكنك بعد ذلك استخدام خوارزميتك الخاصة خارج النطاق لإنشاء قائمة بالقنوات غير الآمنة لربطها بإطار العمل باستخدام واجهة برمجة تطبيقات النظام التالية.

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

التحقّق من صحة التنفيذ

للتحقّق من تنفيذ ميزة تجنُّب قنوات Wi-Fi أو قنوات الكابلات غير المتوافقة مع شبكة الجوّال، استخدِم الاختبارات التالية.

اختبارات 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)