| <?xml version="1.0" encoding="UTF-8"?> |
| <xmi:XMI xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:RTCppProperties="http://www.eclipse.org/papyrus/umlrt/cppproperties" xmlns:UMLRTStateMachines="http://www.eclipse.org/papyrus/umlrt/statemachine" xmlns:UMLRealTime="http://www.eclipse.org/papyrus/umlrt" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML"> |
| <uml:Model xmi:id="_qhM-wJxVEea2Crll1F5HOw" name="RootElement"> |
| <eAnnotations xmi:id="_sx_8sJxVEea2Crll1F5HOw" source="http://www.eclipse.org/papyrus-rt/language/1.0.0"> |
| <details xmi:id="_syBK0JxVEea2Crll1F5HOw" key="language" value="umlrt-cpp"/> |
| </eAnnotations> |
| <packagedElement xmi:type="uml:Class" xmi:id="_ylmTAJxVEea2Crll1F5HOw" name="Top" isActive="true"> |
| <ownedAttribute xmi:id="_4UxcUJxVEea2Crll1F5HOw" name="application" visibility="protected" type="_4q8goJxVEea2Crll1F5HOw" isOrdered="true" aggregation="composite"/> |
| <ownedAttribute xmi:id="_9IaxgJxVEea2Crll1F5HOw" name="hardware" visibility="protected" type="_9XIi8JxVEea2Crll1F5HOw" isOrdered="true" aggregation="composite"/> |
| <ownedConnector xmi:id="_gP5C0JxcEea2Crll1F5HOw" name="RTConnector1"> |
| <end xmi:id="_gP8GIJxcEea2Crll1F5HOw" partWithPort="_4UxcUJxVEea2Crll1F5HOw" role="_gDBdwJxXEea2Crll1F5HOw"/> |
| <end xmi:id="_gP8GIZxcEea2Crll1F5HOw" partWithPort="_9IaxgJxVEea2Crll1F5HOw" role="_jB630JxXEea2Crll1F5HOw"/> |
| </ownedConnector> |
| </packagedElement> |
| <packagedElement xmi:type="uml:Class" xmi:id="_4q8goJxVEea2Crll1F5HOw" name="Application" classifierBehavior="_m0cHMJxXEea2Crll1F5HOw" isActive="true"> |
| <ownedAttribute xmi:type="uml:Port" xmi:id="_gDBdwJxXEea2Crll1F5HOw" name="port1" visibility="public" type="_FSWtEJxWEea2Crll1F5HOw" isOrdered="true" aggregation="composite" isBehavior="true"/> |
| <ownedAttribute xmi:type="uml:Port" xmi:id="_yuNxkJxXEea2Crll1F5HOw" name="log" visibility="protected" isOrdered="true" aggregation="composite" isBehavior="true" isService="false"> |
| <type xmi:type="uml:Collaboration" href="pathmap://UMLRTRTSLIB/UMLRT-RTS.uml#_6kIb0IeXEeSVyrlWP4nYew"/> |
| </ownedAttribute> |
| <ownedAttribute xmi:type="uml:Port" xmi:id="_1LpdUJxXEea2Crll1F5HOw" name="timing" visibility="protected" isOrdered="true" aggregation="composite" isBehavior="true" isService="false"> |
| <type xmi:type="uml:Collaboration" href="pathmap://UMLRTRTSLIB/UMLRT-RTS.uml#_MxQZgGXsEeS_4daqvwyFrg"/> |
| </ownedAttribute> |
| <ownedBehavior xmi:type="uml:StateMachine" xmi:id="_m0cHMJxXEea2Crll1F5HOw" name="StateMachine" isReentrant="false"> |
| <region xmi:id="_m0g_sJxXEea2Crll1F5HOw" name="Region"> |
| <transition xmi:id="_m0sl4JxXEea2Crll1F5HOw" name="Initial" source="_m0kDAJxXEea2Crll1F5HOw" target="_m0o7gJxXEea2Crll1F5HOw"/> |
| <transition xmi:id="_bpkUwJxYEea2Crll1F5HOw" name="feedback" source="_m0o7gJxXEea2Crll1F5HOw" target="_VYZRoJxYEea2Crll1F5HOw"> |
| <effect xmi:type="uml:OpaqueBehavior" xmi:id="_nuCMMJxYEea2Crll1F5HOw"> |
| <language>C++</language> |
| <body> int response = umlrtparam_data; |
| log.log("[Application] response received: %d", response); |
| </body> |
| </effect> |
| <trigger xmi:id="_ewheoJxYEea2Crll1F5HOw" event="_Vsj1sJxWEea2Crll1F5HOw" port="_gDBdwJxXEea2Crll1F5HOw"/> |
| </transition> |
| <transition xmi:id="_ys_0IJxYEea2Crll1F5HOw" name="timeout" source="_m0o7gJxXEea2Crll1F5HOw" target="_ql1fwJxYEea2Crll1F5HOw"> |
| <trigger xmi:id="_1j36oJxYEea2Crll1F5HOw" port="_1LpdUJxXEea2Crll1F5HOw"> |
| <event xmi:type="uml:CallEvent" href="pathmap://UMLRTRTSLIB/UMLRT-RTS.uml#_IaEO8HDxEeSwWKwNKw1iAA"/> |
| </trigger> |
| </transition> |
| <subvertex xmi:type="uml:Pseudostate" xmi:id="_m0kDAJxXEea2Crll1F5HOw"> |
| <name xsi:nil="true"/> |
| </subvertex> |
| <subvertex xmi:type="uml:State" xmi:id="_m0o7gJxXEea2Crll1F5HOw" name="SendingSignalAndWaitingForResponse"> |
| <entry xmi:type="uml:OpaqueBehavior" xmi:id="__9czAJxXEea2Crll1F5HOw"> |
| <language>C++</language> |
| <body> log.log("[Application] setting timer"); |
| timing.informIn(UMLRTTimespec(3,0)); |
| log.log("[Application] sending message to Hardware"); |
| port1.setPinValue(10,123).send(); |
| log.log("[Application] waiting for response"); |
| </body> |
| </entry> |
| </subvertex> |
| <subvertex xmi:type="uml:State" xmi:id="_VYZRoJxYEea2Crll1F5HOw" name="ResponseReceived"/> |
| <subvertex xmi:type="uml:State" xmi:id="_ql1fwJxYEea2Crll1F5HOw" name="TimedOut"> |
| <entry xmi:type="uml:OpaqueBehavior" xmi:id="_w60r4JxYEea2Crll1F5HOw"> |
| <language>C++</language> |
| <body> log.log("[Application] timed out"); |
| </body> |
| </entry> |
| </subvertex> |
| </region> |
| </ownedBehavior> |
| </packagedElement> |
| <packagedElement xmi:type="uml:Class" xmi:id="_9XIi8JxVEea2Crll1F5HOw" name="HWAdapter" classifierBehavior="_UHnJwJxZEea2Crll1F5HOw" isActive="true"> |
| <ownedAttribute xmi:type="uml:Port" xmi:id="_jB630JxXEea2Crll1F5HOw" name="port1" visibility="public" type="_FSWtEJxWEea2Crll1F5HOw" isOrdered="true" aggregation="composite" isBehavior="true" isConjugated="true"/> |
| <ownedAttribute xmi:type="uml:Port" xmi:id="_xrvWAJxZEea2Crll1F5HOw" name="log" visibility="protected" isOrdered="true" aggregation="composite" isBehavior="true" isService="false"> |
| <type xmi:type="uml:Collaboration" href="pathmap://UMLRTRTSLIB/UMLRT-RTS.uml#_6kIb0IeXEeSVyrlWP4nYew"/> |
| </ownedAttribute> |
| <ownedBehavior xmi:type="uml:StateMachine" xmi:id="_UHnJwJxZEea2Crll1F5HOw" name="StateMachine" isReentrant="false"> |
| <region xmi:id="_UHqNEJxZEea2Crll1F5HOw" name="Region"> |
| <transition xmi:id="_UHvFkJxZEea2Crll1F5HOw" name="Initial" source="_UHrbMJxZEea2Crll1F5HOw" target="_UHtQYJxZEea2Crll1F5HOw"/> |
| <transition xmi:id="_nK_7IJxZEea2Crll1F5HOw" name="setPinValue" source="_UHtQYJxZEea2Crll1F5HOw" target="_UHtQYJxZEea2Crll1F5HOw"> |
| <effect xmi:type="uml:OpaqueBehavior" xmi:id="_R_KaEJxaEea2Crll1F5HOw"> |
| <language>C++</language> |
| <body> int pin = umlrtparam_pin; |
| int val = umlrtparam_val; |
| log.log("[Hardware] setPinValue received: %d,%d", pin, val); |
| // invoke external API from CustomAPIWrapper |
| set_pin_value(pin, val); |
| int result = get_pin_value(pin); |
| log.log("[Hardware] sending feedback: %d", result); |
| port1.feedback(result).send(); |
| </body> |
| </effect> |
| <trigger xmi:id="_qN0L4JxZEea2Crll1F5HOw" event="_m4iZgJxWEea2Crll1F5HOw" port="_jB630JxXEea2Crll1F5HOw"/> |
| </transition> |
| <subvertex xmi:type="uml:Pseudostate" xmi:id="_UHrbMJxZEea2Crll1F5HOw"> |
| <name xsi:nil="true"/> |
| </subvertex> |
| <subvertex xmi:type="uml:State" xmi:id="_UHtQYJxZEea2Crll1F5HOw" name="WaitingForApplicationMessages"> |
| <entry xmi:type="uml:OpaqueBehavior" xmi:id="_25OukJxZEea2Crll1F5HOw"> |
| <language>C++</language> |
| <body> log.log("[Hardware] waiting for application messages"); |
| </body> |
| </entry> |
| </subvertex> |
| </region> |
| </ownedBehavior> |
| </packagedElement> |
| <packagedElement xmi:type="uml:Package" xmi:id="_FSaXcJxWEea2Crll1F5HOw" name="HWIF"> |
| <packagedElement xmi:type="uml:Collaboration" xmi:id="_FSWtEJxWEea2Crll1F5HOw" name="HWIF"> |
| <interfaceRealization xmi:id="_FSi6UJxWEea2Crll1F5HOw" client="_FSWtEJxWEea2Crll1F5HOw" supplier="_FSfP8JxWEea2Crll1F5HOw" contract="_FSfP8JxWEea2Crll1F5HOw"/> |
| <interfaceRealization xmi:id="_FSq2IJxWEea2Crll1F5HOw" client="_FSWtEJxWEea2Crll1F5HOw" supplier="_FSoZ4JxWEea2Crll1F5HOw" contract="_FSoZ4JxWEea2Crll1F5HOw"/> |
| </packagedElement> |
| <packagedElement xmi:type="uml:Interface" xmi:id="_FSfP8JxWEea2Crll1F5HOw" name="HWIF"> |
| <ownedOperation xmi:id="_SVCgQJxWEea2Crll1F5HOw" name="feedback"> |
| <ownedParameter xmi:id="_XhfXAJxWEea2Crll1F5HOw" name="data"> |
| <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/> |
| </ownedParameter> |
| </ownedOperation> |
| </packagedElement> |
| <packagedElement xmi:type="uml:Interface" xmi:id="_FSkvgJxWEea2Crll1F5HOw" name="HWIF~"> |
| <ownedOperation xmi:id="_k0HqsJxWEea2Crll1F5HOw" name="setPinValue"> |
| <ownedParameter xmi:id="_l2IhUJxWEea2Crll1F5HOw" name="pin"> |
| <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/> |
| </ownedParameter> |
| <ownedParameter xmi:id="_dftFEJxaEea2Crll1F5HOw" name="val"> |
| <type xmi:type="uml:PrimitiveType" href="pathmap://PapyrusC_Cpp_LIBRARIES/AnsiCLibrary.uml#_7wRIABydEduyofBvg4RL2w"/> |
| </ownedParameter> |
| </ownedOperation> |
| </packagedElement> |
| <packagedElement xmi:type="uml:Usage" xmi:id="_FSnLwJxWEea2Crll1F5HOw" client="_FSWtEJxWEea2Crll1F5HOw" supplier="_FSkvgJxWEea2Crll1F5HOw"/> |
| <packagedElement xmi:type="uml:AnyReceiveEvent" xmi:id="_FSny0JxWEea2Crll1F5HOw" name="*"/> |
| <packagedElement xmi:type="uml:Interface" xmi:id="_FSoZ4JxWEea2Crll1F5HOw" name="HWIFIO"/> |
| <packagedElement xmi:type="uml:Usage" xmi:id="_FSrdMJxWEea2Crll1F5HOw" client="_FSWtEJxWEea2Crll1F5HOw" supplier="_FSoZ4JxWEea2Crll1F5HOw"/> |
| <packagedElement xmi:type="uml:CallEvent" xmi:id="_Vsj1sJxWEea2Crll1F5HOw" operation="_SVCgQJxWEea2Crll1F5HOw"/> |
| <packagedElement xmi:type="uml:CallEvent" xmi:id="_m4iZgJxWEea2Crll1F5HOw" operation="_k0HqsJxWEea2Crll1F5HOw"/> |
| </packagedElement> |
| <packagedElement xmi:type="uml:Artifact" xmi:id="_qUb4oJxWEea2Crll1F5HOw" name="CustomAPIWrapper" fileName="CustomAPIWrapper"/> |
| <packagedElement xmi:type="uml:Dependency" xmi:id="_bhlS4JxXEea2Crll1F5HOw" client="_9XIi8JxVEea2Crll1F5HOw" supplier="_qUb4oJxWEea2Crll1F5HOw"/> |
| <profileApplication xmi:id="_qhzbsJxVEea2Crll1F5HOw"> |
| <eAnnotations xmi:id="_qh1Q4JxVEea2Crll1F5HOw" source="http://www.eclipse.org/uml2/2.0.0/UML"> |
| <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/umlrt#/"/> |
| </eAnnotations> |
| <appliedProfile href="pathmap://UML_RT_PROFILE/uml-rt.profile.uml#_1h74oEeVEeO0lv5O1DTHOQ"/> |
| </profileApplication> |
| <profileApplication xmi:id="_szsl0JxVEea2Crll1F5HOw"> |
| <eAnnotations xmi:id="_szsl0ZxVEea2Crll1F5HOw" source="http://www.eclipse.org/uml2/2.0.0/UML"> |
| <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/umlrt/cppproperties#/"/> |
| </eAnnotations> |
| <appliedProfile href="pathmap://UMLRT_CPP/RTCppProperties.profile.uml#_vl5LALs8EeSTjNEQkASznQ"/> |
| </profileApplication> |
| <profileApplication xmi:id="_uMMCwJxVEea2Crll1F5HOw"> |
| <eAnnotations xmi:id="_uMMp0JxVEea2Crll1F5HOw" source="http://www.eclipse.org/uml2/2.0.0/UML"> |
| <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/papyrus/umlrt/statemachine#/"/> |
| </eAnnotations> |
| <appliedProfile href="pathmap://UML_RT_PROFILE/UMLRealTimeSM-addendum.profile.uml#_KLcn0FDtEeOA4ecmvfqvaw"/> |
| </profileApplication> |
| </uml:Model> |
| <UMLRealTime:Capsule xmi:id="_ynB2YJxVEea2Crll1F5HOw" base_Class="_ylmTAJxVEea2Crll1F5HOw"/> |
| <UMLRealTime:CapsulePart xmi:id="_4U-QoJxVEea2Crll1F5HOw" base_Property="_4UxcUJxVEea2Crll1F5HOw"/> |
| <UMLRealTime:Capsule xmi:id="_4rZzoJxVEea2Crll1F5HOw" base_Class="_4q8goJxVEea2Crll1F5HOw"/> |
| <UMLRealTime:CapsulePart xmi:id="_9IfqAJxVEea2Crll1F5HOw" base_Property="_9IaxgJxVEea2Crll1F5HOw"/> |
| <UMLRealTime:Capsule xmi:id="_9XmdAJxVEea2Crll1F5HOw" base_Class="_9XIi8JxVEea2Crll1F5HOw"/> |
| <UMLRealTime:ProtocolContainer xmi:id="_FSczsJxWEea2Crll1F5HOw" base_Package="_FSaXcJxWEea2Crll1F5HOw"/> |
| <UMLRealTime:RTMessageSet xmi:id="_FShsMJxWEea2Crll1F5HOw" base_Interface="_FSfP8JxWEea2Crll1F5HOw"/> |
| <UMLRealTime:RTMessageSet xmi:id="_FSmksJxWEea2Crll1F5HOw" base_Interface="_FSkvgJxWEea2Crll1F5HOw" rtMsgKind="out"/> |
| <UMLRealTime:RTMessageSet xmi:id="_FSqPEJxWEea2Crll1F5HOw" base_Interface="_FSoZ4JxWEea2Crll1F5HOw" rtMsgKind="inOut"/> |
| <UMLRealTime:Protocol xmi:id="_FSsEQJxWEea2Crll1F5HOw" base_Collaboration="_FSWtEJxWEea2Crll1F5HOw"/> |
| <RTCppProperties:ArtifactProperties xmi:id="_vJ5ywJxWEea2Crll1F5HOw" base_Artifact="_qUb4oJxWEea2Crll1F5HOw" includeFile="void set_pin_value(int pin, int val);
int get_pin_value(int pin);

" sourceFile="//#include "some_library.hh"
#include <iostream>

using namespace std;

void set_pin_value(int pin, int val)
{
 cout << "[set_pin_value] calling external API with pin = " << pin << " and val = " << val << endl;
// ...
}

int get_pin_value(int pin)
{
 int result = 42;
 cout << "[get_pin_value] calling external API with pin = " << pin << endl;
// ...
 return result;
}



"/> |
| <UMLRealTime:RTPort xmi:id="_gDFIIJxXEea2Crll1F5HOw" base_Port="_gDBdwJxXEea2Crll1F5HOw"/> |
| <UMLRealTime:RTPort xmi:id="_jB8tAJxXEea2Crll1F5HOw" base_Port="_jB630JxXEea2Crll1F5HOw"/> |
| <UMLRTStateMachines:RTPseudostate xmi:id="_m0ntYJxXEea2Crll1F5HOw" base_Pseudostate="_m0kDAJxXEea2Crll1F5HOw"/> |
| <UMLRTStateMachines:RTState xmi:id="_m0rXwJxXEea2Crll1F5HOw" base_State="_m0o7gJxXEea2Crll1F5HOw"/> |
| <UMLRTStateMachines:RTRegion xmi:id="_m0t0AJxXEea2Crll1F5HOw" base_Region="_m0g_sJxXEea2Crll1F5HOw"/> |
| <UMLRTStateMachines:RTStateMachine xmi:id="_m1M8MJxXEea2Crll1F5HOw" base_StateMachine="_m0cHMJxXEea2Crll1F5HOw"/> |
| <UMLRealTime:RTPort xmi:id="_yuQ04JxXEea2Crll1F5HOw" isWired="false" base_Port="_yuNxkJxXEea2Crll1F5HOw"/> |
| <UMLRealTime:RTPort xmi:id="_1LsgoJxXEea2Crll1F5HOw" isWired="false" base_Port="_1LpdUJxXEea2Crll1F5HOw"/> |
| <UMLRTStateMachines:RTState xmi:id="_VYbt4JxYEea2Crll1F5HOw" base_State="_VYZRoJxYEea2Crll1F5HOw"/> |
| <UMLRTStateMachines:RTState xmi:id="_ql2t4JxYEea2Crll1F5HOw" base_State="_ql1fwJxYEea2Crll1F5HOw"/> |
| <UMLRTStateMachines:RTPseudostate xmi:id="_UHspUJxZEea2Crll1F5HOw" base_Pseudostate="_UHrbMJxZEea2Crll1F5HOw"/> |
| <UMLRTStateMachines:RTState xmi:id="_UHuegJxZEea2Crll1F5HOw" base_State="_UHtQYJxZEea2Crll1F5HOw"/> |
| <UMLRTStateMachines:RTRegion xmi:id="_UHvsoJxZEea2Crll1F5HOw" base_Region="_UHqNEJxZEea2Crll1F5HOw"/> |
| <UMLRTStateMachines:RTStateMachine xmi:id="_UIKjYJxZEea2Crll1F5HOw" base_StateMachine="_UHnJwJxZEea2Crll1F5HOw"/> |
| <UMLRealTime:RTPort xmi:id="_xr0OgJxZEea2Crll1F5HOw" isWired="false" base_Port="_xrvWAJxZEea2Crll1F5HOw"/> |
| <UMLRealTime:RTConnector xmi:id="_gP8GIpxcEea2Crll1F5HOw" base_Connector="_gP5C0JxcEea2Crll1F5HOw"/> |
| </xmi:XMI> |