توفّر منصة SDV مجموعة من واجهات برمجة التطبيقات التي يمكن استخدامها بين حِزم خدمات SDV وDiagnostics Manager التي توفّرها الشركة المصنّعة للمعدات الأصلية، بالإضافة إلى الأدوات المساعدة وإمكانات المنصة العامة لدعم حالات استخدام التشخيص الخاصة بالشركة المصنّعة للمعدات الأصلية. تُعد بيانات التشخيص ضرورية لجهود تطوير السيارات المزوّدة ببرامج، والخدمات والتقنيات المتعلّقة بالسيارات التي نوفّرها للمصنّعين الأصليين، لأنّ حزمة بيانات التشخيص هي عنصر أساسي في أي نظام تشغيل للسيارات.
تنشر الشركات المصنّعة للأجهزة الأصلية مثيلات من "أداة إدارة بيانات التشخيص" (عادةً مثيل واحد لكل وحدة تحكّم إلكترونية أو مثيل واحد لكل جهاز افتراضي) للتعامل مع الطلبات الواردة من برامج بيانات التشخيص من خلال التواصل مع حِزم خدمات "المركبات المحدّدة بالبرامج" على النظام. ولإجراء ذلك، توفّر SDV مجموعة من واجهات برمجة التطبيقات القياسية الخاصة بأدوات التشخيص، والأدوات المساعدة، وإمكانية استخدام المنصة بشكل عام لحالات استخدام أدوات التشخيص الخاصة بمصنّعي المعدات الأصلية. هدفنا هو:
- تمكين الشركات المصنّعة للأجهزة الأصلية من تنفيذ "أداة إدارة بيانات التشخيص" وفقًا لمعيار UDS
- السماح لأداة "إدارة بيانات التشخيص" بتفويض طلبات المختبِرين إلى حِزم خدمات SDV.
- السماح لحِزم خدمات المركبات المحدّدة بالبرامج (SDV) بعرض بيانات التشخيص بطريقة مستقلة عن المركبة
ولتحقيق ذلك، توفّر SDV مجموعة من واجهات برمجة التطبيقات لتوحيد التفاعلات بين حِزم خدمات SDV (التي قد توفّرها جهات خارجية) وتنفيذ الشركة المصنّعة الأصلية لمجموعة أدوات التشخيص.
يمكن أن تعرض حِزم خدمات SDV بيانات التشخيص والكيانات، وتنفّذ وظائف التشخيص، وتُبلغ "مدير التشخيص" عن الأعطال.
من خلال توفير واجهة برمجة تطبيقات موحّدة على مستوى المركبات المحدّدة البرامج، نسهّل عملية تنفيذ حِزم خدمات المركبات المحدّدة البرامج، ما يغني عن الحاجة إلى إعادة تنفيذ أدوات التشخيص لتشغيلها على مركبات مختلفة من مصنّعين مختلفين.
Diagnostics Services API
تحدّد واجهة برمجة التطبيقات SDV Diagnostics API الخدمات التالية التي تتوافق مع خدمات UDS (ISO 14229-1) المحدّدة:
-
service AuthenticationService: 0x29 (المصادقة) وهي توفّر آلية للعميل لإثبات هويته من أجل الوصول إلى البيانات أو الخدمات المحظورة. -
service DataItemService: 0x22 (ReadDataByIdentifier) و0x2E (WriteDataByIdentifier). ويتيح قراءة عناصر البيانات وكتابتها التي تحدّدها المعرّفات اللامركزية. -
service EcuResetService: 0x11 (ECUReset). تتيح هذه السمة للمختبِر طلب إعادة ضبط وحدة التحكّم الإلكترونية (ECU). -
service FileTransferService: 0x34 (RequestDownload) و0x35 (RequestUpload) و0x36 (TransferData) و0x37 (RequestTransferExit) و0x38 (RequestFileTransfer). وهي تتعامل مع بدء عمليات تنزيل الملفات وتحميلها ومعالجتها. -
service IoControlService: 0x2F (InputOutputControlByIdentifier) ويسمح للمختبِرين الخارجيين بالتحكّم في مدخلات ومخرجات النظام لأغراض الاختبار. -
service RoutineControlService: 0x31 (RoutineControl). يسمح هذا التطبيق للمختبِر ببدء إجراءات روتينية (وظائف) معيّنة تنفّذها خدمات SDV وإيقافها وطلب نتائجها. -
service SecurityAccessService: 0x27 (SecurityAccess). وهي تدير عملية تبادل المفتاح الأساسي والمفتاح المطلوبَين لفتح مستويات أمان معيّنة.
بالإضافة إلى ذلك، تحدّد SDV Diagnostics API الرمزين
service FaultListenerService وmessage Event استنادًا إلى
Diagnostic Event Manager في AUTOSAR (AUTOSAR_SWS_DiagnosticEventManager)، ما يتيح للتطبيقات الإبلاغ عن أحداث التشخيص والأعطال.
بالإضافة إلى ذلك، تحدّد service DiagnosticsManagerService خدمة منصة SDV تتيح للخدمات الأخرى طلب معلَمات اتصال بيانات التشخيص الحالية (عنوان المصدر وعنوان الوجهة) ونوع الجلسة.
دليل المطوّر لحِزم الخدمات
بصفتك مطوّر حِزم خدمات، يمكنك تحديد diagnostics_declaration والخوادم التالية في ملف .vsidl ذي الصلة:
service_bundle {
name: "<BUNDLE-NAME>"
...
server {
service: "com.sdv.google.diagnostics.data_item.DataItemService"
}
server {
service: "com.sdv.google.diagnostics.routine_control.RoutineControlService"
}
server {
service: "com.sdv.google.diagnostics.io_control.IoControlService"
}
server {
service: "com.sdv.google.diagnostics.fault.FaultListenerService"
}
...
diagnostics_declaration {
data_item {
...
}
routine {
...
}
event {
...
}
io_control {
...
}
}
...
}
يتم تعريف الرسالة DiagnosticsDeclaration على النحو التالي:
package sdv.diagnostics.v1;
message DiagnosticsDeclaration {
// Diagnostics data item declaration.
//
// See com.sdv.google.diagnostics.data_item.DataItemService service.
message DataItem {
// Required. Id of the data item.
string id = 1;
// Required. Fully qualified name of the message that defines a structure of
// the data item.
string message_name = 2;
// Flag that indicates whether the data item is writable by the Diagnostics
// Manager.
//
// Effectively, this indicates whether the call to DataItemService::Write,
// is supported for this data item id.
bool is_writable = 3;
}
// Declaration of diagnostics data for input/output control.
//
// See com.sdv.google.diagnostics.io_control.IoControl service.
message InputOutputControlData {
// Id of the input/output control data.
string id = 1;
// Fully qualified name of the message that defines a structure of the data.
string message_name = 2;
}
// Declaration of diagnostics routine.
//
// See com.sdv.google.diagnostics.routine_control.RoutineControl.
message Routine {
// Information about routine control method.
message Method {
// Fully qualified name of the request message.
string request = 1;
// Fully qualified name of the response message.
string response = 2;
}
// Id of the routine.
string id = 1;
// Information about routine start method.
//
// See com.sdv.google.diagnostics.routine_control.RoutineControl::Start.
Method start = 2;
// Information about routine stop method.
//
// See com.sdv.google.diagnostics.routine_control.RoutineControl::Stop.
Method stop = 3;
// Information about routine result method.
//
// See
// com.sdv.google.diagnostics.routine_control.RoutineControl::RequestResult.
Method result = 4;
}
// Declaration of diagnostics event and corresponding fault listener.
//
// See com.sdv.google.diagnostics.event.Event.
// See com.sdv.google.diagnostics.fault.FaultListener.
message Event {
// Id of the event.
string id = 1;
// Fully qualified message name of the event's extended data message.
string extended_data_message_name = 2;
// Fault status changes which service wants to be notified of.
//
// See com.sdv.google.diagnostics.fault.FaultListener.StatusMask.
uint32 fault_listener_mask = 3;
// User-defined service unit name of a corresponding event publisher.
string service_unit_name = 4;
}
// Diagnostic data items exposed by the service bundle.
repeated DataItem data_item = 1;
// Diagnostic data exposed for input/output control by the service bundle.
repeated InputOutputControlData io_control = 2;
// Diagnostic routines exposed by the service bundle.
repeated Routine routine = 3;
// Diagnostic events sent by the service bundle.
repeated Event event = 4;
}
إذا تم تحديد ما ورد أعلاه (الكتلة service_bundle التي تحتوي على diagnostics_declaration) في الكتالوجات، ستنشئ vsidl_rc_generator استهدافات prebuilt_etc لكل حزمة خدمة تعرّف الخوادم المذكورة أعلاه وdiagnostics_declaration:
prebuilt_etc {
name: "<APEX-NAME>.<BUNDLE-NAME>-diag-config.binpb",
filename: "DiagService-diag-config.binpb",
sub_dir: "vsidl_provider",
src: ":generate_vsidl_files_single_bundle_<APEX-NAME>.<BUNDLE-NAME>{diagnostics-config.binpb}",
installable: false,
}
يجب إضافة هذه الأهداف إلى prebuilts في حزمة تعريف Apex المقابلة كما هو موضّح
في حزمة التعليقات المقابلة التي تم إنشاؤها تلقائيًا فوق حزمة prebuilt_etc {}:
apex {
name: "<APEX-NAME>",
...
prebuilts: [
...
"<APEX-NAME>.<BUNDLE-NAME>-diag-config.binpb",
...
],
...
}
يجب أيضًا إضافة نقاط الاستهداف هذه في الحقل diagnostics_config_path من إدخال sdv_service_bundle_metadata للحزمة في ملف sdv_service_bundles_manifest.textproto ذي الصلة. بالإضافة إلى ذلك، يجب تحديد سياسات التفويض لتفعيل الاتصال عبر استدعاء إجراء عن بُعد (RPC) بين حزمة الخدمة وخدمة "مدير بيانات التشخيص"، وذلك باتّباع الخطوات التالية:
sdv_service_bundle_metadata {
name: "<BUNDLE-NAME>"
...
diagnostics_config_path: "etc/vsidl_provider/<BUNDLE-NAME>-diag-config.binpb"
authorization_policy_path: "etc/authz/permissions.textproto"
...
}
يجب أن تحدّد الأذونات في الملف permissions.textproto أدوار العميل أو الخادم. على سبيل المثال، إذا كانت حزمة الخدمات تنفّذ عنصر بيانات تشخيصية:
server {
service: "com.sdv.google.diagnostics.data_item.DataItemService"
allow_all_channels: true
}
دليل مطوّري المنصات
على مطوّري المنصات ومصنّعي المعدات الأصلية تنفيذ هدف rust_binary"وكيل مدير أدوات التشخيص":
rust_binary {
name: "<DIAGNOSTICS-AGENT-BINARY-EXECUTABLE-NAME>",
...
product_specific: true,
...
}
بالإضافة إلى ذلك، يجب ضبط/الكتابة فوق المتغيّر التالي في ملفات الإنشاء:
SDV_DIAGNOSTICS_AGENT_MODULE := <DIAGNOSTICS-AGENT-BINARY-EXECUTABLE-NAME>
لتسهيل الأمر، يمكن استخدام مكتبة libsdv_uds_serde_v1 للترجمة بين Proto وUDS، ومكتبة VSIDL Provider للبحث.
يجب أن يحتوي ملف .vsidl الخاص بأداة فحص المشاكل على المحتوى التالي:
package: "com.sdv.oem.diagnostics"
service_bundle {
name: "DiagnosticsAgent"
server {
service: "com.sdv.google.diagnostics.DiagnosticsManagerService"
}
client {
service: "com.sdv.google.diagnostics.data_item.DataItemService"
}
client {
service: "com.sdv.google.diagnostics.routine_control.RoutineControlService"
}
client {
service: "com.sdv.google.diagnostics.io_control.IoControlService"
}
client {
service: "com.sdv.google.diagnostics.fault.FaultListenerService"
}
client {
service: "com.sdv.google.diagnostics.ecu_reset.EcuResetService"
}
client {
service: "com.sdv.google.diagnostics.security_access.SecurityAccessService"
}
client {
service: "com.sdv.google.diagnostics.authentication.AuthenticationService"
}
client {
service: "com.sdv.google.diagnostics.file_transfer.FileTransferService"
}
}
بما أنّ "وكيل إدارة بيانات التشخيص" هو ملف تنفيذي ثنائي، يتم تعريف sdv_service_bundle_metadata للحزمة على أنّه بيان خاص بالإعدادات فقط:
sdv_service_bundle_metadata {
# This name must match the agent's Bundle Name
name: "DiagnosticsAgent"
version_number: 1
version_name: "1"
# Reference the manifest itself to mark this as a config-only declaration.
native_library_path: "etc/sdv_service_bundles_manifest.textproto"
authorization_policy_path: "etc/authz/permissions.textproto"
}
يجب أن تحدّد سياسة تفويض وكيل بيانات التشخيص الأذونات الخاصة بالخدمات التي يتفاعل معها. على سبيل المثال، إذا كان يستدعي خدمة "نقل الملفات":
client {
service: "com.sdv.google.diagnostics.file_transfer.FileTransferService"
allow_all_channels: true
}