تفعيل الخدمات الإضافية للمكوّن الإضافي الجديد للمصنّع الأصلي للجهاز في Android 14 تهيئة بعض مكونات السيارة. بالنسبة إلى المحتوى الصوتي على وجه التحديد، خدمات المكونات الإضافية، التي تمكّن المصنّعين الأصليين للأجهزة من إجراء ضبط مرن إدارة الصوت على أجهزة AAOS:
- التحكّم في التركيز الصوتي
- التحكّم في مستوى الصوت وكتم الصوت
- التحكّم في تجنُّب التداخل مع أصوات أخرى
بنية خدمة المكونات الإضافية للسيارة
يقدِّم الشكل التالي نظرة عامة على خدمات السيارات وعلاقتها. إلى خدمة سيارات المصنّع الأصلي للجهاز. وعلى غرار عمليات التطبيق وعملية خدمة السيارات، وتشغل عملية خدمة المصنّع الأصلي للسيارة مساحة المعالجة الخاصة بها.
تبدأ خدمة السيارة خدمة سيارة المصنّع الأصلي للجهاز من خلال العثور على المكون المحدد في
config_oemCarService
إذا كانت الإعدادات فارغة، هذا يعني أنّ خدمة المصنّع الأصلي للجهاز غير متوفّرة
ولا يتم بدء أي خدمة. يجب تمديد المكوِّن
OemCarService:
يجب أن تستبدل خدمة الصوت في السيارة واجهات برمجة التطبيقات للحصول على المصنّع الأصلي للجهاز للصوت في السيارة.
الخدمة:
public final class OemCarServiceImp extends OemCarService {
@Override
public OemCarAudioFocusService getOemAudioFocusService();
@Override
public OemCarAudioDuckingService getOemAudioDuckingService();
@Override
public OemCarAudioVolumeService getOemAudioVolumeService();
}
بالنسبة
مثال، راجِع
تطبيق الاختبار المرجعي المحدد في
packages/services/Car/tests/OemCarServiceTestApp
وعلى الرغم من بدء تشغيل الخدمة عن طريق خدمة السيارات، لا يتم ذلك تلقائيًا.
تكتسب الأذونات المتاحة للخدمة الصوتية للسيارة. وبناءً على ذلك،
يجب الحصول على الإذن الذي تطلبه خدمات المصنّع الأصلي للجهاز مع
الآلية. على سبيل المثال، راجع
packages/services/Car/data/etc/com.android.car.oemcarservice.testapp.xml
خدمة صوتية للسيارات مع بنية المصنّع الأصلي للجهاز
في نظام التشغيل AAOS، تدير خدمة الصوت في السيارة الإجراءات التالية:
- التوجيه الصوتي
- التركيز على الصوت
- تجنّب التداخل مع أصوات أخرى
- الصوت وكتم الصوت
وقبل الإصدار Android 14، كان هذا السلوك ثابتًا إلى حد كبير يمكن تعديله فقط من خلال الإعدادات، وإن كان ذلك في عدد محدود جدًا من الحالات. قدّم Android 14 آلية لضبط الصوت في السيارة للاتصال بمكوِّن يحدده المصنّع الأصلي للجهاز ويدير ما يلي:
- التركيز على الصوت
- تجنّب التداخل مع أصوات أخرى
- الصوت وكتم الصوت
يوضح الشكل التالي بنية مبسّطة لخدمة الصوت في السيارة أو خدمة المصنّع الأصلي للجهاز للسيارات. تحدِّد خدمة الصوت في السيارة عناصر جذب مختلفة يمكن الاتصال بها خدمة الصوت من المصنّع الأصلي للجهاز لإدارة سلوك الصوت. أما الثانية فتحدث فقط إذا تم تحديد مكوّن الخدمة الصوتية للسيارة من المصنّع الأصلي للجهاز. بخلاف ذلك، فإن صفحة تستخدم الخدمة الصوتية في السيارة السلوك التلقائي.
للتأكّد من أنّ خدمة الصوت في السيارة وخدمة الصوت من المصنّع الأصلي للجهاز مفعّلة دائمًا في كل مكالمة، تمرر خدمة الصوت في السيارة الأجزاء المطلوبة من الحالة الحالية لحزمة الصوت في خدمة الصوت لدى المصنّع الأصلي للجهاز للسيارة على سبيل المثال، عندما وتعترض خدمة الصوت في السيارة طلبًا لتقييم تركيز الصوت، وتمرر الحالة الحالية للحزمة إلى خدمة الصوت من المصنّع الأصلي للجهاز للسيارة. الحالة الحالية تتضمن حامل التركيز الحالي والخسائر الحالية في التركيز. الخسائرون في التركيز هم طلبات التركيز التي لا تزال جزءًا من الحزمة ولكنها فقدت مؤقتًا التركيز.
يجب أن تدير خدمة الصوت في السيارة كل الأنشطة الصوتية في السيارة. إذا كانت السيارة لا تدير خدمة الصوت بعض أجزاء من سلوك المستخدم، فإن المعلومات المعروضة على خدمة الصوت من المصنّع الأصلي للجهاز للسيارة غير مكتملة. على سبيل المثال، إذا يستبدل المصنّع الأصلي للجهاز معالجة التركيز الصوتي في خدمة السيارة من خلال التسجيل سياسة التركيز الصوتي الخاصة بها، فلن تتمكن خدمة الصوت في السيارة من توفير معلومات خدمة الصوت للمصنّع الأصلي للجهاز للسيارة. يمكن أن يؤثر هذا الإجراء في قدرة السيارة. خدمة صوتية من المصنِّع الأصلي للجهاز لاتخاذ القرارات، لأنّها قد تفتقر إلى المعلومات غير المرئية. مع خدمة الصوت في السيارة.
لاتخاذ إجراءات، تتصل الخدمة الصوتية للسيارة بخدمات المصنّع الأصلي للجهاز. هذه المكالمات عبر العمليات، الأمر الذي يتطلب الاتصال بين العمليات (IPC). التواصل البيني للعمليات (IPC) يضيف وقت الاستجابة إلى كل مكالمة. من المهم تقليل وقت الاستجابة في خدمة المصنّع الأصلي للجهاز.
نظرًا لحظر المكالمات الصوتية إلى خدمة المصنّع الأصلي للجهاز للسيارة، فإن خدمة المصنّع الأصلي للجهاز يجب ألا يتم استدعاء خدمة الصوت في السيارة بناءً على تقييمات واجهة برمجة التطبيقات المباشرة. بدلاً من ذلك، كما توفر خدمة الصوت في السيارة المعلومات اللازمة بحيث يمكن إجراء المكالمات بين فإن عمليتين تحتاجان فقط إلى السفر في اتجاه واحد.
تعريفات خدمات صوتية للسيارة من المصنّع الأصلي للجهاز
خدمة تركيز صوت السيارة من المصنّع الأصلي للجهاز
تدير خدمة الصوت في السيارة طلبات التركيز الصوتي من التطبيقات عن طريق التسجيل أداة معالجة تركيز سياسة الصوت تمتلك خدمة الصوت في السيارة آلية لإدارة سلوك التركيز بناءً على القيمة الثابتة مصفوفة التفاعل. تحدد المصفوفة ثلاثة أنواع مختلفة من التفاعلات:
التفاعل المتزامن: يمكن للمالكين التركيز على الحفاظ على التركيز الوقت.
التفاعلات الحصرية: يتم التركيز على طلب التركيز الوارد من الحامل الحالي للتركيز.
رفض التفاعل: تم رفض طلب التركيز الوارد استنادًا إلى صاحب التركيز الحالي.
وفي حين أن هذا يكفي لبعض حالات استخدام السيارات، فإنه لا يفي بجميع
واحتياجات التفاعل التي قد تختلف بسبب متطلبات المصنّع الأصلي للجهاز. لهذا السبب،
نقدّم لك OemCarAudioFocusService
:
public interface OEmCarAudioFocusService {
OemCarAuddioFocusResults evaluateAudioFocusRequest(
OemCarAudioFocusEvaluationRequest request);
void notifyAudioFocusChange(
List<AudioFocusEntry> holder,
List<AudioFocusEntry> losers, int zoneId);
}
يتم استدعاء واجهة برمجة التطبيقات evaluateAudioFocusRequest
من خدمة الصوت في السيارة في أي وقت
هناك طلب للتركيز الصوتي الذي يحتاج إلى تقييم، إنها طريقتان
واجهة برمجة تطبيقات تحظر عرض النتائج يحتوي الطلب على معلومات
حول الحالة الراهنة لحزمة الصوت:
ويمكن استخدام هذه المعلومات لتقييم newFocusRequest
مقارنةً بـ
أصحاب التركيز الحاليون في focusHolders
والمستخدمين الخاسرين حاليًا في
focusLosers
من المفترض أن تعرض واجهة برمجة التطبيقات النتائج التالية:
class OemCarAudioFocusResult {
int audioZoneId;
int audioFocusEvaluationResults;
AudioFocusEntry focusResult;
List<AudioFocusEntry> newLosers;
List<AudioFocusEntry> newlyBlocked;
}
يحتوي هذا على معلومات حول نتائج التقييم الفعلية في
audioFocusEvaluationResults
، التي تشير إلى ما إذا كان الطلب الحالي يتضمن
ممنوح، أو تأخر، أو فشل. أي تغييرات على حزمة التركيز الحالية
يجب ضبطها في الإدخالَين newLosers
وnewlyBlocked
، وفقًا لطبيعة
من تغيير المكدس.
عندما تحتوي newLosers
على إدخالات كانت موضع التركيز سابقًا ولكنها
يجب أن يفقدوا التركيز الآن، إما بشكل دائم أو مؤقت. الأجهزة الخادعة التي تركّز على فقدان التركيز الدائم
ستتم إزالته أيضًا من حزمة التركيز الصوتي، وستفقد التركيزات المؤقتة.
الانتقال إلى حزم الخسائر التي يتم التركيز عليها حاليًا إلى أن تستعيد التركيز أو
تم تجاهلها من طالب التركيز الأصلي. بغض النظر عن ذلك، يركز المستمع
فإن الطلبات ستتلقى التركيز المقابل المفقود.
تحتوي قائمة newlyBlocked
على إدخالات كانت في السابق في أداة فقد التركيز.
قائمة، ولكن تم حظرها الآن من خلال الإدخال الجديد. يمكن أن يكون الحظر دائمًا أو
مؤقتة، بالنسبة إلى التركيز الدائم، تم حظر الإدخال، ستتم إزالة الإدخال من الحزمة
وسيتم إرسال فقدان التركيز إلى المستمعين الذين يركزون على التركيز. لفقدان التركيز المؤقت،
سيبقى الإدخال في حزمة الصور المفقودة، ولكن سيتم إيقاف حاجب التركيز الجديد
تمت إضافته إلى قائمة المنع، فلن يتم إرسال أي فقدان التركيز كما كان الحال في السابق
تم إرساله عند حظره لأول مرة. أخيرًا، ستتم إزالة حظر الطلب عندما
تتم إزالة أدوات الحظر الحالية، أو ستتم إزالتها من الحزمة إذا كان التركيز
الهجرة.
وواجهة برمجة التطبيقات الثانية، notifyAudioFocusChange
، هي طريقة يتم استدعاؤها في كل
التركيز على الصوت أو التراجع عنه. تُستخدَم واجهة برمجة التطبيقات في الغالب لإبلاغ خدمة المصنّع الأصلي للجهاز
حول التغييرات في التركيز، ما قد يؤثر في سلوك خدمة المصنّع الأصلي للجهاز الصوتية للسيارات.
إرشادات تقييم التركيز
في نظام التشغيل AAOS، يتم استخدام تركيز الصوت لإدارة تشغيل الصوت وتحديد تقديم أفضل تجربة للمستخدم. وبناءً على ذلك، ينبغي أن تراعي خدمة المكوّن الإضافي للمصنّع الأصلي للجهاز ما يلي عند إدارة طلب التركيز الصوتي:
بدون أي تركيز صوتي ذي أولوية عالية (مثل مكالمة هاتفية، أو الطوارئ أو السلامة) يجب أن يكون بإمكان التطبيقات التركيز على الصوت بشكل مؤقت أو دائم.
عندما يكون تركيز الوسائط نشطًا، فإن التطبيقات التي تطلب ما يلي:
تركيز على استخدام المكالمة، يجب أن يتمكن المستخدم من التركيز عليه إما بشكل متزامن أو حصريًا.
تركيز استخدام التنقل، يجب أن يكون قادرًا على التركيز إما بشكل متزامن أو حصري.
تركيز استخدام "مساعد Google" يجب أن يكون قادرًا على التركيز إما بشكل متزامن أو حصري.
أثناء الوقوف مع تركيز صوتي ذي أولوية عالية (مثل مكالمة هاتفية أو طوارئ أو تنبيه السلامة أو تنبيه السلامة) تكون نشطة، أو أي تركيز وارد متأخر للصوت طلب الموافقة أو تأخيره حسب الحاجة.
في حين أنّ الاقتراحات أعلاه ليست شاملة، يمكن أن تساعد في ضمان يجب أن تتمكّن التطبيقات التي تطلب التركيز من التركيز على الأنشطة الأصوات ذات الأولوية العالية. حتى عندما تكون الأصوات ذات الأولوية العالية نشطة، يتم تأخير التركيز يجب احترام طلباتك ويجب أن تتمكن من التركيز عليها بمجرد والتوقفات الصوتية ذات الأولوية العالية.
خدمة مستوى صوت السيارة من المصنّع الأصلي للجهاز
تدير خدمة الصوت في السيارة الأحداث الرئيسية لمستوى الصوت من خلال الاستماع إلى مستوى الصوت. التعديلات التي يتم إجراؤها من نظام الصوت أو من خلال الاستماع إلى الأحداث الرئيسية لمستوى الصوت مباشرةً من خدمة إدخال السيارة. في كل حالة، فإن السلوك الافتراضي للسيارة خدمة الصوت هي تحديد مجموعة مستوى الصوت التي تريد تغييرها بناءً على مشغّلات الصوت وقائمة أولوية السياقات الصوتية
نقدّم قائمتين من أولوية المجلد. تأخذ القائمة الأولى في الاعتبار كل المحتوى الصوتي. والسياقات بهذا الترتيب. تُعرض القائمة بترتيب تنازلي، وتمثّل أعلى الأولوية في الأعلى والأولوية الأدنى في الأسفل. على سبيل المثال، إذا يكون صوت الملاحة والصوت الموسيقي نشطين في نفس الوقت، تغيُّر مستوى صوت التنقّل أثناء حدث رئيسي بمستوى الصوت
- التنقّل
- الاتصال
- الموسيقى
- إشعار
- بطلب صوتي
- نغمة رنين الاتصال
- صوت النظام
- الأمان
- المنبّه
- إشعار
- حالة المركبة
- الطوارئ
لجعل إدارة الأحداث الرئيسية بمستوى الصوت أقل تعقيدًا، تحتوي خدمة الصوت في السيارة على قائمة الأولوية الثانية للسياق الصوتي:
- الاتصال
- الوسائط
- إشعار
- بطلب صوتي
يتم عرض هذه القائمة أيضًا بترتيب تنازلي. الغرض من قائمة المقاطع هذه هو السماح بتغيير الأصوات الأكثر شيوعًا من خلال الأحداث الرئيسية. غير شائعة، مقاطع صوتية ذات مدة أقصر، ويمكن إدارتها من خلال إعدادات الصوت واجهة المستخدم فقط.
ويمكن تحديد الإصدار الفعلي لمستوى الصوت باستخدام
إعداد audioVolumeAdjustmentContextsVersion
. يمكن أن تكون التهيئة
مضبوطة على 1
أو 2
(2
هو الإعداد التلقائي).
لتوفير المزيد من المرونة في إدارة الحجم،
تم تقديم تطبيق "OemCarAudioVolumeService
" في نظام التشغيل Android 14:
public interface OemCarAudioVolumeService {
OemCarvolumeChangeInfo getSuggestedGroupForVolumeChange(
OemCarAudioVolumeRequest request, int volumeAdjustment);
}
تعتمد خدمة مستوى صوت السيارة من المصنّع الأصلي للجهاز على طريقة واحدة، وهي
volumeAdjustment
وOemCarAudioVolumeRequest
:
class OemCarAudioVolumeRequest {
int audioZoneId;
int callState;
List<AudioAttributes> activePlaybackAttributes;
List<AudioAttributes> duckedAttributes;
List<CarVolumeGroupInfo> volumeGroupState;
}
يحتوي activePlaybackAttributes
للطلب على سمات الصوت النشطة. تشير رسالة الأشكال البيانية
duckedAttributes
كلها سمات صوتية غير مضمَّنة حاليًا. تشير رسالة الأشكال البيانية
تتضمن volumeGroupState
الحالة الحالية لمجموعة المجلدات. الطلب
الحالة الحالية لحزمة الصوت ويمكن استخدامها لتحديد
مجموعة مستوى الصوت التي يجب تغييرها يجب إرجاع النتائج
OemCarVolumeChangeInfo
:
class OemCarVolumeChangeInfo {
boolean change;
CarVolumeGroupInfo volumeGroupChanged;
}
تشير القيمة المنطقية change
إلى ما إذا تغيّر أي مستوى صوت، بينما يشير true
إلى ذلك.
إذا حدث تغيير، يجب تعديل مجموعة مستوى الصوت. تشير رسالة الأشكال البيانية
volumeGroupChanged
هي مجموعة مستوى الصوت الفعلية التي يجب تغييرها. هذا النمط
يجب تغيير المجموعة وفقًا لمعلمة volumeAdjustment
الأصلية
تمريره إلى واجهة برمجة التطبيقات. فعلى سبيل المثال، إذا أشارت النتائج إلى أن التنقل
يجب كتم صوت مجموعة مستويات الصوت، فستكون القيمة المنطقية هي true
وقيمة
مجموعة مستوى الصوت يجب أن تكون ذلك للتنقل.
خدمة إزالة تداخل السيارات من قِبل المصنّع الأصلي للجهاز
تدير خدمة الصوت في السيارة ميزة تجنّب التداخل مع أصوات أخرى من خلال مراقبة التغييرات في تركيز الصوت
يتم إرسال إشارة إلى "غرفة التحكم المباشر" في AudioControl
حول الأجهزة الصوتية التي يجب إيقاف وظائفها.
عندما يتغير التركيز، يتم تقييم جميع الأطراف المعنية النشطة لتحديد
التي يجب إزالتها بناءً على هذه المجموعة من أساليب التحايل الثابتة
القواعد:
- أصوات الطوارئ تُصدر كل الأصوات باستثناء أصوات المكالمات
- يخفف بطء الأمان كل شيء باستثناء أصوات الطوارئ
- يعيق التنقل كل شيء باستثناء أصوات السلامة والطوارئ
- يجب الاتصال بكل شيء باستثناء أصوات السلامة والطوارئ والتنقّل.
- أصوات رنين مكالمات البط الصوتي
- يجب ألا تخلو الموسيقى والإعلانات من كل شيء
وهذه القواعد ليست شاملة ويظل المصنّعون الأصليون للأجهزة مسؤولين عن تحديد
طريقة إخفاء الأصوات بناءً على هذه الإرشادات. يمكن للمصنّعين الأصليين للأجهزة التحكم في
الاقتراحات بفعالية أكبر استنادًا إلى المتطلبات المتاحة تشير رسالة الأشكال البيانية
تم تقديم تطبيق "OemCarDuckingService
" في نظام التشغيل Android 14:
class OemCarAudioDuckingService {
List<AudioAttributes> evaluateAttributesToDuck(
OemCarAudioVolumeRequest request);
}
يتم طلب واجهة برمجة التطبيقات هذه من خدمة الصوت في السيارة عند تغيير تركيز الصوت. إنه يعيد استخدام
تم تقديم OemCarAudioVolumeRequest
في
خدمة مستوى صوت السيارة من المصنّع الأصلي للجهاز، وتحتوي على ما
المعلومات لاتخاذ القرار بشأن التصنيفات التي يجب أن تندرج ضمن التصنيف. قائمة
تتم مقارنة سمات الصوت إلى البطة من واجهة برمجة التطبيقات بحالة الصوت الحالية:
سمة الصوت غير مفعّلة حاليًا:
- في القائمة
- الميزة غير مدرَجة، وبالتالي تم إيقاف ميزة "تجنُّب التداخل مع أصوات أخرى".
سمة الصوت التي لم يتم تضمينها حاليًا:
- في القائمة
- الميزة غير مدرَجة، وبالتالي تم إيقاف ميزة "تجنُّب التداخل مع أصوات أخرى".
بعد ذلك، تحدِّد خدمة الصوت في السيارة أجهزة إخراج الصوت التي سيتم تشغيل المحتوى الصوتي عليها وتضيفها إلى قائمة أجهزة إخراج الصوت المتوقّف أو قائمة الأجهزة الصوتية غير القابلة لإعادة الاستخدام، على التوالي. ويتم إرسال هذه البيانات في النهاية إلى AudioControl HAL لتنفيذ على مستوى الأجهزة.
يوضّح الشكل أدناه مخطّطًا بيانيًا مبسّطًا ومبسّطًا للتشويش في الصوت. عنصر تحكّم في طلب التركيز عند استخدام خدمة إزالة المحتوى من قِبل المصنّع الأصلي للجهاز:
يبدأ التسلسل عندما يطلب التطبيق
إدارة التركيز الصوتي
من خلال واجهات برمجة تطبيقات مدير الصوت العام تتم إعادة توجيه الطلب إلى الإعدادات الصوتية في السيارة.
الخدمة لتحديد النتائج. عند تحديد تركيز الصوت، تجنب التداخل مع أصوات أخرى.
يتم تقييمه من خلال خدمة الصوت في السيارة التي تطلب من "OemCarAudioDuckingService
"
لتقييم تصنيفات الصوت التي يجب تجنبها. بعد إرجاع النتائج
من واجهة برمجة تطبيقات evaluateAttributesToDuck
، يتم احتساب الأجهزة الصوتية إلى البطة
وأخيرًا يتم إرسال المعلومات إلى AudioControl
لتطبيق تجنّب التداخل مع أصوات أخرى.
بالأجهزة الصوتية.
تنفيذ مرجع خدمة صوتية للسيارة من المصنّع الأصلي للجهاز
يوفر نظام التشغيل Android Automotive (AAOS) مرجعًا لخدمة السيارات لدى المصنّع الأصلي للجهاز في
packages/services/Car/tests/OemCarServiceTestApp
، التي تنفّذ
OemCarService
، مع OemCarAudioFocusService
،
OemCarAudioDuckingService
، وOemCarAudioVolumeService
. بالنسبة الأخيرة،
تستخدمها كل خدمة وملف XML لتحميل سلوك ثابت. على سبيل المثال:
OemCarAudioFocusServiceImp
يحمّل oem_focus_config.xml
، الذي
يحتوي على مصفوفة تفاعل. تُستخدم المصفوفة لتقييم طلب التركيز
عند استدعاء evaluateAudioFocusRequest
.
مراجعة تصحيح أخطاء التطبيق التجريبي
إنّ تطبيق اختبار خدمة المصنّع الأصلي للجهاز هو جزء من رمز مصدر AOSP. يمكن للمصنّعين الأصليين للأجهزة إجراء
تتغير وفقًا لاحتياجاته. لتصحيح الأخطاء، استخدِم config_oemCarService
.
الإعدادات لتفعيل التطبيق التجريبي.
<!-- This is the component name for the OEM customization service. OEM can choose to implement
this service to customize car service behavior for different policies. If OEMs choose to
implement it, they have to implement a service extending OemCarService exposed by car-lib,
and implement the required component services.
If the component name is invalid, CarService would not connect to any OEM service.
Component name can not be a third party package. It should be pre-installed -->
<string name="config_oemCarService" translatable="false">
com.android.car.oemcarservice.testapp/.OemCarServiceImpl
</string>
للتحقّق من استخدام خدمة السيارة من المصنّع الأصلي للجهاز، استخدِم أمر dump
لخدمة السيارة من أجل
خدمة المصنّع الأصلي للجهاز:
adb shell dumpsys car_service --oem-service
يمكن أن تكون النتائج مماثلة للمخرجات أدناه:
***CarOemProxyService dump***
mIsFeatureEnabled: true
mIsOemServiceBound: true
mIsOemServiceReady: true
mIsOemServiceConnected: true
mInitComplete: true
OEM_CAR_SERVICE_CONNECTED_TIMEOUT_MS: 5000
OEM_CAR_SERVICE_READY_TIMEOUT_MS: 5000
mComponentName: com.android.car.oemcarservice.testapp/.OemCarServiceImpl
تحدّد كل قيمة منطقية في كل مجموعة من معلومات dump
حالة الميزة.
والخدمة. على سبيل المثال، تحدّد معلومات التفريغ mIsOemServiceReady
ما إذا كانت
الخدمة جاهزة للاستخدام، حيث يشير true
إلى أنها جاهزة للاستخدام وfalse
إلى أنه غير جاهز.