تجنب قناة Wi-Fi / الخلوية Coex

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

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

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

خلفية

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

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

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

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

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

  1. تقارير المودم تتغير في التردد الخلوي
  2. تقوم خوارزمية تجنب Coex بحساب قنوات Wi-Fi غير الآمنة
  3. تُعلم خوارزمية تجنب Coex خدمة 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;
}

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

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

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

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

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

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

تجاوز القائمة

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

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

بالنسبة للحالات الحساسة لعرض النطاق الترددي، يمكنك تجنب نطاق ترددي معين بشكل انتقائي عن طريق تحديد قنوات معينة بعروض نطاق ترددي معينة في قائمة التجاوز. وذلك لأن كل رقم قناة Wi-Fi يتوافق مع نطاق ترددي محدد.

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

فئات 2G:

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

فئات 5G:

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

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

لتحديد تداخل القناة المجاورة، تتأكد خوارزمية تجنب التعاون المشترك من أن المسافة Δ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 ميجا هرتز والتي تقع ضمن الحد الأدنى للتوافقي القادم من الأسفل.
    4. يحسب تداخل التوافقي عبر قناة Wi-Fi ويضع علامة على القناة باعتبارها غير آمنة إذا تجاوز التداخل حد تداخل Wi-Fi بتردد 2.4 جيجا هرتز.
    5. ابحث عن أول قناة Wi-Fi بتردد 20 ميجا هرتز والتي تقع ضمن الحد الأعلى للتوافقي القادم من الأعلى.
    6. يحسب تداخل التوافقي عبر قناة Wi-Fi ويضع علامة على القناة باعتبارها غير آمنة إذا تجاوز التداخل حد تداخل Wi-Fi بتردد 2.4 جيجا هرتز.
    7. يضع علامة على كل قناة بتردد 20 ميجاهرتز بينهما كقناة غير آمنة.
  3. يبحث عن قنوات 5 جيجا هرتز غير الآمنة من التوافقيات إذا تم تحديد المعلمات.

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

      1. ابحث عن أول قناة Wi-Fi بتردد 20 ميجا هرتز والتي تقع ضمن الحد الأدنى للتوافقي القادم من الأسفل.
      2. يحسب تداخل التوافقي عبر قناة Wi-Fi ويضع علامة على القناة باعتبارها غير آمنة إذا تجاوز التداخل حد تداخل Wi-Fi بتردد 2.4 جيجا هرتز.
      3. ابحث عن أول قناة Wi-Fi بتردد 20 ميجا هرتز والتي تقع ضمن الحد الأعلى للتوافقي القادم من الأعلى.
      4. يحسب تداخل التوافقي عبر قناة Wi-Fi ويضع علامة على القناة باعتبارها غير آمنة إذا تجاوز التداخل حد تداخل Wi-Fi بتردد 2.4 جيجا هرتز.
      5. يتم وضع علامة على كل قناة بتردد 20 ميجاهرتز بينهما كقناة غير آمنة بغطاء الطاقة المحدد.
    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 جيجا هرتز كقناة غير آمنة، فسيتم إزالة قناة 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)، قد لا تنتج نطاقات التوافقي/التشكيل البيني لكل وصلة صاعدة/وصلة هابطة تداخلًا كافيًا لإحداث تداخل بشكل مستقل، ولكنها قد تنتج تداخلًا كافيًا عند دمجها. تأخذ الخوارزمية في الاعتبار كل نطاق توافقي/تشكيل بيني بشكل مستقل وتأخذ اتحاد القنوات غير الآمنة التي تم إرجاعها. بالنسبة لحالة التشكيل البيني، يعني هذا تقييم مدى التشكيل البيني لكل UL على كل DL.

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

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

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

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

إعلام خدمة الواي فاي

بعد أن قامت خوارزمية قناة coex بحساب القنوات غير الآمنة، لتزويد تطبيقات النظام لديك بالقنوات غير الآمنة وقيودها، استخدم بنية بيانات @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 التالي.

بالنسبة لـ AIDL:

void setCoexUnsafeChannels(in CoexUnsafeChannel[] unsafeChannels,
  in int restrictions)

بالنسبة لـ HIDL (1.5 أو أعلى):

setCoexUnsafeChannels(vec<CoexUnsafeChannel> unsafeChannels,
  bitfield<IfaceType> restrictions);

com.softAP

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. لم يتم اتخاذ أي إجراء من قبل الإطار. يتعامل برنامج التشغيل/البرنامج الثابت الخاص بالمورد مع تجنب القنوات غير الآمنة أو تطبيق غطاء الطاقة إذا لم يكن التجنب ممكنًا.

واي فاي مباشر (P2P)

  1. إذا كانت هناك قنوات غير آمنة مع قيود Wi-Fi Direct (P2P).

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

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

مدرك لشبكة Wi-Fi (NAN)

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

تعطيل الخوارزمية

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

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

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

للتحقق من صحة تنفيذك لميزة تجنب قناة Wi-Fi/الاتصال الخلوي، استخدم الاختبارات التالية.

اختبارات سي تي إس

  • WifiManagerTest.java

    • testCoexMethodsShouldFailNoPermission()
    • testListenOnCoexUnsafeChannels()

اختبارات الأفعال

  • 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)