কারণ নির্ণয়

এসডিভি প্ল্যাটফর্মটি ওইএম-প্রদত্ত ডায়াগনস্টিকস ম্যানেজার এবং এসডিভি সার্ভিস বান্ডেলের মধ্যে ব্যবহারের জন্য একগুচ্ছ এপিআই প্রদান করে, সেইসাথে ওইএম-এর ডায়াগনস্টিকস ব্যবহারের ক্ষেত্রগুলোকে সমর্থন করার জন্য ইউটিলিটি এবং সাধারণ প্ল্যাটফর্ম সক্ষমতাও সরবরাহ করে। এসডিভি-র প্রচেষ্টা, অটোমোটিভ পরিষেবা এবং ওইএম-দেরকে আমাদের সরবরাহ করা প্রযুক্তির জন্য ডায়াগনস্টিকস অপরিহার্য, কারণ ডায়াগনস্টিকস স্ট্যাক যেকোনো অটোমোটিভ অপারেটিং সিস্টেমের একটি অত্যাবশ্যকীয় উপাদান।

OEM-রা সিস্টেমে থাকা SDV সার্ভিস বান্ডেলের সাথে যোগাযোগের মাধ্যমে ডায়াগনস্টিকস ক্লায়েন্টদের অনুরোধগুলি পরিচালনা করার জন্য ডায়াগনস্টিকস ম্যানেজার ইনস্ট্যান্স (সাধারণত প্রতি ECU বা প্রতি VM-এর জন্য একটি) স্থাপন করে। এটি করার জন্য, SDV OEM ডায়াগনস্টিকস ব্যবহারের ক্ষেত্রগুলির জন্য এক সেট স্ট্যান্ডার্ড ডায়াগনস্টিকস API, ইউটিলিটি এবং সামগ্রিক প্ল্যাটফর্ম সাপোর্ট প্রদান করে। আমাদের লক্ষ্য হলো:

  • OEM-দেরকে UDS স্ট্যান্ডার্ড অনুযায়ী ডায়াগনস্টিকস ম্যানেজার বাস্তবায়ন করতে সক্ষম করুন।
  • ডায়াগনস্টিকস ম্যানেজারকে পরীক্ষকের অনুরোধগুলি এসডিভি পরিষেবা বান্ডেলগুলিতে অর্পণ করার অনুমতি দিন।
  • এসডিভি সার্ভিস বান্ডেলগুলোকে যানবাহন-নিরপেক্ষভাবে ডায়াগনস্টিক ডেটা প্রকাশ করার অনুমতি দিন।

এটি অর্জনের জন্য, SDV একগুচ্ছ API প্রদান করে, যা SDV সার্ভিস বান্ডেল (যা তৃতীয় পক্ষ দ্বারা সরবরাহকৃত হতে পারে) এবং OEM-এর ডায়াগনস্টিকস স্ট্যাকের বাস্তবায়নের মধ্যেকার মিথস্ক্রিয়াকে প্রমিত করে।

ডায়াগনস্টিক স্ট্যাক

চিত্র ১. ডায়াগনস্টিক স্ট্যাক।

SDV সার্ভিস বান্ডেলগুলো ডায়াগনস্টিকস ডেটা ও এনটিটি প্রকাশ করতে, ডায়াগনস্টিকস কার্যকারিতা বাস্তবায়ন করতে এবং ডায়াগনস্টিকস ম্যানেজারের কাছে ত্রুটি সম্পর্কে রিপোর্ট করতে পারে।

একটি প্রমিত SDV-ব্যাপী ডায়াগনস্টিকস API প্রদানের মাধ্যমে, আমরা SDV সার্ভিস বান্ডেলগুলোর বাস্তবায়ন সহজ করি, ফলে বিভিন্ন OEM-এর ভিন্ন ভিন্ন যানবাহনে চালানোর জন্য ডায়াগনস্টিকস পুনরায় বাস্তবায়নের প্রয়োজন এড়ানো যায়।

ডায়াগনস্টিক পরিষেবা এপিআই

SDV ডায়াগনস্টিকস API নিম্নলিখিত পরিষেবাগুলি সংজ্ঞায়িত করে, যা নির্দিষ্ট UDS (ISO 14229-1) পরিষেবাগুলির সাথে সঙ্গতিপূর্ণ:

  • service AuthenticationService : 0x29 (অথেনটিকেশন)। এটি ক্লায়েন্টকে সীমাবদ্ধ ডেটা বা পরিষেবা অ্যাক্সেস করার জন্য তার পরিচয় প্রমাণ করার একটি প্রক্রিয়া প্রদান করে।
  • service DataItemService : 0x22 (ReadDataByIdentifier) ​​এবং 0x2E (WriteDataByIdentifier)। এটি DID দ্বারা চিহ্নিত ডেটা এলিমেন্টগুলো পড়া এবং লেখার সুবিধা দেয়।
  • 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 (সিকিউরিটি অ্যাক্সেস)। এটি নির্দিষ্ট নিরাপত্তা স্তর আনলক করার জন্য প্রয়োজনীয় সিড-এবং-কী বিনিময় পরিচালনা করে।

SDV ডায়াগনস্টিকস API, AUTOSAR-এর ডায়াগনস্টিক ইভেন্ট ম্যানেজার ( AUTOSAR_SWS_DiagnosticEventManager )-এর উপর ভিত্তি করে অতিরিক্তভাবে service FaultListenerService এবং message Event সংজ্ঞায়িত করে, যা অ্যাপ্লিকেশনগুলোকে ডায়াগনস্টিক ইভেন্ট এবং ত্রুটি রিপোর্ট করতে সক্ষম করে।

এছাড়াও, 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;
}

যদি ক্যাটালগগুলিতে উপরোক্ত ( diagnostics_declaration ধারণকারী service_bundle ব্লক) সংজ্ঞায়িত থাকে, তাহলে 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 যোগ করতে হবে, যেমনটি prebuilt_etc {} ব্লকের উপরে সংশ্লিষ্ট স্বয়ংক্রিয়ভাবে তৈরি কমেন্ট-ব্লকে নির্দেশ করা হয়েছে:

apex {
    name: "<APEX-NAME>",
    ...
    prebuilts: [
        ...
        "<APEX-NAME>.<BUNDLE-NAME>-diag-config.binpb",
        ...
    ],
    ...
}

আপনাকে অবশ্যই সংশ্লিষ্ট sdv_service_bundles_manifest.textproto ফাইলের বান্ডেলের sdv_service_bundle_metadata এন্ট্রির diagnostics_config_path ফিল্ডে এই টার্গেটগুলি যোগ করতে হবে। এছাড়াও, সার্ভিস বান্ডেল এবং ডায়াগনস্টিকস ম্যানেজার সার্ভিসের মধ্যে 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
}

প্ল্যাটফর্ম ডেভেলপার গাইড

প্ল্যাটফর্ম ডেভেলপার হিসেবে, OEM-দের অবশ্যই একটি ডায়াগনস্টিকস ম্যানেজার এজেন্ট rust_binary টার্গেট ইমপ্লিমেন্ট করতে হবে:

rust_binary {
    name: "<DIAGNOSTICS-AGENT-BINARY-EXECUTABLE-NAME>",
    ...
    product_specific: true,
    ...
}

এছাড়াও, বিল্ড ফাইলগুলিতে নিম্নলিখিত ভেরিয়েবলটি অবশ্যই সেট/ওভাররাইট করতে হবে: SDV_DIAGNOSTICS_AGENT_MODULE := <DIAGNOSTICS-AGENT-BINARY-EXECUTABLE-NAME>

সুবিধার জন্য, Proto ↔ UDS অনুবাদের জন্য libsdv_uds_serde_v1 লাইব্রেরি এবং রিফ্লেকশনের জন্য VSIDL প্রোভাইডার লাইব্রেরি ব্যবহার করা যেতে পারে।

ডায়াগনস্টিকস এজেন্ট .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
}