تحدد واجهة طبقة تجريد أجهزة السيارة (VHAL) الخصائص التي يمكن لمصنعي المعدات الأصلية تنفيذها وتحتوي على بيانات وصفية للخصائص (على سبيل المثال ، ما إذا كانت الخاصية int وأوضاع التغيير المسموح بها). تعتمد واجهة VHAL على الوصول إلى خاصية (قراءة ، كتابة ، اشتراك) ، وهي عبارة عن تجريد لوظيفة معينة.
واجهات HAL
يستخدم VHAL الواجهات التالية:
- يولد
getAllPropConfigs()
(vec<VehiclePropConfig>propConfigs)
سرد تكوين جميع الخصائص التي يدعمها VHAL. تستخدم CarService الخصائص المدعومة فقط. - يولد
getPropConfigs(vec<int32_t> props)
(StatusCode status,vec<VehiclePropConfig> propConfigs);
إعادة تكوين الخصائص المختارة. -
set(VehiclePropValue propValue)
يولد(StatusCodestatus);
اكتب قيمة للممتلكات. يتم تحديد نتيجة الكتابة لكل خاصية. -
subscribe(IVehicleCallback callback, vec<SubscribeOptions> options)
يولد(StatusCode status);
ابدأ في مراقبة تغيير قيمة الخاصية. بالنسبة للخاصية المخصصة لمناطق معينة ، يُنشئunsubscribe(IVehicleCallback callback, int32_t propId)
(StatusCode status);
يستخدم VHAL واجهات رد الاتصال التالية:
-
oneway onPropertyEvent(vec<VehiclePropValue>propValues);
يخطر تغير قيمة ملكية السيارة. يجب أن يتم ذلك فقط للممتلكات المكتتب بها. -
oneway onPropertySetError(StatusCode errorCode,int32_t propId,int32_tareaId);
إرجاع خطأ مستوى VHAL العام أو خطأ لكل موقع. يؤدي الخطأ العام إلى إعادة تشغيل طبقة تجريد الأجهزة ، مما قد يؤدي إلى إعادة تشغيل المكونات الأخرى (بما في ذلك التطبيقات).
خصائص السيارة
يمكن أن تكون الخصائص للقراءة فقط أو للكتابة فقط (تُستخدم لتمرير المعلومات إلى مستوى VHAL) أو القراءة والكتابة (دعم معظم الخصائص اختياري). يتم تحديد كل خاصية بشكل فريد بواسطة مفتاح int32 ولها نوع محدد مسبقًا ( value_type
):
-
BYTES
-
BOOLEAN
-
EPOCH_TIME
-
FLOAT
-
FLOAT[]
-
INT32
-
INT32[]
-
INT64
-
INT64[]
-
STRING
-
MIXED
قد تحتوي الخاصية المخصصة على أكثر من قيمة واحدة ، بناءً على عدد المناطق التي يدعمها العقار.
أنواع المناطق
يحدد VHAL أنواع مناطق متعددة:
نوع المنطقة | وصف |
---|---|
GLOBAL | هذه الخاصية فردية وليس لها مناطق متعددة. |
WINDOW | المنطقة على أساس windows ، يستخدم تعداد VehicleAreaWindow . |
MIRROR | المنطقة على أساس المرايا ، يستخدم تعداد VehicleAreaMirror . |
SEAT | المنطقة على أساس المقاعد ، يستخدم تعداد VehicleAreaSeat . |
DOOR | المنطقة على أساس الأبواب ، يستخدم تعداد VehicleAreaDoor . |
WHEEL | المنطقة على أساس العجلات ، تستخدم تعداد VehicleAreaWheel . |
يجب أن تستخدم كل خاصية مخصصة للمنطقة نوع منطقة محدد مسبقًا. يحتوي كل نوع منطقة على مجموعة من علامات البت المحددة في تعداد لنوع المنطقة. على سبيل المثال ، تحدد منطقة SEAT
تعدادات VehicleAreaSeat
:
-
ROW_1_LEFT = 0x0001
-
ROW_1_CENTER = 0x0002
-
ROW_1_RIGHT = 0x0004
-
ROW_2_LEFT = 0x0010
-
ROW_2_CENTER = 0x0020
-
ROW_2_RIGHT = 0x0040
-
ROW_3_LEFT = 0x0100
- ...
معرفات المنطقة
تتم معالجة الخصائص المخصصة من خلال معرفات المنطقة. قد تدعم كل خاصية مخصصة لمناطق واحدة أو أكثر من معرفات المنطقة. يتكون معرف المنطقة من علامة واحدة أو أكثر من تعدادها الخاص. على سبيل المثال ، قد تستخدم خاصية تستخدم VehicleAreaSeat
معرفات المنطقة التالية:
غرض | وصف |
---|---|
ROW_1_LEFT | ROW_1_RIGHT | ينطبق معرف المنطقة على كلا المقعدين الأماميين. |
ROW_2_LEFT | ينطبق فقط على المقعد الخلفي الأيسر. |
ROW_2_RIGHT | ينطبق فقط على المقعد الأيمن الخلفي. |
حالة الملكية
كل قيمة عقار تأتي مع قيمة VehiclePropertyStatus
. يشير هذا إلى الحالة الحالية للممتلكات:
غرض | وصف |
---|---|
AVAILABLE | الخاصية متاحة والقيمة صالحة. |
UNAVAILABLE | قيمة الخاصية غير متوفرة حاليا. تُستخدم للميزات المعطلة مؤقتًا لخاصية مدعومة. |
ERROR | هناك شيء خاطئ في هذه الخاصية. |
تكوين خاصية
استخدم VehiclePropConfig
لتوفير معلومات التكوين لكل خاصية. المعلومات تشمل:
عامل | وصف |
---|---|
access | r ، w ، rw |
changeMode | يمثل كيفية مراقبة الخاصية عند التغيير مقابل المستمر. |
areaConfigs | areaId و min و max . |
configArray | معلمات التكوين الإضافية. |
configString | تم تمرير المعلومات الإضافية كسلسلة. |
minSampleRate | maxSampleRate |
prop | معرف الخاصية ، int |
معالجة خصائص المنطقة
تكافئ الخاصية المخصصة للمناطق مجموعة من الخصائص المتعددة حيث يمكن الوصول إلى كل خاصية فرعية باستخدام قيمة معرف المنطقة المحددة.
-
get
مكالمة للممتلكات المخصصة يتضمن دائمًا معرف المنطقة في الطلب. لذلك ، يتم إرجاع القيمة الحالية لمعرف المنطقة المطلوب فقط. إذا كان العقار عموميًا ، فسيكون معرّف المنطقة 0. - تتضمن المكالمة
set
للممتلكات المخصصة للمنطقة دائمًا معرف المنطقة في الطلب. لذلك ، يتم تغيير معرف المنطقة المطلوب فقط. - تنشئ مكالمة
subscribe
الأحداث لجميع معرفات المنطقة للممتلكات.
احصل على مكالمات
أثناء التهيئة ، قد لا تكون قيمة الخاصية متاحة حتى الآن حيث لم يتم استلام رسالة شبكة السيارة المطابقة بعد. في مثل هذه الحالات ، يجب أن تعود get
-EAGAIN
. تحتوي بعض الخصائص (مثل HVAC) على خاصية طاقة تشغيل / إيقاف منفصلة. يجب أن يؤدي طلب get
على مثل هذه الخاصية (عند إيقاف التشغيل) إلى إرجاع حالة UNAVAILABLE
بدلاً من إرجاع خطأ. على سبيل المثال ، احصل على درجة حرارة HVAC
الشكل 1 . الحصول على درجة حرارة HVAC (CS = CarService ، VHAL = Vehicle HAL)
ضبط المكالمات
في عملية نموذجية ، تؤدي المكالمة set
إلى إجراء طلب تغيير عبر شبكة السيارة. من الناحية المثالية ، تكون المكالمة set
عملية غير متزامنة تعود في أسرع وقت ممكن ، ولكن يمكن أن تكون أيضًا متزامنة. قد تتطلب بعض المكالمات set
بيانات أولية لتكون جاهزة ولكن أثناء التهيئة ، قد لا تكون هذه البيانات متاحة بعد. في مثل هذه الحالات ، يجب أن ترجع المكالمة set
StatusCode#TRY_AGAIN
. يجب أن ترجع بعض الخصائص التي يتم تشغيلها وإيقاف تشغيلها بشكل منفصل StatusCode#NOT_AVAILABLE
أو StatusCode#NOT_AVAILABLE_DISABLED
عند set
تشغيل الخاصية ولا يمكن التعيين. حتى تصبح set
فعالة ، لا تُرجع get
get بالضرورة نفس القيمة التي تم تعيينها. على سبيل المثال ، set HVAC Temperature
.
الشكل 2 . ضبط درجة حرارة HVAC (CS = CarService ، VHAL = مركبة HAL)
التعامل مع الخصائص المخصصة
لدعم الاحتياجات الخاصة بالشريك ، يسمح VHAL بالخصائص المخصصة التي تقتصر على تطبيقات النظام. استخدم الإرشادات التالية عند العمل مع الخصائص المخصصة:
- يجب إنشاء معرف الخاصية باستخدام الحقول التالية:
-
VehiclePropertyGroup:VENDOR
يتم استخدام مجموعةVENDOR
للخصائص المخصصة فقط. -
VehicleArea
حدد نوع المنطقة المناسب. -
VehiclePropertyType
حدد نوع البيانات المناسب. يسمح نوعBYTES
بتمرير البيانات الأولية وهو ما يكفي في معظم الحالات. يمكن أن يؤدي إرسال البيانات الضخمة بشكل متكرر من خلال الخصائص المخصصة إلى إبطاء الوصول إلى شبكة السيارة بالكامل - كن حذرًا عند إضافة حمولة كبيرة. -
Property ID
اختر أربعة معرِّفات nibble للخاصية المخصصة.
-
- لمنع تجزئة النظام البيئي ، يجب عدم استخدام الخصائص المخصصة لتكرار خصائص السيارة الموجودة بالفعل في ( VehiclePropertyIds SDK).
- املأ
VehiclePropConfig.configString
مع وصف موجز للخاصية المخصصة. يتيح ذلك لأدوات فحص السلامة تحديد التكرار العرضي لخصائص السيارة الحالية. على سبيل المثال ، "حالة ضوء الخطر". - الوصول من خلال
CarPropertyManager
(لمكونات Java) أو من خلال واجهة برمجة تطبيقات خدمة شبكة المركبات (للغة الأصلية). لا تقم بتعديل واجهات برمجة تطبيقات السيارة الأخرى لأن القيام بذلك قد يؤدي إلى مشكلات توافق مستقبلية. - بعد تنفيذ خصائص البائع ، حدد فقط قائمة الأذونات في تعداد
VehicleVendorPermission
لخصائص البائع. سيؤدي تعيين أذونات البائع إلى خصائص النظام إلى كسر CTS و VTS.
التعامل مع خصائص التكييف
يمكنك استخدام VHAL للتحكم في التدفئة والتهوية وتكييف الهواء (HVAC) عن طريق تعيين الخصائص المتعلقة بالتكييف. معظم خصائص HVAC هي خصائص مخصصة للمناطق ، على الرغم من أن العديد منها خصائص غير مخصصة (عالمية). تشمل عينة الخصائص المحددة ما يلي:
ملكية | غاية |
---|---|
VEHICLE_PROPERTY_HVAC_TEMPERATURE_SET | اضبط درجة الحرارة لكل منطقة. |
VEHICLE_PROPERTY_HVAC_RECIRC_ON | إعادة تدوير التحكم لكل منطقة. |
لمشاهدة قائمة كاملة بخصائص HVAC ، ابحث عن VEHICLE_PROPERTY_HVAC_*
في types.hal
. عندما تستخدم خاصية VehicleAreaSeat
HVAC) ، يتم تطبيق قواعد إضافية لتعيين خاصية HVAC المخصصة لمعرفات المنطقة. يجب أن يكون كل مقعد متاح في السيارة جزءًا من معرف المنطقة في مصفوفة معرف المنطقة.
المثال الأول. تحتوي السيارة على مقعدين أماميين ( ROW_1_LEFT, ROW_1_RIGHT
) وثلاثة مقاعد خلفية ( ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT
). تحتوي السيارة على وحدتين للتحكم في درجة الحرارة: جانب السائق وجانب الراكب.
- مجموعة التعيين الصالحة لمعرفات المنطقة لـ
HVAC_TEMPERATURE SET
هي:-
ROW_1_LEFT | ROW_2_LEFT
-
ROW_1_RIGHT | ROW_2_CENTER | ROW_2_RIGHT
-
- التعيين البديل لنفس تكوين الأجهزة هو:
-
ROW_1_LEFT | ROW_2_LEFT | ROW_2_CENTER
-
ROW_1_RIGHT | ROW_2_RIGHT
-
المثال الثاني. تحتوي السيارة على ثلاثة صفوف مقاعد مع مقعدين في الصف الأمامي ( ROW_1_LEFT, ROW_1_RIGHT
) ، وثلاثة مقاعد في الصف الثاني ( ROW_2_LEFT, ROW_2_CENTER, ROW_2_RIGHT
) ، وثلاثة في الصفوف الثالثة ( ROW_3_LEFT, ROW_3_CENTER, ROW_3_RIGHT
). تحتوي السيارة على ثلاث وحدات تحكم في درجة الحرارة: جانب السائق ، وجانب الراكب ، والخلفي. من الطرق المعقولة لتعيين HVAC_TEMPERATURE_SET
لمعرفات المنطقة استخدام مصفوفة من ثلاثة عناصر:
-
ROW_1_LEFT
-
ROW_1_RIGHT
-
ROW_2_LEFT | ROW_2_CENTER | ROW_2_RIGHT | ROW_3_LEFT | ROW_3_CENTER | ROW_3_RIGHT
التعامل مع خصائص الاستشعار
تمثل خصائص مستشعر VHAL بيانات الاستشعار الحقيقية أو معلومات السياسة مثل حالة القيادة. يمكن الوصول إلى بعض معلومات المستشعر (مثل حالة القيادة ووضع النهار / الليل) من قبل أي تطبيق دون قيود لأن البيانات إلزامية لإنشاء تطبيق آمن للمركبة. معلومات المستشعر الأخرى (مثل سرعة السيارة) أكثر حساسية وتتطلب أذونات محددة يمكن للمستخدمين إدارتها.
انظر خصائص المستشعر المدعومة (في types.hal
).
خدمة خريطة السيارة
توفر خدمة خريطة السيارة (VMS) آلية لتبادل بيانات الخرائط بين العملاء من خلال واجهة عامة / فرعية لدعم ميزات السيارة الشائعة ، مثل أنظمة مساعدة السائق المتقدمة (ADAS) . يمكن للعملاء تضمين أنظمة المركبات التي تتفاعل من خلال خاصية VMS في VHAL أو تطبيقات Android المميزة. تهدف البيانات التي يتم مشاركتها على VMS إلى أن تكون مقصورة على بيانات الخرائط لاستخدامها بواسطة أنظمة المركبات والتطبيقات الداعمة.
تم تصميم VMS للاستخدام فقط في تطبيقات Android Automotive ؛ لا تحتوي AOSP على عملاء افتراضيين ينشرون VMS أو يشتركون فيه. بالنسبة لخاصية VMS في VHAL ، يتم وصف أنواع الرسائل وهياكل البيانات في VHAL 2.0 في تعداد VmsMessageType
، والذي يسرد أنواع رسائل VMS المدعومة. يتم استخدام هذا التعداد كأول عدد صحيح في مصفوفة الأعداد الصحيحة لخاصية المركبة ويحدد كيفية فك تشفير بقية الرسالة.