진단 관리자에서 들어오는 진단 요청의 비동기 처리를 위한 일반 UDS 인터페이스 역할을 합니다.
AI 생성미검증모델: gemini-3.8-flash-medium · 노력: medium · 온도: 제어 불가 · 프롬프트: d0d38c589b70출처
독일어 가이드에서 번역됨gemini-3.8-flash-low · 2026-10-13 · 독일어 원문
진단 관리자에서 들어오는 진단 요청의 비동기 처리를 위한 일반 UDS 인터페이스 역할을 합니다.
ara::diag::GenericUDSService 클래스는 일반 UDS 서비스 핸들러로서 AUTOSAR 진단 관리자를 통해 임의의 UDS 진단 요청을 수신하고 처리할 수 있도록 지원합니다 [SWS_DM_00616]. PortPrototype에 바인딩된 후 서비스는 Offer()을 통해 활성화되고, HandleMessage() 메서드에서 요청을 비동기적으로 처리하며, StopOffer()를 통해 다시 등록 해제됩니다 [SWS_DM_00618], [SWS_DM_00619], [SWS_DM_00620]. 인스턴스는 복사하거나 이동할 수 없으며, DiagUdsNrcErrc의 NRC를 통해 오류를 알립니다 [SWS_DM_01657], [SWS_DM_00618].
컨텍스트
ara::diag::GenericUDSService 클래스는 UDS(Unified Diagnostic Services)에 따른 진단 통신을 위한 일반 서비스 인터페이스를 제공합니다. 전용 인터페이스에서 다루지 않거나 사용자 정의된 UDS 서비스를 구현하고 처리하려는 애플리케이션을 위한 기본 클래스 역할을 합니다. 상호작용은 주로 진단 애플리케이션 컴포넌트, AUTOSAR 진단 관리자(DM) 및 기본 모델링 컨텍스트 간에 발생합니다. 진단 관리자 및 플랫폼 모델에 대한 연결은 인스턴스화 시 DiagnosticGenericUdsInterface의 해당 PortPrototype을 가리키는 ara::core::InstanceSpecifier을 통해 설정됩니다 [SWS_DM_00616]. 인터페이스를 통해 등록이 활성화되는 즉시 진단 관리자는 들어오는 UDS 요청을 구현된 인스턴스로 전달합니다 [SWS_DM_00619].
ara::diag::GenericUDSService의 인스턴스는 고정된 PortPrototype에 바인딩되며 단일 인스턴스로 설계되었습니다: 복사 생성자 [SWS_DM_01657], 이동 생성자 [SWS_DM_01658] 및 대입 연산자 [SWS_DM_01655], [SWS_DM_01656]은 삭제되었습니다(delete). 생성은 InstanceSpecifier 및 동시성 구성 ConcurrencyType(kConcurrent 또는 kNotConcurrent)을 지정하여 생성자를 통해 명시적으로 수행됩니다 [SWS_DM_00616]. 서비스 준비 상태의 수명 주기는 두 가지 주요 단계로 나뉩니다:
제공되지 않음 (Stopped / Initial): 생성 후 또는 StopOffer() 호출 후 DM은 인스턴스로 요청을 전달하지 않습니다 [SWS_DM_00620].
제공됨 (Offered):Offer()이 성공적으로 호출된 후 핸들러가 활성화되어 들어오는 진단 메시지를 처리합니다 [SWS_DM_00619].
일반적인 흐름에는 파생된 서비스 클래스의 인스턴스화, 핸들러 활성화, 비동기 작업 처리 및 이후의 비활성화가 포함됩니다:
인스턴스화: 애플리케이션은 적절한 ara::core::InstanceSpecifier 및 원하는 ConcurrencyType을 사용하여 특수화된 서비스 클래스를 인스턴스화합니다 [SWS_DM_00616].
서비스 제공:Offer()을 호출하면 진단 관리자에 메시지 수신 준비 상태가 신호됩니다 [SWS_DM_00619].
메시지 처리: 들어오는 UDS 요청으로 인해 DM이 순수 가상 메서드 HandleMessage()을 호출합니다. 서비스 식별자(sid), 페이로드(requestData), 메타데이터(metaInfo) 및 cancellationHandler이 전달됩니다 [SWS_DM_00618]. 이 메서드는 결과 또는 오류가 비동기적으로 제공되는 ara::core::Future<OperationOutput>을 반환합니다 [SWS_DM_00618]. 핸들러는 cancellationHandler.IsCanceled()을 통해 작업이 취소되었는지 확인하거나 cancellationHandler.SetNotifier()을 통해 알림을 등록할 수 있습니다 [SWS_DM_00618].
인스턴스화 위반: 모델에서 InstanceSpecifier의 매핑에 실패하면 프레임워크는 정의된 위반을 보고합니다: InstanceSpecifierMappingIntegrityViolation(Specifier를 모델에서 확인할 수 없거나 PortPrototype을 가리키지 않음), PortInterfaceMappingViolation(포트가 DiagnosticServiceGenericMapping을 통해 참조되지 않음), ProcessMappingViolation(일치하는 프로세스가 모델링되지 않음) 또는 InstanceSpecifierAlreadyInUseViolation(Specifier가 프로세스에서 이미 사용됨) [SWS_DM_00616].
중복 제공 호출: 서비스가 이미 활성 상태로 제공되고 있음에도 Offer()이 호출되면 호출이 실패하고 오류 코드 DiagOfferErrc::kAlreadyOffered을 반환합니다(롤백 의미론) [SWS_DM_00619].
진단 관련 실행 오류:HandleMessage()에서 UDS 메시지에 기능적으로 긍정 응답할 수 없는 경우, Future의 결과는 DiagUdsNrcErrc을 통해 ISO 14229-1에 따른 적절한 NRC(Negative Response Code)로 채워져야 합니다 [SWS_DM_00618]. 또한 기본 진단 대화가 조기에 종료된 경우 구현은 cancellationHandler의 취소 신호에 응답해야 합니다 [SWS_DM_00618].
InstanceSpeci- InstanceSpecifier either cannot be resolved in the model in the fierMappingIn- context of your executable, or it refers to a model element other tegrityViolation than a PortPrototype. PortInterfaceMap- A PortPrototype that is typed by a pingViolation DiagnosticGenericUdsInterface needs to be referenced by a DiagnosticServiceGenericMapping. ProcessMappingVio- Matching InstanceRef exists, but no matching (modelled) Process lation found that matches the (runtime) process.
InstanceSpecifier- Violation message that is sent in case a constructor in the ara AlreadyInUseViola- framework was called with an InstanceSpecifier already in use in tion this process.
Parameter (in)
Parameter
Beschreibung
specifier
InstanceSpecifier to a PortPrototype of a DiagnosticGenericUdsInterface.
concurrencyType
Specifies if the interface is implemented as thread safe ( kConcurrent) or non-thread safe (kNotConcurrent).
Request a governed re-review of this record. The record is not changed immediately.
Diagnostic Management(DM)은 수신된 각 진단 요청 메시지에 대해 이 메서드를 호출합니다[SWS_DM_00618]. 매개변수를 통해 서비스 식별자(sid), 페이로드(ara::core::Span<const std::uint8_t> 형식의 requestData), 연결 정보(metaInfo) 및 cancellationHandler가 전달됩니다. 처리는 ara::core::Future<OperationOutput>[SWS_DM_00618] 반환을 통해 비동기식으로 이루어집니다. requestData의 페이로드는 연결된 Promise가 이행되거나 작업이 취소될 때까지 유효하게 유지됩니다. 애플리케이션은 cancellationHandler.IsCanceled()를 통해 취소 상태를 확인하거나 cancellationHandler.SetNotifier()을 사용하여 세션 취소에 대한 알림을 등록할 수 있습니다[SWS_DM_00618].
오류 처리
요청을 성공적으로 처리할 수 없는 경우, 애플리케이션은 DiagUdsNrcErrc[SWS_DM_00618]을 통해 적절한 부정 응답 코드(ISO 14229-1에 따른 NRC)를 사용하여 반환된 Future를 통해 오류를 알립니다.
동시성 및 제약 조건
metaInfo의 수명:metaInfo 객체의 유효성은 메서드 호출의 활성 실행 기간으로 엄격하게 제한됩니다[SWS_DM_01345]. HandleMessage 반환 후 이를 저장하거나 사용하는 것은 정의되지 않은 동작으로 이어집니다.
conditional whether the function has to be implemented thread safe or non-thread safe is determined by the ConcurrencyType given in the constructor
Parameter (in)
Parameter
Beschreibung
sid
Diagnostic Request Service Identifier.
requestData
Diagnostic request data (starting after SID). Lifetime: Valid until Promise is fulfilled or the processing is cancelled by the cancellationHandler.
metaInfo
MetaInfo of the request.
cancellationHandler
This parameter is used to • Query the current cancellation status by calling cancellationHandler.IsCanceled. Returns TRUE in case, the current conversation has been cancelled and FALSE otherwise. • Register a notifier function by calling cancellationHandler.SetNotifier. The registered notifier is called if the current conversation is cancelled.
This Offer will enable the DM to forward request messages to this handler.
AI 생성미검증모델: gemini-3.8-flash-medium · 노력: medium · 온도: 제어 불가 · 프롬프트: 19027d24302f출처열린 질문 (1)
독일어 가이드에서 번역됨gemini-3.8-flash-low · 2026-10-13 · 독일어 원문
사용
ara::diag::GenericUDSService 클래스의 Offer 메서드는 진단 요청의 전달을 활성화합니다. 즉, Diagnostic Manager(DM)가 수신 UDS 요청 메시지를 이 핸들러로 전달할 수 있도록 합니다 [SWS_DM_00619]. 동기식 호출은 파라미터가 없고 차단되지 않으며 반환값으로 ara::core::Result<void>을 제공합니다 [SWS_DM_00619]. 실행은 일반적으로(해석:) 네트워크를 통해 진단 메시지를 처리해야 하기 전, Adaptive Application의 초기화 및 시작 단계 중에 발생할 것으로 보입니다. 질문 Q-c1e385a434fe1e4e (열림)
오류 처리 및 동시성
이 함수는 noexcept으로 선언되어 있으며 예외 안전성을 보장합니다 [SWS_DM_00619]. 서비스가 이미 이전에 제공된 경우 등록이 실패하고 롤백 시맨틱과 함께 오류 코드 DiagOfferErrc::kAlreadyOffered를 반환합니다 [SWS_DM_00619]. 스레드 안전성과 관련하여 이 인터페이스는 not thread-safe로 지정되어 있습니다 [SWS_DM_00619]. 동일한 인스턴스에 대한 동시 호출은 호출하는 애플리케이션에 의해 동기화되어야 합니다.
This StopOffer will disable the forwarding of request messages from DM.
AI 생성미검증모델: gemini-3.8-flash-medium · 노력: medium · 온도: 제어 불가 · 프롬프트: 5dba8a8b4077출처열린 질문 (1)
독일어 가이드에서 번역됨gemini-3.8-flash-low · 2026-10-13 · 독일어 원문
사용
ara::diag::GenericUDSService 클래스의 StopOffer 메서드는 Diagnostic Management(DM)에서 서비스 인스턴스로 전달되는 수신 진단 요청의 포워딩을 비활성화합니다 [SWS_DM_00620]. 이 함수는 헤더 ara/diag/generic_uds_service.h을(를) 통해 제공되며, 매개변수를 기대하지 않고 void 반환 타입을 갖습니다 [SWS_DM_00620].
오류 처리
이 메서드는 noexcept(으)로 지정되어 있으며 예외 안전(exception safe)한 것으로 명시되어 있습니다 [SWS_DM_00620]. 예외를 발생시키지 않고 오류 코드를 반환하지 않으며, 포워딩 중지는 결정론적으로 수행됩니다.
동시성 및 제약사항
사양에 따르면 StopOffer은(는) 스레드 안전하지 않음(not thread-safe)으로 분류되어 있습니다 [SWS_DM_00620]. 동일한 인스턴스에 대한 병렬 호출은 애플리케이션 측에서 보호되어야 합니다. 해석: StopOffer 호출은 보류 중인 포워딩을 방지하기 위해 일반적으로 인스턴스 객체가 파괴되기 전이나 일시적으로 사용할 수 없을 때 수행될 것으로 추정됩니다. 질문 Q-408323dd00c313c0 (열림)
gemini-3.8-flash-low· 2026-10-13 · 독일어 원문