خصائص السيارة

تحدد واجهة طبقة تجريد أجهزة السيارة (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

VHAL الحصول على مثال 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 .

مجموعة VHAL مثال HVAC

الشكل 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 المدعومة. يتم استخدام هذا التعداد كأول عدد صحيح في مصفوفة الأعداد الصحيحة لخاصية المركبة ويحدد كيفية فك تشفير بقية الرسالة.