يُمكّن بيئة تشغيل التشخيص من الاسترداد التدريجي لبيانات الملفات والدلائل من أحد التطبيقات.
مُولَّد بالذكاء الاصطناعيغير مُراجَعالنموذج: gemini-3.8-flash-medium · الجهد: medium · درجة الحرارة: غير قابل للتحكم · الموجّه: a81aee002281المصدرأسئلة مفتوحة (1)
مترجم من الدليل الألمانيgemini-3.8-flash-low · 2026-10-13 · الأصل الألماني
يُمكّن بيئة تشغيل التشخيص من الاسترداد التدريجي لبيانات الملفات والدلائل من أحد التطبيقات.
تُستخدم الفئة ara::diag::DataTransferReadByPullHandler لتوفير بيانات الملفات أو الدلائل، والتي تُسترد بنشاط من التطبيق بواسطة طبقة التشخيص AraDiag في إطار عملية قراءة UDS ([SWS_DM_01506]). يشمل التسلسل الاسترداد التدريجي للبيانات عبر Read() وصولاً إلى الإنهاء النهائي للجلسة عبر ExitRead(). وبوصفه شرطاً صارماً لدورة الحياة، لا يجوز بأي حال من الأحوال تدمير مثيل المعالج، المخصص لجلسة نقل واحدة تحديداً، قبل استدعاء ExitRead() ([SWS_DM_01510]).
السياق
تتولى الفئة ara::diag::DataTransferReadByPullHandler ([SWS_DM_01506]، AUTOSAR_AP_SWS_Diagnostics §8.10.2 «Class: DataTransferReadByPullHandler») معالجة عمليات نقل البيانات التي بدأتها طلبات التشخيص لقراءة الملفات أو الدلائل (مثل RequestReadFile أو RequestReadDirectory). تعتمد البنية على آلية سحب (Pull)، حيث تقوم طبقة التشخيص AraDiag بالاستعلام النشط عن البيانات المراد نقلها («pulled») من التنفيذ.
تشترك ثلاثة مكونات في هذا التفاعل: عميل UDS الخارجي (فاحص التشخيص)، ونظام التشخيص الفرعي AraDiag، وتطبيق المعالج الخاص بالتطبيق. يرسل العميل الخارجي طلبات القراءة، وبناءً على ذلك يستدعي AraDiag دوال المعالج لتوفير كتل البيانات تدريجياً وإرسالها إلى عميل UDS ([SWS_DM_01513]).
دورة الحياة
ترتبط دورة حياة مثيل المعالج حصرياً بجلسة نقل ملفات واحدة. تم التصريح عن المنشئ الافتراضي بصفة protected ([SWS_DM_01507]). تفسير: يُرجح بالتالي أن يقوم التطبيق الفعلي بتنفيذ فئة فرعية مشتقة وإنشاء مثيل لها. سؤال Q-cb78bc4a1d40968b (مفتوح)
تم تعطيل عمليات النسخ بالكامل: تم تحديد منشئ النسخ ([SWS_DM_01509]) وعامل تخصيص النسخ ([SWS_DM_01512]) على أنهما محذوفان (=delete)، نظراً لأن المعالجات مخصصة للاستخدام أحادي الاتجاه ضمن جلسة واحدة («only one way usage i.e. per single file transfer session»). وفي المقابل، تم تعريف عمليات النقل (Move Constructor وMove Assignment) كتنفيذ افتراضي والتصريح عنها كـ noexcept ([SWS_DM_01508]، [SWS_DM_01511]، AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.1.1 «Move Constructor»).
ينقسم التسلسل القياسي لاسترداد البيانات إلى الخطوات التالية:
التهيئة: يُنشئ التطبيق مثيلاً من فئة المعالج المشتقة لجلسة النقل القادمة.
استرداد البيانات: لتوفير كتل البيانات، يستدعي AraDiag الدالة Read() ([SWS_DM_01513]، AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.3.2 «Read»). يحصل التطبيق على عرض ذاكرة response_data (من النوع ara::core::Span<const ara::core::Byte>) يشير إلى ذاكرة وسيطة مخصصة مسبقاً بواسطة AraDiag، ويملؤها بمحتويات الملف التالية ويختم ara::core::Future<std::uint32_t> بعدد البايتات المكتوبة. يدرج AraDiag هذه البيانات بعد عداد تسلسل الكتل (blockSequenceCounter) كـ transferResponseParameterRecord في استجابة UDS الإيجابية ([SWS_DM_01513]). وتتكرر هذه الخطوة للكتل اللاحقة.
إنهاء الجلسة: لإنهاء الإرسال بشكل نظامي، يستدعي AraDiagExitRead() ([SWS_DM_01514]، AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.3.1 «ExitRead»). ويتم تمرير سبب الإنهاء exit_type، ومعلمات محددة من الشركة المصنعة (transfer_request_parameter_record)، وmeta_info، وcancellation_handler. ويؤكد التنفيذ ذلك عبر ara::core::Future<ara::core::Vector<ara::core::Byte>>، حيث تُنقل قيمه المرجعة بعد SID في الاستجابة الإيجابية ([SWS_DM_01514]).
التحرير: لا يجوز تدمير كائن المعالج إلا بعد اكتمال استدعاء ExitRead() ([SWS_DM_01510]).
مخطط التسلسل: التسلسل النموذجي لاسترداد البيانات بآلية السحب عبر AraDiag. المصادر: [SWS_DM_01513]، [SWS_DM_01514]
سيناريوهات الأخطاء
في حال حدوث أخطاء أثناء تجهيز البيانات أو عند الإنهاء، يُبلغ التطبيق عن ذلك عبر Future المُرجع، من خلال توفيره مصحوباً برمز خطأ UDS (DiagUdsNrcErrc وفقاً للمعيار ISO 14229-1) ([SWS_DM_01513]، [SWS_DM_01514]). وبناءً على ذلك، يُنشئ AraDiag استجابة UDS السلبية (NRC) المقابلة إلى الفاحص.
للإلغاء المبكر، يتم تمرير CancellationHandler إلى كلتا الدالتين ([SWS_DM_01513]، [SWS_DM_01514]). يمكن للتطبيق التحقق عبر cancellation_handler.IsCanceled() مما إذا كانت المحادثة قد أُلغيت، أو تسجيل دالة رد نداء عبر cancellation_handler.SetNotifier(). تظل الذواكر الوسيطة الموفرة (response_data وtransfer_request_parameter_record) صالحة حتى الوفاء بالـ Promise أو حتى الإلغاء عبر المعالج.
إذا تم تدمير المثيل قبل استدعاء ExitRead()، فإن ذلك يمثل انتهاكاً لمتطلبات المواصفة ([SWS_DM_01510])، مما قد يؤدي إلى جلسات نقل غير مكتملة وحالات نظام غير محددة.
يستند دليل الفئة هذا إلى مواصفة AUTOSAR Adaptive R25-11 ويلخص متطلبات الواجهة ara::diag::DataTransferReadByPullHandler.
Reads data chunk from the application. The first or subsequent file/directory info content chunk to be sent back to the UDS client will be composed by the application and copied into the provided by ara::diag Span with up to the requested Span size.
مُولَّد بالذكاء الاصطناعيغير مُراجَعالنموذج: gemini-3.8-flash-medium · الجهد: medium · درجة الحرارة: غير قابل للتحكم · الموجّه: 7a822a7b2a3dالمصدر
مترجم من الدليل الألمانيgemini-3.8-flash-low · 2026-10-13 · الأصل الألماني
تنهي الطريقة الافتراضية الصرفة ExitRead جلسة نقل بيانات جارية في إطار ara::diag::DataTransferReadByPullHandler[SWS_DM_01514] (AUTOSAR_AP_SWS_Diagnostics §8.10.2.1.3.1 «ExitRead»). وتستقبل كمعلمات سبب الإنهاء exit_type (النوع DataTransferExitType)، ومعلمات خاصة بالشركة المصنعة للمركبة في transfer_request_parameter_record (بصفتها ara::core::Span<const ara::core::Byte>)، وسياق الطلب meta_info بالإضافة إلى cancellation_handler. وتظل المعلمة transfer_request_parameter_record صالحة حتى يتم استيفاء Promise المرتبط أو إلغاء التنفيذ عبر معالج الإلغاء (Cancellation-Handler) [SWS_DM_01514].
يتم الاستدعاء بشكل غير متزامن ويُرجع ara::core::Future<ara::core::Vector<ara::core::Byte>>[SWS_DM_01514]:
في حالة النجاح، يُتاح Future لرسالة استجابة إيجابية؛ وتوضع البيانات من OperationOutput.response_data هنا كـ transferResponseParameterRecord بعد معرّف الخدمة (Service-ID).
في حالة الخطأ، يتم استيفاء Future برمز خطأ UDS (NRC) وفقاً للمواصفة ISO 14229-1 من DiagUdsNrcErrc لرسالة استجابة سلبية.
أُعلن عن الدالة بأنها noexcept وآمنة من الاستثناءات (exception safe)، ولكنها ليست آمنة بالنسبة للخيوط (not thread-safe) [SWS_DM_01514]. وعبر cancellation_handler، يمكن الاستعلام عن حالة الإلغاء باستخدام cancellation_handler.IsCanceled() أو تسجيل دالة إشعار لإلغاء المحادثة عبر cancellation_handler.SetNotifier()[SWS_DM_01514].
فيما يتعلق بالترتيب، لا يجوز بأي حال تدمير حالة من DataTransferReadByPullHandler قبل استدعاء ExitRead()[SWS_DM_01510]. وتوجد دوال إنهاء وشروط مدمر مقابلة بالتوازي لـ ara::diag::DataTransferReadSharedDataHandler::ExitRead[SWS_DM_01505] ([SWS_DM_01499]) وara::diag::DataTransferReadByPushHandler::ExitRead[SWS_DM_01523] ([SWS_DM_01519]).
تم إنشاء هذا النص بواسطة ذكاء اصطناعي؛ وتعتبر المواصفة وحدها ملزمة.
This parameter record contains parameter(s), which are required
parameter_record
by the server to support the transfer of data. Format and length of this parameter(s) are vehicle manufacturer specific. Lifetime: Valid until Promise is fulfilled or the processing is cancelled by the cancellationHandler.
meta_info
MetaInfo of the request.
cancellation_handler
This parameter is used to • Query the current cancellation status by calling cancellation_ handler.IsCanceled(). Returns true in case, the current conversation has been cancelled and false otherwise. • Register a notifier function by calling cancellation_handler.Set Notifier(). The registered notifier is called if the current conversation is cancelled.
A Future, which either gets readied to OperationOutput (transfer ResponseParameterRecord for a positive response message) or readied with UDS ErrorCode from DiagUdsNrcErrc (for an negative response message). Data in OperationOutput.response_data will be placed after SID as transferResponseParameterRecord in the positive response.
Fehler
Fehlercode
Beschreibung
Please use an applicable NRC, as defined in ISO 14229-1, using DiagUdsNrcErrc.
Request a governed re-review of this record. The record is not changed immediately.
Reads data chunk from the application. The first or subsequent file/directory info content chunk to be sent back to the UDS client will be composed by the application and copied into the provided by ara::diag Span with up to the requested Span size.
مُولَّد بالذكاء الاصطناعيغير مُراجَعالنموذج: gemini-3.8-flash-medium · الجهد: medium · درجة الحرارة: غير قابل للتحكم · الموجّه: 104f857aa59eالمصدر
مترجم من الدليل الألمانيgemini-3.8-flash-low · 2026-10-13 · الأصل الألماني
الاستخدام ودلالات الاستدعاء
تُستخدم الطريقة Read للفئة ara::diag::DataTransferReadByPullHandler لقراءة كتل البيانات بواسطة التطبيق في إطار نقل بيانات UDS [SWS_DM_01513]. يُجمّع التطبيق كتل محتوى الملف أو الدليل الأولى أو اللاحقة وينسخها إلى المخزن المؤقت response_data (من النوع ara::core::Span<const ara::core::Byte>) المُمرَّر بواسطة ara::diag حتى الحجم الأقصى للنطاق (Span).
يتم الاستدعاء بشكل غير متزامن ويُرجع ara::core::Future<std::uint32_t>[SWS_DM_01513]. في حالة النجاح، يتم استيفاء الـ Future بعدد البايتات المتوفرة فعليًا؛ وتوضع هذه البيانات في استجابة UDS الإيجابية بعد blockSequenceCounter كـ transferResponseParameterRecord. عبر المَعلمة cancellation_handler، يمكن للتطبيق الاستعلام عن حالة الإلغاء باستخدام IsCanceled() أو تسجيل دالة إشعار للإلغاء عبر SetNotifier().
معالجة الأخطاء والشروط الحدية
في حالة الخطأ، يتم إكمال الـ Future برمز NRC لـ UDS قابل للتطبيق من DiagUdsNrcErrc وفقًا للمعيار ISO 14229-1 [SWS_DM_01513]. إذا كانت الواجهة غير متوفرة أو لم تعد متوفرة باستخدام offer()، يستجيب DM بـ NRC 0x94 (ResourceTemporarilyNotAvailable) [SWS_DM_01257].
التزامن والتفاعل
تم تحديد الواجهة على أنها غير آمنة مؤشريًا (not thread-safe)، ولكنها آمنة من الاستثناءات (exception safe) [SWS_DM_01513]. تظل منطقة الذاكرة لـ response_data صالحة فقط حتى يتم استيفاء الـ Promise المقترن أو إلغاء العملية. كبديل لنمط السحب (Pull)، توجد لنقل البيانات طريقة الدفع (Push) عبر DataTransferReadByPushHandler::Read[SWS_DM_01522] بالإضافة إلى النقل بملكية مشتركة عبر DataTransferReadSharedOwnershipHandler::Read[SWS_DM_01504].
تم إنشاء ملاحظة الاستخدام هذه تلقائيًا بناءً على وثائق مواصفات AUTOSAR Adaptive.
The view over a pre-allocated by AraDiag memory to write in this data chunk. Lifetime: Valid until Promise is fulfilled or the processing is cancelled by the cancellationHandler.
meta_info
MetaInfo of the request.
cancellation_handler
This parameter is used to • Query the current cancellation status by calling cancellation_ handler.IsCanceled(). Returns true in case, the current conversation has been cancelled and false otherwise. • Register a notifier function by calling cancellation_handler.Set Notifier(). The registered notifier is called if the current conversation is cancelled.
A Future, which either gets readied to actual amount of data provided in the Span (for a positive response message) or readied with UDS ErrorCode from DiagUdsNrcErrc (for an negative response message). Data in response_data will be placed after blockSequenceCounter as transferResponseParameterRecord in the positive response.
Fehler
Fehlercode
Beschreibung
Please use an applicable NRC, as defined in ISO 14229-1, using DiagUdsNrcErrc.
Request a governed re-review of this record. The record is not changed immediately.
gemini-3.8-flash-low· 2026-10-13 · الأصل الألماني