blob: 1b5e874f594307ae55f7eb54a2badd3e4ffd7166 [file] [log] [blame]
<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd-->
<html xmlns="http://www.w3.org/1999/xhtml"
>
<head><title>Tutorial Ping Pong (Java and C)</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="generator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)" />
<meta name="originator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)" />
<!-- xhtml,3,next,html -->
<meta name="src" content="etrice-doc.tex" />
<meta name="date" content="2015-08-27 23:56:00" />
<link rel="stylesheet" type="text/css" href="etrice-doc.css" />
</head><body
>
<!--l. 1--><div class="crosslinks"><p class="noindent">[<a
href="etrice-docse7.html" >next</a>] [<a
href="etrice-docse5.html" >prev</a>] [<a
href="etrice-docse5.html#tailetrice-docse5.html" >prev-tail</a>] [<a
href="#tailetrice-docse6.html">tail</a>] [<a
href="etrice-docch2.html#etrice-docse6.html" >up</a>] </p></div>
<h3 class="sectionHead"><span class="titlemark">2.4 </span> <a
id="x10-320004"></a>Tutorial Ping Pong (Java and C)</h3>
<a
id="x10-32001r47"></a>
<h4 class="subsectionHead"><span class="titlemark">2.4.1 </span> <a
id="x10-330001"></a>Scope</h4>
<!--l. 6--><p class="noindent" >This tutorial describes how to create a simple hierarchical actor system of actors communicating via ports and bindings.
Additionally you will use the Timing Service from the eTrice model library. This tutorial can be done for the target languages
Java or C. For the Ping Pong scenario we want to create a model with a sender and a reveiver of a message.
The receiver has to wait for the ping message from the sender, wait for a second and respond with a pong
message.
</p><!--l. 11--><p class="noindent" >The resulting Message Sequence Chart (MSC) at the end of this tutorial should look like this:
</p><!--l. 13--><p class="noindent" ><img
src="images/015-msc.png" alt="PIC"
/>
</p><!--l. 15--><p class="noindent" >We will take this MSC as specification for the desired behavior.
<a
id="x10-33001r49"></a>
</p>
<h4 class="subsectionHead"><span class="titlemark">2.4.2 </span> <a
id="x10-340002"></a>Create the structure</h4>
<!--l. 19--><p class="noindent" >We start by opening the <span
class="ec-lmsso-10">TemplateModel.room </span>from the template project as presented in Getting Started. As described
previously <span
class="ec-lmsso-10">topActor </span>is currently the only active actor. Furthermore the model provides a building kit for this tutorial,
consisting of </p>
<ul class="itemize1">
<li class="itemize">ProtocolClass <span
class="ec-lmsso-10">PingPongProtocol</span>: Defining the incoming message <span
class="ec-lmsso-10">ping </span>and outgoing <span
class="ec-lmsso-10">pong </span>according the
specification
</li>
<li class="itemize">ActorClass <span
class="ec-lmsso-10">Receiver</span>: Defining a (regular) Port of type PingPongProtocol, which receives the incoming messages
and sends the outgoing message. Additionally it has a reference to the <span
class="ec-lmsso-10">TimingService</span>.
</li>
<li class="itemize">ActorClass <span
class="ec-lmsso-10">Sender</span>: Defining the <span
class="ec-lmssbx-10">conjugated </span>Port of type PingPongProtocol, which handles the messages
vice-versa</li></ul>
<div class="tabular"> <table id="TBL-4" class="tabular"
cellspacing="0" cellpadding="0" rules="groups"
><colgroup id="TBL-4-1g"><col
id="TBL-4-1" /></colgroup><colgroup id="TBL-4-2g"><col
id="TBL-4-2" /></colgroup><colgroup id="TBL-4-3g"><col
id="TBL-4-3" /></colgroup><tr
style="vertical-align:baseline;" id="TBL-4-1-"><td style="white-space:nowrap; text-align:center;" id="TBL-4-1-1"
class="td11"> <!--l. 27--> <!--l. 27--><p class="noindent" ><div class="lstlisting" id="listing-1"><span class="label"><a
id="x10-34001r1"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">ProtocolClass</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">PingPongProtocol</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x10-34002r2"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">incoming</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x10-34003r3"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">Message</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">ping</span><span
class="ec-lmtt-9">()</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x10-34004r4"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x10-34005r5"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">outgoing</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x10-34006r6"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">Message</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">pong</span><span
class="ec-lmtt-9">()</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x10-34007r7"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x10-34008r8"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span> </p> </div> </td><td style="white-space:nowrap; text-align:center;" id="TBL-4-1-2"
class="td11"> <!--l. 37--> <!--l. 37--><p class="noindent" ><div class="lstlisting" id="listing-2"><span class="label"><a
id="x10-34009r1"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">ActorClass</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">Receiver</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x10-34010r2"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">Interface</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x10-34011r3"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">Port</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">recvPort</span><span
class="ec-lmtt-9">:</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">PingPongProtocol</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x10-34012r4"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x10-34013r5"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">Structure</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x10-34014r6"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">external</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">Port</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">recvPort</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x10-34015r7"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">SAP</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">timingService</span><span
class="ec-lmtt-9">:</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">PTimer</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x10-34016r8"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x10-34017r9"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">//</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">...</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x10-34018r10"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span> </p> </div> </td><td style="white-space:nowrap; text-align:center;" id="TBL-4-1-3"
class="td11"> <!--l. 49--> <!--l. 49--><p class="noindent" ><div class="lstlisting" id="listing-3"><span class="label"><a
id="x10-34019r1"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">ActorClass</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">Sender</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x10-34020r2"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">Interface</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x10-34021r3"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">conjugated</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">Port</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">sendPort</span><span
class="ec-lmtt-9">:</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x10-34022r4"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">PingPongProtocol</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x10-34023r5"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x10-34024r6"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">Structure</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">{</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x10-34025r7"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">external</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmssbx-10x-x-90">Port</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">sendPort</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x10-34026r8"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x10-34027r9"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">//</span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">...</span><span
class="ec-lmtt-9">&#x00A0;</span><br /><span class="label"><a
id="x10-34028r10"></a></span><span
class="ec-lmtt-9">&#x00A0;</span><span
class="ec-lmtt-9">}</span> </p> </div> </td>
</tr></table></div>
<!--l. 64--><p class="noindent" >Note: The naming <span
class="ec-lmsso-10">Sender Receiver </span>is based on the first message exchange. <span
class="ec-lmsso-10">Sender </span>is the first actor supposed to send a
message (<span
class="ec-lmsso-10">ping</span>) and <span
class="ec-lmsso-10">Receiver </span>is the first actor to receive this message. Afterwards they change their roles and it is vice-versa
for message <span
class="ec-lmsso-10">pong</span>.
</p><!--l. 66--><p class="noindent" >Remaining tasks: </p>
<ul class="itemize1">
<li class="itemize">creating actor hierarchic actor structure by using classes <span
class="ec-lmsso-10">Sender Receiver</span>
</li>
<li class="itemize">establish port binding
</li>
<li class="itemize">define the behavior of both actors
</li>
<li class="itemize">use the <span
class="ec-lmsso-10">TimingService</span>
</li>
<li class="itemize">generate and run application, then verify resulting MSC</li></ul>
<!--l. 75--><p class="noindent" >We are going to create hierarchic actor structure and <span
class="ec-lmsso-10">TopActor </span>will functions as a pure container actor. Thus its current state
machine is obsolete, we can ignore or delete it.
</p><!--l. 77--><p class="noindent" >We continue to add the actors graphically and open the structure diagram of <span
class="ec-lmsso-10">TopActor </span>by right-click in the Outline View on
<span
class="ec-lmsso-10">TopActor -&#x003E; Edit Structure</span>.
</p><!--l. 79--><p class="noindent" ><img
src="images/015-edit-structure-top.png" alt="PIC"
/>
</p><!--l. 81--><p class="noindent" >Drag and Drop an <span
class="ec-lmsso-10">ActorRef </span>from the <span
class="ec-lmsso-10">Palette </span>within the borders and name the new actor reference <span
class="ec-lmsso-10">sender </span>and set the type
to ActorClass <span
class="ec-lmsso-10">Sender</span>. Repeat the step for the <span
class="ec-lmsso-10">receiver</span>.
</p><!--l. 83--><p class="noindent" ><img
src="images/015-add-sender.png" alt="PIC"
/>
</p><!--l. 85--><p class="noindent" >Finally we connect the ports of both actors using the <span
class="ec-lmsso-10">Binding </span>tool in the <span
class="ec-lmsso-10">Palette</span>. Drag a connection between the two port to
establish a Binding.
</p><!--l. 87--><p class="noindent" ><img
src="images/015-add-binding.png" alt="PIC"
/>
<a
id="x10-34029r50"></a>
</p>
<h4 class="subsectionHead"><span class="titlemark">2.4.3 </span> <a
id="x10-350003"></a>Implement the Behavior</h4>
<!--l. 91--><p class="noindent" >We will implement two finite state machines (<span
class="ec-lmsso-10">FSM</span>s) to define the event driven behavior of the actors <span
class="ec-lmsso-10">Sender </span>and
<span
class="ec-lmsso-10">Receiver</span>.
</p><!--l. 93--><p class="noindent" >Before you start with the implementation, have a look at the MSC with the specification of the behavior.
</p><!--l. 95--><p class="noindent" >Lets start with the <span
class="ec-lmsso-10">Sender</span>. Right click to <span
class="ec-lmsso-10">sender Open Ref Behavior </span>and in the structure diagram of <span
class="ec-lmsso-10">TopActor</span>.
</p><!--l. 97--><p class="noindent" ><img
src="images/015-open-behavior-sender.png" alt="PIC"
/>
</p><!--l. 99--><p class="noindent" >According to our specification:
</p><div class="quote">
<!--l. 101--><p class="noindent" ><span
class="ec-lmsso-10">Sender </span>initially should send the message <span
class="ec-lmsso-10">ping </span>and then take a state named <span
class="ec-lmsso-10">sendingPing</span>. After receiving
the message <span
class="ec-lmsso-10">pong </span>it should remain in a state named <span
class="ec-lmsso-10">receivedPong</span>.</p></div>
<!--l. 104--><p class="noindent" >Drag and Drop the <span
class="ec-lmsso-10">Initial Point </span>and a <span
class="ec-lmsso-10">State </span>into the diagram. The latter causes the opening of the dialog <span
class="ec-lmsso-10">Edit State</span>, in
which we type the name <span
class="ec-lmsso-10">sendingPing </span>and specify the entry code <span class="obeylines-h"><span class="verb"><span
class="ec-lmtt-10">senderPort.ping();</span></span></span>. Note the content assist is activated
by pressing CTRL+Space.
</p><!--l. 106--><p class="noindent" ><img
src="images/015-edit-sending.png" alt="PIC"
/>
</p><!--l. 108--><p class="noindent" >In the same manner we create a second <span
class="ec-lmsso-10">State </span>named <span
class="ec-lmsso-10">receivedPong </span>but without any action.
</p><!--l. 110--><p class="noindent" >Use the <span
class="ec-lmsso-10">Transition </span>tool to draw the initial transition to <span
class="ec-lmsso-10">sendingPing</span>. The dialog <span
class="ec-lmsso-10">Edit Transition </span>will open and we just click
<span
class="ec-lmsso-10">OK </span>as no action is required. Note that initial transitions do not have any trigger events.
</p><!--l. 112--><p class="noindent" >Again draw a transition from <span
class="ec-lmsso-10">sendingPing </span>to <span
class="ec-lmsso-10">receivedPong</span>. In the dialog for this transition we set the trigger event to
message <span
class="ec-lmsso-10">pong </span>of port <span
class="ec-lmsso-10">sendPort </span>in the top right corner.
</p><!--l. 114--><p class="noindent" ><img
src="images/015-edit-transition-pinger.png" alt="PIC"
/>
</p><!--l. 116--><p class="noindent" >At this point the behavior of <span
class="ec-lmsso-10">Sender </span>is complete and should look like this:
</p><!--l. 118--><p class="noindent" ><img
src="images/015-sending-ping-fsm.png" alt="PIC"
/>
</p><!--l. 121--><p class="noindent" >We turn our attention to actor <span
class="ec-lmsso-10">Receiver </span>and open its state machine diagram.
</p><!--l. 123--><p class="noindent" >According to the specification:
</p><div class="quote">
<!--l. 126--><p class="noindent" ><span
class="ec-lmsso-10">Receiver </span>initially should wait for the message <span
class="ec-lmsso-10">ping</span>. After a short time the message <span
class="ec-lmsso-10">pong </span>should be sent
back.</p></div>
<!--l. 129--><p class="noindent" >We create the states <span
class="ec-lmsso-10">waitingForPing</span>, <span
class="ec-lmsso-10">receivedPing </span>and <span
class="ec-lmsso-10">sendingPong </span>plus the initial transition.
</p><!--l. 131--><p class="noindent" >We draw a transition from <span
class="ec-lmsso-10">waitingForPing </span>to <span
class="ec-lmsso-10">receivedPing </span>and select as trigger event the message <span
class="ec-lmsso-10">ping </span>of port
<span
class="ec-lmsso-10">recvPort</span>.
</p><!--l. 133--><p class="noindent" ><img
src="images/015-transition-ping.png" alt="PIC"
/>
</p><!--l. 135--><p class="noindent" >In the entry code of the state <span
class="ec-lmsso-10">receivedPing </span>we start the timeout by sending the message <span
class="ec-lmsso-10">startTimeout(500) </span>(time unit is ms)
to the <span
class="ec-lmsso-10">timingService </span>port:
</p><div class="quote">
<!--l. 137--><p class="noindent" ><span class="obeylines-h"><span class="verb"><span
class="ec-lmtt-10">timingService.startTimeout(500);</span></span></span></p></div>
<!--l. 140--><p class="noindent" >We draw a transition from <span
class="ec-lmsso-10">receivedPing </span>to <span
class="ec-lmsso-10">sentPong</span>. The event trigger is the respond <span
class="ec-lmsso-10">timeout </span>of the timing
service.
</p><!--l. 142--><p class="noindent" ><img
src="images/015-transition-timeout.png" alt="PIC"
/>
</p><!--l. 144--><p class="noindent" >In the entry code of the state <span
class="ec-lmsso-10">sentPong </span>we send the message <span
class="ec-lmsso-10">pong </span>back to the <span
class="ec-lmsso-10">Sender</span>: <span class="obeylines-h"><span class="verb"><span
class="ec-lmtt-10">recvPort.pong();</span></span></span>
</p><!--l. 146--><p class="noindent" >Now the behavior of <span
class="ec-lmsso-10">Receiver </span>is complete, too. It should look like this:
</p><!--l. 148--><p class="noindent" ><img
src="images/015-sending-pong-fsm.png" alt="PIC"
/>
</p><!--l. 150--><p class="noindent" >The PingPong model is done now. You can generate, compile and run it as described in <span
class="ec-lmsso-10">Hello World for C </span>or <span
class="ec-lmsso-10">Hello World for</span>
<span
class="ec-lmsso-10">Java</span>. The generated MSC in folder <span
class="ec-lmsso-10">log </span>should show the same MSC we used to specify the behavior at the beginning of this
tutorial.
</p><!--l. 152--><p class="noindent" ><img
src="images/015-msc.png" alt="PIC"
/>
<a
id="x10-35001r51"></a>
</p>
<h4 class="subsectionHead"><span class="titlemark">2.4.4 </span> <a
id="x10-360004"></a>Summary</h4>
<!--l. 156--><p class="noindent" >Within this tutorial you have learned how to create a FSM with transitions triggered by incoming messages. You
have used entry code to send messages and have used the timing service from the model library. You are
now familiar with the basic features of eTrice. Further tutorials and examples will take this knowledge as a
precondition.
</p>
<!--l. 1--><div class="crosslinks"><p class="noindent">[<a
href="etrice-docse7.html" >next</a>] [<a
href="etrice-docse5.html" >prev</a>] [<a
href="etrice-docse5.html#tailetrice-docse5.html" >prev-tail</a>] [<a
href="etrice-docse6.html" >front</a>] [<a
href="etrice-docch2.html#etrice-docse6.html" >up</a>] </p></div>
<!--l. 1--><p class="noindent" ><a
id="tailetrice-docse6.html"></a></p>
</body></html>