Configure AUTOSAR Adaptive Service Discovery Modes
AUTOSAR adaptive service communication provides the option to configure applications
            to use one-time or dynamic discovery to subscribe to services. The default discovery
            mode, OneTime, allows an AUTOSAR application to find and subscribe to
            services at initialization. This mode of discovery may require that services are started
            before the application. You can change the service discovery mode to
                DynamicDiscovery to enable an AUTOSAR application to find and
            subscribe to services as they become available.
You can configure, in your model or programmatically, the service discovery mode of
            each required service port as OneTime or
                DynamicDiscovery:
- From your model, you can use the AUTOSAR Dictionary to open the Service discovery attributes of required ports and select their service discovery modes. - This example shows how to set a required port to - DynamicDiscovery. 
- Programmatically, you can use the - setfunction from the getAUTOSARProperties API to configure the service discovery mode.- This example shows how to set a required port to - DynamicDiscovery.- hModel = 'autosar_LaneGuidance'; openExample(hModel); apiObj = autosar.api.getAUTOSARProperties(hModel); set(apiObj,"/LaneGuidance_pkg/LaneGuidance_swc/LaneGuidance/RequiredPort/", ... "ServiceDiscoveryMode", "DynamicDiscovery") 
The service discovery mode value impacts the generated C++ code (in the model source code file) in the following two locations:
- The call site of the - StartFindServiceAPI and registration of the callback (for both the- InstanceIdentifierand- InstanceSpecifiervariants).- // Model initialize function void autosar_LaneGuidanceModelClass::initialize() { ProvidedPort = std::make_shared< company::chassis::provided::skeleton:: ProvidedInterfaceSkeleton >(ara::com::InstanceIdentifier("2"), ara::com:: MethodCallProcessingMode::kPoll); ProvidedPort->OfferService(); company::chassis::required::proxy::RequiredInterfaceProxy::StartFindService (std::move(std::bind(&autosar_LaneGuidanceModelClass::RequiredPortSvcHandler, this, std::placeholders::_1, std::placeholders::_2)), ara::com:: InstanceIdentifier("1")); }
- The definition of the callback function. - void autosar_LaneGuidanceModelClass::RequiredPortSvcHandler(ara::com:: ServiceHandleContainer< company::chassis::required::proxy:: RequiredInterfaceProxy::HandleType > svcHandles, const ara::com:: FindServiceHandle fsHandle) { if ((!RequiredPort) && (svcHandles.size() > 0U)) { RequiredPort = std::make_shared< company::chassis::required::proxy:: RequiredInterfaceProxy >(*svcHandles.begin()); RequiredPort->leftCarInBlindSpot.Subscribe(1U); RequiredPort->leftLaneDistance.Subscribe(1U); RequiredPort->leftTurnIndicator.Subscribe(1U); RequiredPort->rightCarInBlindSpot.Subscribe(1U); RequiredPort->rightLaneDistance.Subscribe(1U); RequiredPort->rightTurnIndicator.Subscribe(1U); company::chassis::required::proxy::RequiredInterfaceProxy::StopFindService (fsHandle); } }