AUTOSAR_EXP_SensorInterfaces
FIG-7cc78e862ed00ac0
932 × 379 px
4 Release(s)
Figure 5.5: Service Registering flow Smart Sensor API
SHA-256 Inhalts-Fingerabdruck:
7cc78e862ed00ac0cbcb3ee45b074ddb06ccc200705ea9034bf15d55d61c03f5
✦
KI-generierte Bildanalyse & technische Beschreibung
Modell: gemini-3.8-flash (via agy) · Rezept figure-description@2 · erstellt am 2026-10-07
1. Diagrammtyp & Architektur-Kontext
- Klassifikation: Hybrides UML-Sequenzdiagramm mit assoziiertem C++11/C++14-Code-Mapping (
ara::com-API-Aufrufe). - Architektur-Kontext: AUTOSAR Adaptive Platform (AP), Domäne ADAS / Sensor-Subsysteme gemäß
AUTOSAR_EXP_SensorInterfaces. - Funktionaler Zweck: Standardisierter Service-Registrierungs- und Discovery-Ablauf für Smart-Sensor-APIs (exemplarisch: Radar-Sensor). Dargestellt wird die dynamische Dienstinitialisierung, Feature-/Capability-Abfrage zur Laufzeit (Feature-Discovery) sowie die anschließende bedingte Ereignis-Abonnierung (Event Subscription) zwischen Sensor-Provider (Skeleton) und Sensor-Konsument/Client (Proxy).
2. Komponenten, Entitäten & Schnittstellen
- Akteure / Rollen:
provider(Smart Sensor / Radar-Instanz): Implementiert das Service-Skeleton (smartSensorRadar_skeleton, Namespace-Beispielrenault::ex::smartsensor::...).client(ADAS-Konsument / z. B.EnvironmentModel): Nutzt die Service-Proxy-Instanz (smartSensorRadar_proxy).
- Schnittstellen & Entitäten (
ara::com):- Service Discovery:
OfferService()(Skeleton-seitig) undStartFindService()mit Übergabe eines Find-Service-Handlers (FindServiceHandlerCallback / Lambda). - Handle-Container:
ara::com::ServiceHandleContainer<...::HandleType>zur Speicherung von Service-Instanzreferenzen (Kardinalität0..*, im Codehandles.size() > 0). - Synchronisationsprimitive:
std::mutex(smartSensorRadar_proxy_mutex) undstd::lock_guardzur thread-sicheren Instanziierung des Smart-Pointers (std::make_shared<...::proxy::radar>). - Methoden-Interface (Request/Response):
getCapabilitySignature()mit Rückgabetypara::core::Future<CapabilitySignatureType>. - Event-Interfaces (Publish/Subscribe):
baseEvent: Pflicht-Ereigniskanal für Sensor-Basisdaten.optionalEvent: Optionaler Ereigniskanal für erweiterte Sensordaten (abhängig von der Hardware-Fähigkeit).
- Cache-Policy:
ara::com::EventCacheUpdatePolicy::kNewestNmit Sample-PuffergrößeN = 1.
- Service Discovery:
3. Dynamisches Verhalten & Sequenzablauf
- Service Registration & Discovery (Schritt 1):
- Provider: Signalisiert Dienstbereitschaft über das Netzwerk via
smartSensorRadar_skeleton->OfferService()(über SOME/IP-SD oder IPC). - Client: Registriert asynchronen Discovery-Listener via
StartFindService(...). Bei Eintreffen verfügbarer Handles erfolgt die Ausführung des CallbacksserviceAvailabilityCallback(std::move(handles)). - Client: Sichert die Instanziierung thread-sicher über einen Mutex-Lock ab und erzeugt die Proxy-Instanz
smartSensorRadar_proxybasierend aufhandles[0].
- Provider: Signalisiert Dienstbereitschaft über das Netzwerk via
- Capability Signature Check (Schritt 2):
- Client: Initiiert nicht-blockierenden Methodenaufruf
smartSensorRadar->getCapabilitySignature(), der einFuture-Objekt liefert. - Client: Synchronisiert/blockiert den Thread explizit via
capability_future.get()zur Auswertung der Sensor-Signatur. - Entscheidungslogik: Makro/Funktion
SENSOR_CAPABILITY_OPTIONAL(capability)prüft, ob optionale Sensor-Features unterstützt werden; Flagsensor_optionalswird aufOKoderFAILEDgesetzt.
- Client: Initiiert nicht-blockierenden Methodenaufruf
- Event Subscription (Schritt 3):
- Client: Abonniert obligatorisch
baseEvent.Subscribe(kNewestN, 1). - Client: Bedingtes Abonnement: Nur bei
sensor_optionals == OKwirdoptionalEvent.Subscribe(kNewestN, 1)aufgerufen. - Provider: Startet nach erfolgreicher Subscription das Publizieren der entsprechenden Events an den Client.
- Client: Abonniert obligatorisch
4. Normative Relevanz & Entwickler-Hinweise
- AP-Design-Pattern: Trennung von Basis- und Options-Ereignissen ermöglicht dynamische Skalierbarkeit über verschiedene Sensor-Hardware-Revisionen (Low-End vs. High-End Smart Sensoren) bei identischem generiertem Service-Interface.
- Blockierendes Warten vermeiden: Der im Schaubild dargestellte Aufruf
capability_future.get()blockiert den aufrufenden OS-Thread bis zur Antwort des Sensors. In sicherheitskritischen / harten Echtzeit-Anwendungen (z. B. ASIL-D Thread-Kontexten) ist zwingend stattdessenara::core::Future::then()(asynchrones Chaining via Continuation) oderwait_for()mit Timeout-Überwachung einzusetzen. - Lebenszyklus- & Concurrency-Management: Die Absicherung per
std::lock_guardist obligatorisch, da derFindService-Callback aus dem Kontext desara::com-Reactor-/Worker-Threads ausgelöst wird, während die Proxy-Nutzung im Anwendungs-Thread erfolgt. - SOME/IP-SD Netzwerklast: Das dynamische Abfragen der Capabilities (
getCapabilitySignature) erzeugt Round-Trip-Time (RTT) im Startzyklus. Bei deterministischen Systemen mit statischem Sensor-Setup kann die Capability-Zuordnung alternativ direkt in den Manifest-Dateien (Execution- & Service-Instance-Manifest) modelliert werden.
Zugeordnete Anforderungen
Diese Angaben zeigt der Versions-Explorer.