以下是对上述内容的总结:
一、教程概述
本教程展示了关于如何使用ara::com
的基础和特性的最小示例。
二、服务接口用途
1. 清单分为多个部分,包括 Machine Manifest、SI Manifest、Execution Manifest 和 RPortPrototypes 与 PPortPrototypes,涵盖了与设计和部署相关的ara::com
模型元素。
2. 服务接口部署描述服务接口通过网络通信的方式,需提供网络绑定引用、服务接口 ID 和事件、方法、字段的部署信息。
<AR-PACKAGE>
<SHORT-NAME>ServiceInterfaceDeployments</SHORT-NAME>
<ELEMENTS>
<SOMEIP-SERVICE-INTERFACE-DEPLOYMENT>
<SHORT-NAME>MyInterface_SOMEIP</SHORT-NAME>
<EVENT-DEPLOYMENTS>
<SOMEIP-EVENT-DEPLOYMENT>
<SHORT-NAME>Counter_SOMEIP</SHORT-NAME>
<EVENT-REF DEST="VARIABLE-DATA-PROTOTYPE">/myExample/ServiceInterfaces/myInterface/Counter</EVENT-REF>
<EVENT-ID>1</EVENT-ID>
<TRANSPORT-PROTOCOL>UDP</TRANSPORT-PROTOCOL>
</SOMEIP-EVENT-DEPLOYMENT>
</EVENT-DEPLOYMENTS>
<SERVICE-INTERFACE-REF DEST="SERVICE-INTERFACE">/myExample/ServiceInterfaces/myInterface</SERVICE-INTERFACE-REF>
<SERVICE-INTERFACE-ID>99</SERVICE-INTERFACE-ID>
<SERVICE-INTERFACE-VERSION>
<MAJOR-VERSION>1</MAJOR-VERSION>
<MINOR-VERSION>0</MINOR-VERSION>
</SERVICE-INTERFACE-VERSION>
</SOMEIP-SERVICE-INTERFACE-DEPLOYMENT>
</ELEMENTS>
</AR-PACKAGE>
3. 服务实例部署包括将服务实例映射到 ApplicationEndpoints 和 Machine:
- 映射到 ApplicationEndpoints 将 ServiceInstance 连接到 PortPrototype 和进程。
<AR-PACKAGE>
<SHORT-NAME>ServiceInstanceToPortPrototypeMappings</SHORT-NAME>
<ELEMENTS>
<SERVICE-INSTANCE-TO-PORT-PROTOTYPE-MAPPING>
<SHORT-NAME>ProvidedServiceInstance_toPort</SHORT-NAME>
<PORT-PROTOTYPE-IREF>
<CONTEXT-ROOT-SW-COMPONENT-PROTOTYPE-REF DEST="ROOT-SW-COMPONENT-PROTOTYPE">/myExample/Executables/myExecutable/mySwComponentPrototype</CONTEXT-ROOT-SW-COMPONENT-PROTOTYPE-REF>
<TARGET-PORT-PROTOTYPE-REF DEST="P-PORT-PROTOTYPE">/apd/AdaptiveApplicationSwComponentTypes/Publisher/myInterface_PPort</TARGET-PORT-PROTOTYPE-REF>
</PORT-PROTOTYPE-IREF>
<PROCESS-REF DEST="PROCESS">/apd/Machines/PublisherMachine/Processes/myProcess</PROCESS-REF>
<SERVICE-INSTANCE-REF DEST="PROVIDED-SOMEIP-SERVICE-INSTANCE">/myExample/Machines/myMachine/ServiceInstances/ProvidedSomeipServiceInstance</SERVICE-INSTANCE-REF>
</SERVICE-INSTANCE-TO-PORT-PROTOTYPE-MAPPING>
</ELEMENTS>
</AR-PACKAGE>
- 映射到机器将服务实例连接到通信连接器,通信连接器引用包含地址、网络掩码和网关的网络端点。
<AR-PACKAGE>
<SHORT-NAME>ServiceInstanceToMachineMappings</SHORT-NAME>
<ELEMENTS>
<SOMEIP-SERVICE-INSTANCE-TO-MACHINE-MAPPING>
<SHORT-NAME>ProvidedServiceInstance_toMachine</SHORT-NAME>
<COMMUNICATION-CONNECTOR-REF DEST="ETHERNET-COMMUNICATION-CONNECTOR">/myExample/MachineDesigns/myMachineDesign/myConnector</COMMUNICATION-CONNECTOR-REF>
<SERVICE-INSTANCE-REFS>
<SERVICE-INSTANCE-REF DEST="PROVIDED-SOMEIP-SERVICE-INSTANCE">/myExample/Machines/myMachine/ServiceInstances/ProvidedSomeipServiceInstance</SERVICE-INSTANCE-REF>
</SERVICE-INSTANCE-REFS>
<UDP-PORT>33222</UDP-PORT>
</SOMEIP-SERVICE-INSTANCE-TO-MACHINE-MAPPING>
</ELEMENTS>
</AR-PACKAGE>
<AR-PACKAGE>
<SHORT-NAME>CommunicationClusters</SHORT-NAME>
<ELEMENTS>
<ETHERNET-CLUSTER>
<SHORT-NAME>myNet</SHORT-NAME>
<ETHERNET-CLUSTER-VARIANTS>
<ETHERNET-CLUSTER-CONDITIONAL>
<PHYSICAL-CHANNELS>
<ETHERNET-PHYSICAL-CHANNEL>
<SHORT-NAME>myChannel</SHORT-NAME>
<COMM-CONNECTORS>
<COMMUNICATION-CONNECTOR-REF-CONDITIONAL>
<COMMUNICATION-CONNECTOR-REF DEST="ETHERNET-COMMUNICATION-CONNECTOR">/myExample/MachineDesigns/myMachineDesign/myConnector</COMMUNICATION-CONNECTOR-REF>
</COMMUNICATION-CONNECTOR-REF-CONDITIONAL>
</COMM-CONNECTORS>
<NETWORK-ENDPOINTS>
<NETWORK-ENDPOINT>
<SHORT-NAME>myMachineEndpoint</SHORT-NAME>
<FULLY-QUALIFIED-DOMAIN-NAME/>
<NETWORK-ENDPOINT-ADDRESSES>
<IPV-4-CONFIGURATION>
<DEFAULT-GATEWAY>192.168.7.1</DEFAULT-GATEWAY>
<IPV-4-ADDRESS>192.168.7.2</IPV-4-ADDRESS>
<NETWORK-MASK>255.255.255.0</NETWORK-MASK>
</IPV-4-CONFIGURATION>
</NETWORK-ENDPOINT-ADDRESSES>
</NETWORK-ENDPOINT>
<NETWORK-ENDPOINT>
<SHORT-NAME>mySDEndpoint</SHORT-NAME>
<FULLY-QUALIFIED-DOMAIN-NAME/>
<NETWORK-ENDPOINT-ADDRESSES>
<IPV-4-CONFIGURATION>
<IPV-4-ADDRESS>224.244.224.245</IPV-4-ADDRESS>
</IPV-4-CONFIGURATION>
</NETWORK-ENDPOINT-ADDRESSES>
</NETWORK-ENDPOINT>
</NETWORK-ENDPOINTS>
</ETHERNET-PHYSICAL-CHANNEL>
</PHYSICAL-CHANNELS>
</ETHERNET-CLUSTER-CONDITIONAL>
</ETHERNET-CLUSTER-VARIANTS>
</ETHERNET-CLUSTER>
</ELEMENTS>
</AR-PACKAGE>
4. 服务实现在应用层进行,使用服务发现协议实现两个应用程序之间的通信。服务骨架类提供OfferService()
方法来提供服务。
ara::core::Result<void> OfferService();
服务代理类提供根据实例标识符或实例说明符查找服务的方法。
static ara::core::Result<ara::com::ServiceHandleContainer<<ProxyClassName>::HandleType>> FindService(ara::com::InstanceIdentifier instance);
static ara::core::Result<ara::com::ServiceHandleContainer<<ProxyClassName>::HandleType>> FindService(ara::com::InstanceSpecifier instance);
对于事件,应用程序使用Event::Subscribe(size_t maxSampleCount)
方法订阅事件并设置缓存大小,使用Event::Unsubscribe()
方法取消订阅。
ara::core:Result<void> Event::Subscribe(size_t maxSampleCount);
void Event::Unsubscribe();