Revision 6ebd2388

View differences:

Makefile
1
################################################################################
2
# µRtWare is a lightweight publish/subscribe middleware for real-time          #
3
# applications. It was developed as part of the software habitat for the       #
4
# Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as      #
5
# well.                                                                        #
6
# Copyright (C) 2018..2018  Thomas Schöpping et al.                            #
7
#                                                                              #
8
# This program is free software: you can redistribute it and/or modify         #
9
# it under the terms of the GNU General Public License as published by         #
10
# the Free Software Foundation, either version 3 of the License, or            #
11
# (at your option) any later version.                                          #
12
#                                                                              #
13
# This program is distributed in the hope that it will be useful,              #
14
# but WITHOUT ANY WARRANTY; without even the implied warranty of               #
15
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                #
16
# GNU General Public License for more details.                                 #
17
#                                                                              #
18
# You should have received a copy of the GNU General Public License            #
19
# along with this program.  If not, see <http://www.gnu.org/licenses/>.        #
20
#                                                                              #
21
# This research/work was supported by the Cluster of Excellence Cognitive      #
22
# Interaction Technology 'CITEC' (EXC 277) at Bielefeld University, which is   #
23
# funded by the German Research Foundation (DFG).                              #
24
################################################################################
25

  
26

  
27

  
28
# absolute path to this directory
29
URTWARE_DIR := $(dir $(lastword $(MAKEFILE_LIST)))
30

  
31
# include paths
32
URTWARE_INC = $(URTWARE_DIR:/=) \
33
              $(URTWARE_DIR)inc
34

  
35
URTWARE_SRCDIR = $(URTWARE_DIR)src
36

  
37
# C sources
38
URTWARE_CSRC =
39

  
40
# C++ sources
41
URTWARE_CPPSRC =
42

  
doc/classdiagrams/overview.svg
1
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="1800px" preserveAspectRatio="none" style="width:8149px;height:1800px;" version="1.1" viewBox="0 0 8149 1800" width="8149px" zoomAndPan="magnify"><defs><filter height="300%" id="fx5q9amszycal" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="89" x="4002.5" y="16.708">µRtWare</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="87" x="4003.5" y="37.6611">Overview</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="4050" y="58.6143"/><!--cluster primitives--><polygon fill="#FFFFFF" filter="url(#fx5q9amszycal)" points="318.921,1463.8594,401.921,1463.8594,408.921,1486.1563,796.921,1486.1563,796.921,1656.8594,318.921,1656.8594,318.921,1463.8594" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="318.921" x2="408.921" y1="1486.1563" y2="1486.1563"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="77" x="322.921" y="1478.8545">primitives</text><!--cluster interfaces--><polygon fill="#FFFFFF" filter="url(#fx5q9amszycal)" points="3543.92,899.8594,3629.92,899.8594,3636.92,922.1563,7980.92,922.1563,7980.92,1788.8594,3543.92,1788.8594,3543.92,899.8594" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="3543.92" x2="3636.92" y1="922.1563" y2="922.1563"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="80" x="3547.92" y="914.8545">interfaces</text><!--cluster condition variable--><polygon fill="#FFFFFF" filter="url(#fx5q9amszycal)" points="4353.92,1123.8594,4499.92,1123.8594,4506.92,1146.1563,5057.92,1146.1563,5057.92,1628.8594,4353.92,1628.8594,4353.92,1123.8594" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="4353.92" x2="4506.92" y1="1146.1563" y2="1146.1563"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="140" x="4357.92" y="1138.8545">condition variable</text><!--cluster timer--><polygon fill="#FFFFFF" filter="url(#fx5q9amszycal)" points="3567.92,1123.8594,3614.92,1123.8594,3621.92,1146.1563,4329.92,1146.1563,4329.92,1616.3594,3567.92,1616.3594,3567.92,1123.8594" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="3567.92" x2="3621.92" y1="1146.1563" y2="1146.1563"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="41" x="3571.92" y="1138.8545">timer</text><!--cluster thread--><polygon fill="#FFFFFF" filter="url(#fx5q9amszycal)" points="5081.92,942.8594,5139.92,942.8594,5146.92,965.1563,5827.92,965.1563,5827.92,1622.8594,5081.92,1622.8594,5081.92,942.8594" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="5081.92" x2="5146.92" y1="965.1563" y2="965.1563"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="52" x="5085.92" y="957.8545">thread</text><!--cluster events--><polygon fill="#FFFFFF" filter="url(#fx5q9amszycal)" points="5851.92,1130.3594,5911.92,1130.3594,5918.92,1152.6563,7352.92,1152.6563,7352.92,1764.8594,5851.92,1764.8594,5851.92,1130.3594" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="5851.92" x2="5918.92" y1="1152.6563" y2="1152.6563"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="54" x="5855.92" y="1145.3545">events</text><!--cluster middleware--><polygon fill="#FFFFFF" filter="url(#fx5q9amszycal)" points="717.921,86.8594,815.921,86.8594,822.921,109.1563,3519.92,109.1563,3519.92,1304.3594,717.921,1304.3594,717.921,86.8594" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="717.921" x2="822.921" y1="109.1563" y2="109.1563"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="92" x="721.921" y="101.8545">middleware</text><!--cluster real-time class--><polygon fill="#FFFFFF" filter="url(#fx5q9amszycal)" points="741.921,469.3594,862.921,469.3594,869.921,491.6563,1726.92,491.6563,1726.92,1280.3594,741.921,1280.3594,741.921,469.3594" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="741.921" x2="869.921" y1="491.6563" y2="491.6563"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="115" x="745.921" y="484.3545">real-time class</text><!--cluster node--><polygon fill="#FFFFFF" filter="url(#fx5q9amszycal)" points="2366.92,734.8594,2412.92,734.8594,2419.92,757.1563,3427.92,757.1563,3427.92,846.8594,2366.92,846.8594,2366.92,734.8594" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="2366.92" x2="2419.92" y1="757.1563" y2="757.1563"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="40" x="2370.92" y="749.8545">node</text><!--class urt_delay_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="99.2188" id="urt_delay_t" style="stroke: #A80036; stroke-width: 1.5;" width="100" x="680.921" y="1520.3594"/><ellipse cx="695.921" cy="1536.3594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M696.7648,1543.1094 L694.3116,1543.1094 L694.3116,1532.8594 L691.171,1532.8594 L691.171,1530.7188 L699.9054,1530.7188 L699.9054,1532.8594 L696.7648,1532.8594 L696.7648,1543.1094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="68" x="709.921" y="1540.5137">urt_delay_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="681.921" x2="779.921" y1="1552.3594" y2="1552.3594"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="45" x="686.921" y="1583.3745">uint32_t</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="681.921" x2="714.421" y1="1566.7617" y2="1566.7617"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="33" x="714.421" y="1570.0698">either</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="747.421" x2="779.921" y1="1566.7617" y2="1566.7617"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="45" x="686.921" y="1612.9839">uint64_t</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="681.921" x2="724.921" y1="1596.3711" y2="1596.3711"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="12" x="724.921" y="1599.6792">or</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="736.921" x2="779.921" y1="1596.3711" y2="1596.3711"/><!--class urt_status_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="86.4141" id="urt_status_t" style="stroke: #A80036; stroke-width: 1.5;" width="166" x="479.921" y="1526.8594"/><ellipse cx="521.471" cy="1542.8594" fill="#EB937F" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M525.5804,1548.8594 L517.8616,1548.8594 L517.8616,1536.4688 L525.5804,1536.4688 L525.5804,1538.625 L520.3148,1538.625 L520.3148,1541.2969 L525.0804,1541.2969 L525.0804,1543.4531 L520.3148,1543.4531 L520.3148,1546.7031 L525.5804,1546.7031 L525.5804,1548.8594 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="75" x="541.371" y="1547.0137">urt_status_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="480.921" x2="644.921" y1="1558.8594" y2="1558.8594"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="119" x="485.921" y="1573.0698">URT_STATUS_OK = 0</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="154" x="485.921" y="1585.8745">URT_STATUS_WARNING = 1</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="144" x="485.921" y="1598.6792">URT_STATUS_ERROR = -1</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="480.921" x2="644.921" y1="1605.2734" y2="1605.2734"/><!--class urt_topicid_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="141.6328" id="urt_topicid_t" style="stroke: #A80036; stroke-width: 1.5;" width="109" x="335.421" y="1498.8594"/><ellipse cx="350.421" cy="1514.8594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M351.2648,1521.6094 L348.8116,1521.6094 L348.8116,1511.3594 L345.671,1511.3594 L345.671,1509.2188 L354.4054,1509.2188 L354.4054,1511.3594 L351.2648,1511.3594 L351.2648,1521.6094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="77" x="364.421" y="1519.0137">urt_topicid_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="336.421" x2="443.421" y1="1530.8594" y2="1530.8594"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="34" x="341.421" y="1545.0698">uin8_t</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="45" x="341.421" y="1574.6792">uint16_t</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="336.421" x2="383.921" y1="1558.0664" y2="1558.0664"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="12" x="383.921" y="1561.3745">or</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="395.921" x2="443.421" y1="1558.0664" y2="1558.0664"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="45" x="341.421" y="1604.2886">uint32_t</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="336.421" x2="383.921" y1="1587.6758" y2="1587.6758"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="12" x="383.921" y="1590.9839">or</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="395.921" x2="443.421" y1="1587.6758" y2="1587.6758"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="45" x="341.421" y="1633.8979">uint64_t</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="336.421" x2="383.921" y1="1617.2852" y2="1617.2852"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="12" x="383.921" y="1620.5933">or</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="395.921" x2="443.421" y1="1617.2852" y2="1617.2852"/><!--class urt_osTime_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="73.6094" id="urt_osTime_t" style="stroke: #A80036; stroke-width: 1.5;" width="257" x="7707.42" y="1532.8594"/><ellipse cx="7792.17" cy="1548.8594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M7793.0138,1555.6094 L7790.5606,1555.6094 L7790.5606,1545.3594 L7787.42,1545.3594 L7787.42,1543.2188 L7796.1544,1543.2188 L7796.1544,1545.3594 L7793.0138,1545.3594 L7793.0138,1555.6094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="79" x="7812.67" y="1553.0137">urt_osTime_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7708.42" x2="7963.42" y1="1564.8594" y2="1564.8594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7708.42" x2="7963.42" y1="1572.8594" y2="1572.8594"/><ellipse cx="7718.42" cy="1584.7617" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="231" x="7727.42" y="1587.0698">urtTime2Us (t : urt_osTime_t*) : uint64_t</text><ellipse cx="7718.42" cy="1597.5664" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="189" x="7727.42" y="1599.8745">urtTimeNow (void) : urt_osTime_t</text><!--class urt_osMutex_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="99.2188" id="urt_osMutex_t" style="stroke: #A80036; stroke-width: 1.5;" width="300" x="7371.92" y="1520.3594"/><ellipse cx="7474.17" cy="1536.3594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M7475.0138,1543.1094 L7472.5606,1543.1094 L7472.5606,1532.8594 L7469.42,1532.8594 L7469.42,1530.7188 L7478.1544,1530.7188 L7478.1544,1532.8594 L7475.0138,1532.8594 L7475.0138,1543.1094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="87" x="7494.67" y="1540.5137">urt_osMutex_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7372.92" x2="7670.92" y1="1552.3594" y2="1552.3594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7372.92" x2="7670.92" y1="1560.3594" y2="1560.3594"/><ellipse cx="7382.92" cy="1572.2617" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="247" x="7391.92" y="1574.5698">urtMutexInit (mutex : urt_osmutex_t*) : void</text><ellipse cx="7382.92" cy="1585.0664" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="255" x="7391.92" y="1587.3745">urtMutexLock (mutex : urt_osmutex_t*) : void</text><ellipse cx="7382.92" cy="1597.8711" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="274" x="7391.92" y="1600.1792">urtMutexTryLock (mutex : urt_osmutex_t*) : bool</text><ellipse cx="7382.92" cy="1610.6758" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="267" x="7391.92" y="1612.9839">urtMutexUnlock (mutex : urt_osmutex_t*) : void</text><!--class urt_condvarStatus_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="86.4141" id="urt_condvarStatus_t" style="stroke: #A80036; stroke-width: 1.5;" width="258" x="4576.92" y="1526.8594"/><ellipse cx="4638.67" cy="1542.8594" fill="#EB937F" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M4642.7794,1548.8594 L4635.0606,1548.8594 L4635.0606,1536.4688 L4642.7794,1536.4688 L4642.7794,1538.625 L4637.5138,1538.625 L4637.5138,1541.2969 L4642.2794,1541.2969 L4642.2794,1543.4531 L4637.5138,1543.4531 L4637.5138,1546.7031 L4642.7794,1546.7031 L4642.7794,1548.8594 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="126" x="4659.17" y="1547.0137">urt_condvarStatus_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="4577.92" x2="4833.92" y1="1558.8594" y2="1558.8594"/><ellipse cx="4587.92" cy="1570.7617" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="204" x="4596.92" y="1573.0698">URT_CONDVAR_STATUS_SIGNAL = 0</text><ellipse cx="4587.92" cy="1583.5664" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="232" x="4596.92" y="1585.8745">URT_CONDVAR_STATUS_BROADCAST = 1</text><ellipse cx="4587.92" cy="1596.3711" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="213" x="4596.92" y="1598.6792">URT_CONDVAR_STATUS_TIMEOUT = 2</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="4577.92" x2="4833.92" y1="1605.2734" y2="1605.2734"/><!--class urt_osCondvar_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="99.2188" id="urt_osCondvar_t" style="stroke: #A80036; stroke-width: 1.5;" width="671" x="4370.42" y="1158.8594"/><ellipse cx="4651.17" cy="1174.8594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M4652.0138,1181.6094 L4649.5606,1181.6094 L4649.5606,1171.3594 L4646.42,1171.3594 L4646.42,1169.2188 L4655.1544,1169.2188 L4655.1544,1171.3594 L4652.0138,1171.3594 L4652.0138,1181.6094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="101" x="4671.67" y="1179.0137">urt_osCondvar_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="4371.42" x2="5040.42" y1="1190.8594" y2="1190.8594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="4371.42" x2="5040.42" y1="1198.8594" y2="1198.8594"/><ellipse cx="4381.42" cy="1210.7617" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="283" x="4390.42" y="1213.0698">urtCondvarInit (condvar : urt_osCondvar_t*) : void</text><ellipse cx="4381.42" cy="1223.5664" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="294" x="4390.42" y="1225.8745">urtConvarSignal (condvar : urt_osCondvar_t*) : void</text><ellipse cx="4381.42" cy="1236.3711" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="324" x="4390.42" y="1238.6792">urtCondvarBroadcast (condvar : urt_osCondvar_t*) : void</text><ellipse cx="4381.42" cy="1249.1758" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="645" x="4390.42" y="1251.4839">urtCondvarWait (condvar : urt_osCondvar_t*, mutex : urt_osMutex_t*, timeout : urt_delay_t) : urt_condvarStatus_t</text><!--class urt_osTimerCallback_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="60.8047" id="urt_osTimerCallback_t" style="stroke: #A80036; stroke-width: 1.5;" width="286" x="3694.92" y="1539.3594"/><ellipse cx="3765.67" cy="1555.3594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M3766.5138,1562.1094 L3764.0606,1562.1094 L3764.0606,1551.8594 L3760.92,1551.8594 L3760.92,1549.7188 L3769.6544,1549.7188 L3769.6544,1551.8594 L3766.5138,1551.8594 L3766.5138,1562.1094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="136" x="3786.17" y="1559.5137">urt_osTimerCallback_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="3695.92" x2="3979.92" y1="1571.3594" y2="1571.3594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="3695.92" x2="3979.92" y1="1579.3594" y2="1579.3594"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="274" x="3700.92" y="1593.5698">urt_osTimerCallback_t (parameter : void*) : void</text><!--class urt_osTimer_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="99.2188" id="urt_osTimer_t" style="stroke: #A80036; stroke-width: 1.5;" width="731" x="3583.42" y="1158.8594"/><ellipse cx="3902.67" cy="1174.8594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M3903.5138,1181.6094 L3901.0606,1181.6094 L3901.0606,1171.3594 L3897.92,1171.3594 L3897.92,1169.2188 L3906.6544,1169.2188 L3906.6544,1171.3594 L3903.5138,1171.3594 L3903.5138,1181.6094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="84" x="3923.17" y="1179.0137">urt_osTimer_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="3584.42" x2="4313.42" y1="1190.8594" y2="1190.8594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="3584.42" x2="4313.42" y1="1198.8594" y2="1198.8594"/><ellipse cx="3594.42" cy="1210.7617" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="240" x="3603.42" y="1213.0698">urtTimerInit (timer : urt_osTimer_t*) : void</text><ellipse cx="3594.42" cy="1223.5664" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="705" x="3603.42" y="1225.8745">urtTimerSet (timer : urt_osTimer_t*, delay : urt_delay_t, callback : urt_osTimerCallback_t*, parameter : void*) : urt_status_t</text><ellipse cx="3594.42" cy="1236.3711" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="300" x="3603.42" y="1238.6792">urtTimerReset (timer : urt_osTimer_t*) : urt_status_t</text><ellipse cx="3594.42" cy="1249.1758" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="254" x="3603.42" y="1251.4839">urtTimerIsArmed (timer : urt_timer_t*) : bool</text><!--class urt_osThreadPrio_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="48" id="urt_osThreadPrio_t" style="stroke: #A80036; stroke-width: 1.5;" width="150" x="5097.92" y="1545.8594"/><ellipse cx="5112.92" cy="1561.8594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M5113.7638,1568.6094 L5111.3106,1568.6094 L5111.3106,1558.3594 L5108.17,1558.3594 L5108.17,1556.2188 L5116.9044,1556.2188 L5116.9044,1558.3594 L5113.7638,1558.3594 L5113.7638,1568.6094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="5126.92" y="1566.0137">urt_osThreadPrio_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="5098.92" x2="5246.92" y1="1577.8594" y2="1577.8594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="5098.92" x2="5246.92" y1="1585.8594" y2="1585.8594"/><!--class urt_osThreadFunction_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="60.8047" id="urt_osThreadFunction_t" style="stroke: #A80036; stroke-width: 1.5;" width="252" x="5282.92" y="1539.3594"/><ellipse cx="5330.67" cy="1555.3594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M5331.5138,1562.1094 L5329.0606,1562.1094 L5329.0606,1551.8594 L5325.92,1551.8594 L5325.92,1549.7188 L5334.6544,1549.7188 L5334.6544,1551.8594 L5331.5138,1551.8594 L5331.5138,1562.1094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="148" x="5351.17" y="1559.5137">urt_osThreadFunction_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="5283.92" x2="5533.92" y1="1571.3594" y2="1571.3594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="5283.92" x2="5533.92" y1="1579.3594" y2="1579.3594"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="240" x="5288.92" y="1593.5698">urt_osThreadFunction_t (arg : void*) : void</text><!--class urt_osThreadTerminateSignal_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="73.6094" id="urt_osThreadTerminateSignal_t" style="stroke: #A80036; stroke-width: 1.5;" width="242" x="5569.92" y="1532.8594"/><ellipse cx="5591.67" cy="1548.8594" fill="#EB937F" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M5595.7794,1554.8594 L5588.0606,1554.8594 L5588.0606,1542.4688 L5595.7794,1542.4688 L5595.7794,1544.625 L5590.5138,1544.625 L5590.5138,1547.2969 L5595.2794,1547.2969 L5595.2794,1549.4531 L5590.5138,1549.4531 L5590.5138,1552.7031 L5595.7794,1552.7031 L5595.7794,1554.8594 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="195" x="5607.17" y="1553.0137">urt_osThreadTerminateSignal_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="5570.92" x2="5810.92" y1="1564.8594" y2="1564.8594"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="230" x="5575.92" y="1579.0698">URT_THREAD_TERMINATE_REQUEST = 15</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="192" x="5575.92" y="1591.8745">URT_THREAD_TERMINATE_KILL = 9</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="5570.92" x2="5810.92" y1="1598.4688" y2="1598.4688"/><!--class urt_osThread_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="460.9453" id="urt_osThread_t" style="stroke: #A80036; stroke-width: 1.5;" width="613" x="5102.42" y="977.8594"/><ellipse cx="5357.67" cy="993.8594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M5358.5138,1000.6094 L5356.0606,1000.6094 L5356.0606,990.3594 L5352.92,990.3594 L5352.92,988.2188 L5361.6544,988.2188 L5361.6544,990.3594 L5358.5138,990.3594 L5358.5138,1000.6094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="94" x="5378.17" y="998.0137">urt_osThread_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="5103.42" x2="5714.42" y1="1009.8594" y2="1009.8594"/><ellipse cx="5113.42" cy="1021.7617" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="280" x="5122.42" y="1024.0698">URT_THREAD_PRIO_LOW_MIN : urt_osThreadPrio_t</text><ellipse cx="5113.42" cy="1034.5664" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="283" x="5122.42" y="1036.8745">URT_THREAD_PRIO_LOW_MAX : urt_osThreadPrio_t</text><ellipse cx="5113.42" cy="1047.3711" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="302" x="5122.42" y="1049.6792">URT_THREAD_PRIO_NORMAL_MIN : urt_osThreadPrio_t</text><ellipse cx="5113.42" cy="1060.1758" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="305" x="5122.42" y="1062.4839">URT_THREAD_PRIO_NORMAL_MAX : urt_osThreadPrio_t</text><ellipse cx="5113.42" cy="1072.9805" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="284" x="5122.42" y="1075.2886">URT_THREAD_PRIO_HIGH_MIN : urt_osThreadPrio_t</text><ellipse cx="5113.42" cy="1085.7852" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="287" x="5122.42" y="1088.0933">URT_THREAD_PRIO_HIGH_MAX : urt_osThreadPrio_t</text><ellipse cx="5113.42" cy="1098.5898" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="270" x="5122.42" y="1100.8979">URT_THREAD_PRIO_RT_MIN : urt_osThreadPrio_t</text><ellipse cx="5113.42" cy="1111.3945" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="273" x="5122.42" y="1113.7026">URT_THREAD_PRIO_RT_MAX : urt_osThreadPrio_t</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="5103.42" x2="5714.42" y1="1120.2969" y2="1120.2969"/><ellipse cx="5113.42" cy="1132.1992" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="179" x="5122.42" y="1134.5073">URT_THREAD_MAX_SLEEP : float</text><ellipse cx="5113.42" cy="1145.0039" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="225" x="5122.42" y="1147.312">URT_THREAD_MAX_SSLEP : unsigned int</text><ellipse cx="5113.42" cy="1157.8086" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="233" x="5122.42" y="1160.1167">URT_THREAD_MAX_MSLEEP : unsigned int</text><ellipse cx="5113.42" cy="1170.6133" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="232" x="5122.42" y="1172.9214">URT_THREAD_MAX_USLEEP : unsigned int</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="5103.42" x2="5714.42" y1="1179.5156" y2="1179.5156"/><ellipse cx="5113.42" cy="1191.418" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="360" x="5122.42" y="1193.7261">URT_THREAD_WORKING_AREA (var : varname, stacksize : size_t)</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="5103.42" x2="5714.42" y1="1200.3203" y2="1200.3203"/><ellipse cx="5113.42" cy="1212.2227" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="587" x="5122.42" y="1214.5308">urtThreadInit (wa : void*, wasize : size_t, func : urt_osThreadFunction_t*, arg : void*) : urt_osThread_t*</text><ellipse cx="5113.42" cy="1225.0273" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="490" x="5122.42" y="1227.3354">urtThreadStart (thread : urt_osThread_t*, prio : urt_osThreadPrio_t, arg : void*) : void</text><ellipse cx="5113.42" cy="1237.832" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="153" x="5122.42" y="1240.1401">urtThreadYield (void) : void</text><ellipse cx="5113.42" cy="1250.6367" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="389" x="5122.42" y="1252.9448">urtThreadGetPriority (thread : urt_osThread_t*) : urt_osThreadPrio_t</text><ellipse cx="5113.42" cy="1263.4414" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="453" x="5122.42" y="1265.7495">urtThreadSetPriority (thread : urt_osThread_t*, prio : urt_osThreadPrio_t) : void</text><ellipse cx="5113.42" cy="1276.2461" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="380" x="5122.42" y="1278.5542">urtThreadGetChildren (thread : urt_osThread_t*) : urt_osThread_t*</text><ellipse cx="5113.42" cy="1289.0508" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="370" x="5122.42" y="1291.3589">urtThreadGetParent (thread : urt_osThread_t*) : urt_osThread_t*</text><ellipse cx="5113.42" cy="1301.8555" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="176" x="5122.42" y="1304.1636">urtThreadSuspend (void) : void</text><ellipse cx="5113.42" cy="1314.6602" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="319" x="5122.42" y="1316.9683">urtThreadIsSuspended (thread : urt_osThread_t*) : bool</text><ellipse cx="5113.42" cy="1327.4648" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="335" x="5122.42" y="1329.7729">urtThreadResume (thread : urt_osThread_t*) : urt_status_t</text><ellipse cx="5113.42" cy="1340.2695" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="220" x="5122.42" y="1342.5776">urtThreadSleep (seconds : float) : void</text><ellipse cx="5113.42" cy="1353.0742" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="273" x="5122.42" y="1355.3823">urtThreadSSleep (seconds : usnigned int) : void</text><ellipse cx="5113.42" cy="1365.8789" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="297" x="5122.42" y="1368.187">urtThreadMSleep (milliseconds : unsigned int) : void</text><ellipse cx="5113.42" cy="1378.6836" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="305" x="5122.42" y="1380.9917">urtThreadUSleep (microseconds : unsigned int) : void</text><ellipse cx="5113.42" cy="1391.4883" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="271" x="5122.42" y="1393.7964">urtThreadSleepUntil (time : urt_osTime_t) : void</text><ellipse cx="5113.42" cy="1404.293" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="146" x="5122.42" y="1406.6011">urtThreadExit (void) : void</text><ellipse cx="5113.42" cy="1417.0977" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="518" x="5122.42" y="1419.4058">urtThreadTerminate (thread : urt_osThread_t*, sig : urt_osThreadTerminateSignal_t) : void</text><ellipse cx="5113.42" cy="1429.9023" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="264" x="5122.42" y="1432.2104">urtThreadJoin (thread : urt_osThread_t*) : void</text><!--class urt_osEventMask_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="48" id="urt_osEventMask_t" style="stroke: #A80036; stroke-width: 1.5;" width="149" x="6450.42" y="1545.8594"/><ellipse cx="6465.42" cy="1561.8594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M6466.2638,1568.6094 L6463.8106,1568.6094 L6463.8106,1558.3594 L6460.67,1558.3594 L6460.67,1556.2188 L6469.4044,1556.2188 L6469.4044,1558.3594 L6466.2638,1558.3594 L6466.2638,1568.6094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="117" x="6479.42" y="1566.0137">urt_osEventMask_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="6451.42" x2="6598.42" y1="1577.8594" y2="1577.8594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="6451.42" x2="6598.42" y1="1585.8594" y2="1585.8594"/><!--class urt_osEventFlags_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="48" id="urt_osEventFlags_t" style="stroke: #A80036; stroke-width: 1.5;" width="150" x="6540.92" y="1700.8594"/><ellipse cx="6555.92" cy="1716.8594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M6556.7638,1723.6094 L6554.3106,1723.6094 L6554.3106,1713.3594 L6551.17,1713.3594 L6551.17,1711.2188 L6559.9044,1711.2188 L6559.9044,1713.3594 L6556.7638,1713.3594 L6556.7638,1723.6094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="6569.92" y="1721.0137">urt_osEventFlags_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="6541.92" x2="6689.92" y1="1732.8594" y2="1732.8594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="6541.92" x2="6689.92" y1="1740.8594" y2="1740.8594"/><!--class urt_osEventWaitType_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="86.4141" id="urt_osEventWaitType_t" style="stroke: #A80036; stroke-width: 1.5;" width="173" x="6634.42" y="1526.8594"/><ellipse cx="6649.42" cy="1542.8594" fill="#EB937F" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M6653.5294,1548.8594 L6645.8106,1548.8594 L6645.8106,1536.4688 L6653.5294,1536.4688 L6653.5294,1538.625 L6648.2638,1538.625 L6648.2638,1541.2969 L6653.0294,1541.2969 L6653.0294,1543.4531 L6648.2638,1543.4531 L6648.2638,1546.7031 L6653.5294,1546.7031 L6653.5294,1548.8594 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="141" x="6663.42" y="1547.0137">urt_osEventWaitType_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="6635.42" x2="6806.42" y1="1558.8594" y2="1558.8594"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="150" x="6640.42" y="1573.0698">URT_EVENT_WAIT_ONE = 0</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="148" x="6640.42" y="1585.8745">URT_EVENT_WAIT_ANY = 1</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="145" x="6640.42" y="1598.6792">URT_EVENT_WAIT_ALL = 2</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="6635.42" x2="6806.42" y1="1605.2734" y2="1605.2734"/><!--class urt_osEventListener_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="86.4141" id="urt_osEventListener_t" style="stroke: #A80036; stroke-width: 1.5;" width="494" x="6842.92" y="1526.8594"/><ellipse cx="7018.17" cy="1542.8594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M7019.0138,1549.6094 L7016.5606,1549.6094 L7016.5606,1539.3594 L7013.42,1539.3594 L7013.42,1537.2188 L7022.1544,1537.2188 L7022.1544,1539.3594 L7019.0138,1539.3594 L7019.0138,1549.6094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="135" x="7038.67" y="1547.0137">urt_osEventListener_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="6843.92" x2="7335.92" y1="1558.8594" y2="1558.8594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="6843.92" x2="7335.92" y1="1566.8594" y2="1566.8594"/><ellipse cx="6853.92" cy="1578.7617" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="341" x="6862.92" y="1581.0698">urtEventListenerInit (listener : urt_osEventListener_t*) : void</text><ellipse cx="6853.92" cy="1591.5664" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="458" x="6862.92" y="1593.8745">urtEventListenerGetFlags (listener : urt_osEventListener_t*) : urt_osEventFlags_t</text><ellipse cx="6853.92" cy="1604.3711" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="468" x="6862.92" y="1606.6792">urtEventListenerClearFlags (listener : urt_osEventListener_t*) : urt_osEventFlags_t</text><!--class urt_osEventSource_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="73.6094" id="urt_osEventSource_t" style="stroke: #A80036; stroke-width: 1.5;" width="547" x="5868.42" y="1532.8594"/><ellipse cx="6073.17" cy="1548.8594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M6074.0138,1555.6094 L6071.5606,1555.6094 L6071.5606,1545.3594 L6068.42,1545.3594 L6068.42,1543.2188 L6077.1544,1543.2188 L6077.1544,1545.3594 L6074.0138,1545.3594 L6074.0138,1555.6094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="129" x="6093.67" y="1553.0137">urt_osEventSource_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="5869.42" x2="6414.42" y1="1564.8594" y2="1564.8594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="5869.42" x2="6414.42" y1="1572.8594" y2="1572.8594"/><ellipse cx="5879.42" cy="1584.7617" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="325" x="5888.42" y="1587.0698">urtEventSourceInit (source : urt_osEventSource_t*) : void</text><ellipse cx="5879.42" cy="1597.5664" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="521" x="5888.42" y="1599.8745">urtEventSourceBroadcast (source : urt_osEventSource_t*, flags : urt_osEventFlags_t) : void</text><!--class urt_events--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="86.4141" id="urt_events" style="stroke: #A80036; stroke-width: 1.5;" width="735" x="5867.42" y="1165.3594"/><ellipse cx="6197.67" cy="1181.3594" fill="#FFFFFF" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M6201.9044,1177.125 L6196.6231,1177.125 L6196.6231,1179.7969 L6201.42,1179.7969 L6201.42,1181.9531 L6196.6231,1181.9531 L6196.6231,1187.3594 L6194.1856,1187.3594 L6194.1856,1174.9688 L6201.9044,1174.9688 L6201.9044,1177.125 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="66" x="6218.17" y="1185.5137">urt_events</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="5868.42" x2="6601.42" y1="1197.3594" y2="1197.3594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="5868.42" x2="6601.42" y1="1205.3594" y2="1205.3594"/><ellipse cx="5878.42" cy="1217.2617" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="709" x="5887.42" y="1219.5698">urtEventRegister (source : urt_osEventSource_t*, listener : urt_osEventListener_t*, mask : urt_osEventMask_t) : urt_status_t</text><ellipse cx="5878.42" cy="1230.0664" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="567" x="5887.42" y="1232.3745">urtEventUnregister (source _ urt_osEventSource_t*, listener : urt_osEventListener_t*) : urt_status_t</text><ellipse cx="5878.42" cy="1242.8711" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="488" x="5887.42" y="1245.1792">urtEventWait (type : urt_osEventWaitType_t, timeout : urt_delay_t) : urt_osEventMask_t</text><!--class urt_message_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="167.2422" id="urt_message_t" style="stroke: #A80036; stroke-width: 1.5;" width="451" x="1878.42" y="716.8594"/><ellipse cx="2053.67" cy="732.8594" fill="#D3D3D3" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2053.1544,733.4219 Q2051.295,732.7188 2050.6466,731.9453 Q2049.9981,731.1719 2049.9981,729.8594 Q2049.9981,728.1719 2051.0763,727.2031 Q2052.1544,726.2344 2054.0294,726.2344 Q2054.8888,726.2344 2055.7403,726.4297 Q2056.5919,726.625 2057.4356,727.0156 L2057.4356,729.4063 Q2056.6544,728.8438 2055.8341,728.5547 Q2055.0138,728.2656 2054.2169,728.2656 Q2053.3419,728.2656 2052.8653,728.625 Q2052.3888,728.9844 2052.3888,729.6406 Q2052.3888,730.1563 2052.7325,730.4922 Q2053.0763,730.8281 2054.17,731.2344 L2055.2325,731.6406 Q2056.7169,732.1875 2057.4278,733.0938 Q2058.1388,734 2058.1388,735.375 Q2058.1388,737.25 2057.0294,738.1719 Q2055.92,739.0938 2053.67,739.0938 Q2052.7481,739.0938 2051.8263,738.875 Q2050.9044,738.6563 2050.045,738.2344 L2050.045,735.7031 Q2051.0138,736.3906 2051.9356,736.7344 Q2052.8575,737.0781 2053.7481,737.0781 Q2054.6544,737.0781 2055.1544,736.6641 Q2055.6544,736.25 2055.6544,735.5156 Q2055.6544,734.9531 2055.3184,734.5391 Q2054.9825,734.125 2054.3575,733.875 L2053.1544,733.4219 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="92" x="2074.17" y="737.0137">urt_message_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1879.42" x2="2328.42" y1="748.8594" y2="748.8594"/><ellipse cx="1889.42" cy="760.7617" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="1898.42" y="763.0698">next : urt_message_t*</text><ellipse cx="1889.42" cy="773.5664" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="85" x="1898.42" y="775.8745">payload : void*</text><ellipse cx="1889.42" cy="786.3711" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="146" x="1898.42" y="788.6792">originTime : urt_osTime_t</text><ellipse cx="1889.42" cy="799.1758" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="113" x="1898.42" y="801.4839">lock : urt_osMutex_t</text><ellipse cx="1889.42" cy="811.9805" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="211" x="1898.42" y="814.2886">numHrtConsumersLeft : unsigned int</text><ellipse cx="1889.42" cy="824.7852" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="208" x="1898.42" y="827.0933">hrtConsumersLeft : urt_osCondvar_t</text><ellipse cx="1889.42" cy="854.3945" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="194" x="1898.42" y="856.7026">numConsumersLeft : unsigned int</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="1879.42" x2="2060.42" y1="840.0898" y2="840.0898"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="87" x="2060.42" y="843.3979">evaluation data</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="2147.42" x2="2328.42" y1="840.0898" y2="840.0898"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1879.42" x2="2328.42" y1="863.2969" y2="863.2969"/><ellipse cx="1889.42" cy="875.1992" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="425" x="1898.42" y="877.5073">urtMessageInit (message : urt_message_t*, payload : void*) : urt_status_t</text><!--class urt_subscriber_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="244.0703" id="urt_subscriber_t" style="stroke: #A80036; stroke-width: 1.5;" width="851" x="1093.42" y="121.8594"/><ellipse cx="1464.17" cy="137.8594" fill="#D3D3D3" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1463.6544,138.4219 Q1461.795,137.7188 1461.1466,136.9453 Q1460.4981,136.1719 1460.4981,134.8594 Q1460.4981,133.1719 1461.5763,132.2031 Q1462.6544,131.2344 1464.5294,131.2344 Q1465.3888,131.2344 1466.2403,131.4297 Q1467.0919,131.625 1467.9356,132.0156 L1467.9356,134.4063 Q1467.1544,133.8438 1466.3341,133.5547 Q1465.5138,133.2656 1464.7169,133.2656 Q1463.8419,133.2656 1463.3653,133.625 Q1462.8888,133.9844 1462.8888,134.6406 Q1462.8888,135.1563 1463.2325,135.4922 Q1463.5763,135.8281 1464.67,136.2344 L1465.7325,136.6406 Q1467.2169,137.1875 1467.9278,138.0938 Q1468.6388,139 1468.6388,140.375 Q1468.6388,142.25 1467.5294,143.1719 Q1466.42,144.0938 1464.17,144.0938 Q1463.2481,144.0938 1462.3263,143.875 Q1461.4044,143.6563 1460.545,143.2344 L1460.545,140.7031 Q1461.5138,141.3906 1462.4356,141.7344 Q1463.3575,142.0781 1464.2481,142.0781 Q1465.1544,142.0781 1465.6544,141.6641 Q1466.1544,141.25 1466.1544,140.5156 Q1466.1544,139.9531 1465.8184,139.5391 Q1465.4825,139.125 1464.8575,138.875 L1463.6544,138.4219 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="101" x="1484.67" y="142.0137">urt_subscriber_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1094.42" x2="1943.42" y1="153.8594" y2="153.8594"/><ellipse cx="1104.42" cy="165.7617" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="135" x="1113.42" y="168.0698">next : urt_subscriber_t*</text><ellipse cx="1104.42" cy="178.5664" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="104" x="1113.42" y="180.8745">topic : urt_topic_t*</text><ellipse cx="1104.42" cy="191.3711" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="198" x="1113.42" y="193.6792">evtListener : urt_osEventListener_t</text><ellipse cx="1104.42" cy="204.1758" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="122" x="1113.42" y="206.4839">rtclass : urt_rtclass_t</text><ellipse cx="1104.42" cy="216.9805" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="175" x="1113.42" y="219.2886">lastMessage : urt_message_t*</text><ellipse cx="1104.42" cy="229.7852" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="186" x="1113.42" y="232.0933">lastMessageTime : urt_osTime_t</text><ellipse cx="1104.42" cy="259.3945" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="138" x="1113.42" y="261.7026">minLatency : urt_delay_t</text><ellipse cx="1104.42" cy="272.1992" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="141" x="1113.42" y="274.5073">maxLatency : urt_delay_t</text><ellipse cx="1104.42" cy="285.0039" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="136" x="1113.42" y="287.312">sumLatencies : uint64_t</text><ellipse cx="1104.42" cy="297.8086" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="215" x="1113.42" y="300.1167">numMessagesReceived : unsigned int</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="1094.42" x2="1475.42" y1="245.0898" y2="245.0898"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="87" x="1475.42" y="248.3979">evaluation data</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="1562.42" x2="1943.42" y1="245.0898" y2="245.0898"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1094.42" x2="1943.42" y1="306.7109" y2="306.7109"/><ellipse cx="1104.42" cy="318.6133" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="359" x="1113.42" y="320.9214">urtSubscriberInit (subscriber : urt_subscriber_t*) : urt_status_t</text><ellipse cx="1104.42" cy="331.418" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="825" x="1113.42" y="333.7261">urtSubscriberSubscribe (subscriber : urt_subscriber_t*, topic : urt_topic_t*, rtclass : urt_rtclass_t*, messages : urt_messages_t*) : urt_status_t</text><ellipse cx="1104.42" cy="344.2227" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="413" x="1113.42" y="346.5308">urtSubscriberUnsubscribe (subscriber : urt_subscriber_t*) : urt_status_t</text><ellipse cx="1104.42" cy="357.0273" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="499" x="1113.42" y="359.3354">urtSubscriberFetchMessage (subscriber : urt_subscriber_t*, latest : bool) : urt_status_t</text><!--class urt_topic_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="231.2656" id="urt_topic_t" style="stroke: #A80036; stroke-width: 1.5;" width="511" x="1780.42" y="425.8594"/><ellipse cx="1998.67" cy="441.8594" fill="#D3D3D3" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1998.1544,442.4219 Q1996.295,441.7188 1995.6466,440.9453 Q1994.9981,440.1719 1994.9981,438.8594 Q1994.9981,437.1719 1996.0763,436.2031 Q1997.1544,435.2344 1999.0294,435.2344 Q1999.8888,435.2344 2000.7403,435.4297 Q2001.5919,435.625 2002.4356,436.0156 L2002.4356,438.4063 Q2001.6544,437.8438 2000.8341,437.5547 Q2000.0138,437.2656 1999.2169,437.2656 Q1998.3419,437.2656 1997.8653,437.625 Q1997.3888,437.9844 1997.3888,438.6406 Q1997.3888,439.1563 1997.7325,439.4922 Q1998.0763,439.8281 1999.17,440.2344 L2000.2325,440.6406 Q2001.7169,441.1875 2002.4278,442.0938 Q2003.1388,443 2003.1388,444.375 Q2003.1388,446.25 2002.0294,447.1719 Q2000.92,448.0938 1998.67,448.0938 Q1997.7481,448.0938 1996.8263,447.875 Q1995.9044,447.6563 1995.045,447.2344 L1995.045,444.7031 Q1996.0138,445.3906 1996.9356,445.7344 Q1997.8575,446.0781 1998.7481,446.0781 Q1999.6544,446.0781 2000.1544,445.6641 Q2000.6544,445.25 2000.6544,444.5156 Q2000.6544,443.9531 2000.3184,443.5391 Q1999.9825,443.125 1999.3575,442.875 L1998.1544,442.4219 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="66" x="2019.17" y="446.0137">urt_topic_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1781.42" x2="2290.42" y1="457.8594" y2="457.8594"/><ellipse cx="1791.42" cy="469.7617" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="101" x="1800.42" y="472.0698">next : urt_topic_t*</text><ellipse cx="1791.42" cy="482.5664" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="126" x="1800.42" y="484.8745">mutex : urt_osMutex_t</text><ellipse cx="1791.42" cy="495.3711" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="186" x="1800.42" y="497.6792">evtSource : urt_osEventSource_t</text><ellipse cx="1791.42" cy="508.1758" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="193" x="1800.42" y="510.4839">numHrtSubscribers : unsigned int</text><ellipse cx="1791.42" cy="520.9805" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="196" x="1800.42" y="523.2886">hrtSubscribers : urt_subscriber_t*</text><ellipse cx="1791.42" cy="533.7852" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="145" x="1800.42" y="536.0933">qosTimer : urt_osTimer_t</text><ellipse cx="1791.42" cy="546.5898" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="209" x="1800.42" y="548.8979">mandatoryMessage : urt_message_t</text><ellipse cx="1791.42" cy="559.3945" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="186" x="1800.42" y="561.7026">latestMessage : urt_message_t*</text><ellipse cx="1791.42" cy="572.1992" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="91" x="1800.42" y="574.5073">id : urt_topicid_t</text><ellipse cx="1791.42" cy="601.8086" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="222" x="1800.42" y="604.1167">numDiscardedMessages : unsigned int</text><ellipse cx="1791.42" cy="614.6133" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="176" x="1800.42" y="616.9214">numSubscribers : unsigned int</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="1781.42" x2="1992.42" y1="587.5039" y2="587.5039"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="87" x="1992.42" y="590.812">evaluation data</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="2079.42" x2="2290.42" y1="587.5039" y2="587.5039"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1781.42" x2="2290.42" y1="623.5156" y2="623.5156"/><ellipse cx="1791.42" cy="635.418" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="358" x="1800.42" y="637.7261">urtTopicInit (topic : urt_topic_t*, id : urt_topicid_t) : urt_status_t</text><ellipse cx="1791.42" cy="648.2227" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="485" x="1800.42" y="650.5308">urtTopicContributeMessages (topic : urt_topic_t*, messages : urt_message_t*) : void</text><!--class urt_publisher_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="128.8281" id="urt_publisher_t" style="stroke: #A80036; stroke-width: 1.5;" width="759" x="1997.42" y="179.3594"/><ellipse cx="2326.17" cy="195.3594" fill="#D3D3D3" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2325.6544,195.9219 Q2323.795,195.2188 2323.1466,194.4453 Q2322.4981,193.6719 2322.4981,192.3594 Q2322.4981,190.6719 2323.5763,189.7031 Q2324.6544,188.7344 2326.5294,188.7344 Q2327.3888,188.7344 2328.2403,188.9297 Q2329.0919,189.125 2329.9356,189.5156 L2329.9356,191.9063 Q2329.1544,191.3438 2328.3341,191.0547 Q2327.5138,190.7656 2326.7169,190.7656 Q2325.8419,190.7656 2325.3653,191.125 Q2324.8888,191.4844 2324.8888,192.1406 Q2324.8888,192.6563 2325.2325,192.9922 Q2325.5763,193.3281 2326.67,193.7344 L2327.7325,194.1406 Q2329.2169,194.6875 2329.9278,195.5938 Q2330.6388,196.5 2330.6388,197.875 Q2330.6388,199.75 2329.5294,200.6719 Q2328.42,201.5938 2326.17,201.5938 Q2325.2481,201.5938 2324.3263,201.375 Q2323.4044,201.1563 2322.545,200.7344 L2322.545,198.2031 Q2323.5138,198.8906 2324.4356,199.2344 Q2325.3575,199.5781 2326.2481,199.5781 Q2327.1544,199.5781 2327.6544,199.1641 Q2328.1544,198.75 2328.1544,198.0156 Q2328.1544,197.4531 2327.8184,197.0391 Q2327.4825,196.625 2326.8575,196.375 L2325.6544,195.9219 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="93" x="2346.67" y="199.5137">urt_publisher_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1998.42" x2="2755.42" y1="211.3594" y2="211.3594"/><ellipse cx="2008.42" cy="223.2617" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="104" x="2017.42" y="225.5698">topic : urt_topic_t*</text><ellipse cx="2008.42" cy="252.8711" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="174" x="2017.42" y="255.1792">publishAttempts : unsigned int</text><ellipse cx="2008.42" cy="265.6758" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="149" x="2017.42" y="267.9839">publishFails : unsigned int</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="1998.42" x2="2333.42" y1="238.5664" y2="238.5664"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="87" x="2333.42" y="241.8745">evaluation data</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="2420.42" x2="2755.42" y1="238.5664" y2="238.5664"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1998.42" x2="2755.42" y1="274.5781" y2="274.5781"/><ellipse cx="2008.42" cy="286.4805" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="617" x="2017.42" y="288.7886">urtPublisherInit (publisher : urt_publisher_t*, topic : urt_topic_t*, messages : urt_message_t*) : urt_status_t</text><ellipse cx="2008.42" cy="299.2852" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="733" x="2017.42" y="301.5933">urtPublisherPublish (publisher : urt_publisher_t*, payload : void*, n : size_t, t : urt_osTime_t, timeout : urt_delay_t) : urt_status_t</text><!--class urt_core_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="124.8281" id="urt_core_t" style="stroke: #A80036; stroke-width: 1.5;" width="325" x="733.421" y="181.3594"/><ellipse cx="860.171" cy="197.3594" fill="#D3D3D3" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M859.6554,197.9219 Q857.796,197.2188 857.1476,196.4453 Q856.4991,195.6719 856.4991,194.3594 Q856.4991,192.6719 857.5773,191.7031 Q858.6554,190.7344 860.5304,190.7344 Q861.3898,190.7344 862.2413,190.9297 Q863.0929,191.125 863.9366,191.5156 L863.9366,193.9063 Q863.1554,193.3438 862.3351,193.0547 Q861.5148,192.7656 860.7179,192.7656 Q859.8429,192.7656 859.3663,193.125 Q858.8898,193.4844 858.8898,194.1406 Q858.8898,194.6563 859.2335,194.9922 Q859.5773,195.3281 860.671,195.7344 L861.7335,196.1406 Q863.2179,196.6875 863.9288,197.5938 Q864.6398,198.5 864.6398,199.875 Q864.6398,201.75 863.5304,202.6719 Q862.421,203.5938 860.171,203.5938 Q859.2491,203.5938 858.3273,203.375 Q857.4054,203.1563 856.546,202.7344 L856.546,200.2031 Q857.5148,200.8906 858.4366,201.2344 Q859.3585,201.5781 860.2491,201.5781 Q861.1554,201.5781 861.6554,201.1641 Q862.1554,200.75 862.1554,200.0156 Q862.1554,199.4531 861.8194,199.0391 Q861.4835,198.625 860.8585,198.375 L859.6554,197.9219 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="63" x="880.671" y="201.5137">urt_core_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="734.421" x2="1057.421" y1="213.3594" y2="213.3594"/><rect fill="none" height="6" style="stroke: #C82930; stroke-width: 1.0;" width="6" x="741.421" y="222.2617"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" text-decoration="underline" textLength="119" x="753.421" y="227.5698">_nodes : urt_node_t*</text><line style="stroke: #000000; stroke-width: 1.0;" x1="753.421" x2="872.421" y1="229.5698" y2="229.5698"/><rect fill="none" height="6" style="stroke: #C82930; stroke-width: 1.0;" width="6" x="741.421" y="235.0664"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" text-decoration="underline" textLength="117" x="753.421" y="240.3745">_topics : urt_topic_t*</text><line style="stroke: #000000; stroke-width: 1.0;" x1="753.421" x2="870.421" y1="242.3745" y2="242.3745"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="734.421" x2="1057.421" y1="246.9688" y2="246.9688"/><ellipse cx="744.421" cy="258.8711" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="175" x="753.421" y="261.1792">urtCoreInit (void) : urt_status_t</text><ellipse cx="744.421" cy="271.6758" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="199" x="753.421" y="273.9839">urtCoreStartAll (void) : urt_status_t</text><ellipse cx="744.421" cy="284.4805" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="197" x="753.421" y="286.7886">urtCoreStopAll (void) : urt_status_t</text><ellipse cx="744.421" cy="297.2852" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="299" x="753.421" y="299.5933">urtCoreRetrieveTopic (id : urt_topicid_t) : urt_topic_t*</text><!--class urt_node_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="201.6563" id="urt_node_t" style="stroke: #A80036; stroke-width: 1.5;" width="1104" x="2381.92" y="440.3594"/><ellipse cx="2896.17" cy="456.3594" fill="#D3D3D3" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2895.6544,456.9219 Q2893.795,456.2188 2893.1466,455.4453 Q2892.4981,454.6719 2892.4981,453.3594 Q2892.4981,451.6719 2893.5763,450.7031 Q2894.6544,449.7344 2896.5294,449.7344 Q2897.3888,449.7344 2898.2403,449.9297 Q2899.0919,450.125 2899.9356,450.5156 L2899.9356,452.9063 Q2899.1544,452.3438 2898.3341,452.0547 Q2897.5138,451.7656 2896.7169,451.7656 Q2895.8419,451.7656 2895.3653,452.125 Q2894.8888,452.4844 2894.8888,453.1406 Q2894.8888,453.6563 2895.2325,453.9922 Q2895.5763,454.3281 2896.67,454.7344 L2897.7325,455.1406 Q2899.2169,455.6875 2899.9278,456.5938 Q2900.6388,457.5 2900.6388,458.875 Q2900.6388,460.75 2899.5294,461.6719 Q2898.42,462.5938 2896.17,462.5938 Q2895.2481,462.5938 2894.3263,462.375 Q2893.4044,462.1563 2892.545,461.7344 L2892.545,459.2031 Q2893.5138,459.8906 2894.4356,460.2344 Q2895.3575,460.5781 2896.2481,460.5781 Q2897.1544,460.5781 2897.6544,460.1641 Q2898.1544,459.75 2898.1544,459.0156 Q2898.1544,458.4531 2897.8184,458.0391 Q2897.4825,457.625 2896.8575,457.375 L2895.6544,456.9219 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="67" x="2916.67" y="460.5137">urt_node_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2382.92" x2="3484.92" y1="472.3594" y2="472.3594"/><ellipse cx="2392.92" cy="484.2617" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="102" x="2401.92" y="486.5698">next : urt_node_t*</text><ellipse cx="2392.92" cy="497.0664" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="141" x="2401.92" y="499.3745">thread : urt_osThread_t*</text><ellipse cx="2392.92" cy="509.8711" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="235" x="2401.92" y="512.1792">setupcallback : urt_nodeSetupCallback_t*</text><ellipse cx="2392.92" cy="522.6758" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="117" x="2401.92" y="524.9839">setupparams : void*</text><ellipse cx="2392.92" cy="535.4805" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="221" x="2401.92" y="537.7886">loopcallback : urt_nodeLoopCallback_t*</text><ellipse cx="2392.92" cy="548.2852" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="109" x="2401.92" y="550.5933">loopparams : void*</text><ellipse cx="2392.92" cy="561.0898" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="172" x="2401.92" y="563.3979">waitmask : urt_osEventMask_t</text><ellipse cx="2392.92" cy="573.8945" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="186" x="2401.92" y="576.2026">waittype : urt_osEventWaitType_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2382.92" x2="3484.92" y1="582.7969" y2="582.7969"/><rect fill="none" height="6" style="stroke: #C82930; stroke-width: 1.0;" width="6" x="2389.92" y="591.6992"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" text-decoration="underline" textLength="179" x="2401.92" y="597.0073">_main : urt_osThreadFunction_t</text><line style="stroke: #000000; stroke-width: 1.0;" x1="2401.92" x2="2580.92" y1="599.0073" y2="599.0073"/><ellipse cx="2392.92" cy="607.5039" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="1078" x="2401.92" y="609.812">urtNodeInit (node : urt_node_t*, stacksize : size_t, setupcallback : urt_nodeSetupCallback_t*, setupparams : void*, loopcallback : urt_nodeLoopCallback_t*, loopparams : void*) : urt_status_t</text><ellipse cx="2392.92" cy="620.3086" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="531" x="2401.92" y="622.6167">urtNodeTerminateRecusively (node : urt_node_t*, sig : urt_osThreadTerminateSignal_t) : void</text><ellipse cx="2392.92" cy="633.1133" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="282" x="2401.92" y="635.4214">urtNodeJoinRecursively (node : urt_node_t*) : void</text><!--class urt_rtclass_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="73.6094" id="urt_rtclass_t" style="stroke: #A80036; stroke-width: 1.5;" width="197" x="1408.42" y="504.3594"/><ellipse cx="1464.17" cy="520.3594" fill="#D3D3D3" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1463.6544,520.9219 Q1461.795,520.2188 1461.1466,519.4453 Q1460.4981,518.6719 1460.4981,517.3594 Q1460.4981,515.6719 1461.5763,514.7031 Q1462.6544,513.7344 1464.5294,513.7344 Q1465.3888,513.7344 1466.2403,513.9297 Q1467.0919,514.125 1467.9356,514.5156 L1467.9356,516.9063 Q1467.1544,516.3438 1466.3341,516.0547 Q1465.5138,515.7656 1464.7169,515.7656 Q1463.8419,515.7656 1463.3653,516.125 Q1462.8888,516.4844 1462.8888,517.1406 Q1462.8888,517.6563 1463.2325,517.9922 Q1463.5763,518.3281 1464.67,518.7344 L1465.7325,519.1406 Q1467.2169,519.6875 1467.9278,520.5938 Q1468.6388,521.5 1468.6388,522.875 Q1468.6388,524.75 1467.5294,525.6719 Q1466.42,526.5938 1464.17,526.5938 Q1463.2481,526.5938 1462.3263,526.375 Q1461.4044,526.1563 1460.545,525.7344 L1460.545,523.2031 Q1461.5138,523.8906 1462.4356,524.2344 Q1463.3575,524.5781 1464.2481,524.5781 Q1465.1544,524.5781 1465.6544,524.1641 Q1466.1544,523.75 1466.1544,523.0156 Q1466.1544,522.4531 1465.8184,522.0391 Q1465.4825,521.625 1464.8575,521.375 L1463.6544,520.9219 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="77" x="1484.67" y="524.5137">urt_rtclass_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1409.42" x2="1604.42" y1="536.3594" y2="536.3594"/><ellipse cx="1419.42" cy="548.2617" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="137" x="1428.42" y="550.5698">class : urt_rtclasstype_t</text><ellipse cx="1419.42" cy="561.0664" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="171" x="1428.42" y="563.3745">params : urt_rtclassparams_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1409.42" x2="1604.42" y1="569.9688" y2="569.9688"/><!--class urt_rtclasstype_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="99.2188" id="urt_rtclasstype_t" style="stroke: #A80036; stroke-width: 1.5;" width="153" x="1430.42" y="750.8594"/><ellipse cx="1453.07" cy="766.8594" fill="#EB937F" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1457.1794,772.8594 L1449.4606,772.8594 L1449.4606,760.4688 L1457.1794,760.4688 L1457.1794,762.625 L1451.9138,762.625 L1451.9138,765.2969 L1456.6794,765.2969 L1456.6794,767.4531 L1451.9138,767.4531 L1451.9138,770.7031 L1457.1794,770.7031 L1457.1794,772.8594 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="104" x="1468.77" y="771.0137">urt_rtclasstype_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1431.42" x2="1582.42" y1="782.8594" y2="782.8594"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="139" x="1436.42" y="797.0698">URT_RTCLASS_HARD = 0</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="134" x="1436.42" y="809.8745">URT_RTCLASS_FIRM = 1</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="139" x="1436.42" y="822.6792">URT_RTCLASS_SOFT = 2</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="141" x="1436.42" y="835.4839">URT_RTCLASS_NONE = 3</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1431.42" x2="1582.42" y1="842.0781" y2="842.0781"/><!--class urt_rtclassparams_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="99.2188" id="urt_rtclassparams_t" style="stroke: #A80036; stroke-width: 1.5;" width="156" x="1226.92" y="750.8594"/><ellipse cx="1241.92" cy="766.8594" fill="#90EE90" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1237.795,768.7813 L1237.795,760.9688 L1240.2481,760.9688 L1240.2481,769.4063 Q1240.2481,770.3281 1240.7247,770.8594 Q1241.2013,771.3906 1242.0294,771.3906 Q1242.8731,771.3906 1243.3419,770.8594 Q1243.8106,770.3281 1243.8106,769.4063 L1243.8106,760.9688 L1246.2638,760.9688 L1246.2638,768.7813 Q1246.2638,771.3125 1245.2638,772.4531 Q1244.2638,773.5938 1242.0294,773.5938 Q1239.8106,773.5938 1238.8028,772.4531 Q1237.795,771.3125 1237.795,768.7813 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="124" x="1255.92" y="771.0137">urt_rtclassparams_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1227.92" x2="1381.92" y1="782.8594" y2="782.8594"/><ellipse cx="1237.92" cy="794.7617" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="120" x="1246.92" y="797.0698">hrt : urt_hrtparams_t</text><ellipse cx="1237.92" cy="807.5664" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="114" x="1246.92" y="809.8745">frt : urt_frtparams_t</text><ellipse cx="1237.92" cy="820.3711" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="116" x="1246.92" y="822.6792">srt : urt_srtparans_t</text><ellipse cx="1237.92" cy="833.1758" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="120" x="1246.92" y="835.4839">nrt : urt_nrtparams_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1227.92" x2="1381.92" y1="842.0781" y2="842.0781"/><!--class urt_hrtparams_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="86.4141" id="urt_hrtparams_t" style="stroke: #A80036; stroke-width: 1.5;" width="183" x="925.421" y="1165.3594"/><ellipse cx="963.371" cy="1181.3594" fill="#D3D3D3" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M962.8554,1181.9219 Q960.996,1181.2188 960.3476,1180.4453 Q959.6991,1179.6719 959.6991,1178.3594 Q959.6991,1176.6719 960.7773,1175.7031 Q961.8554,1174.7344 963.7304,1174.7344 Q964.5898,1174.7344 965.4413,1174.9297 Q966.2929,1175.125 967.1366,1175.5156 L967.1366,1177.9063 Q966.3554,1177.3438 965.5351,1177.0547 Q964.7148,1176.7656 963.9179,1176.7656 Q963.0429,1176.7656 962.5663,1177.125 Q962.0898,1177.4844 962.0898,1178.1406 Q962.0898,1178.6563 962.4335,1178.9922 Q962.7773,1179.3281 963.871,1179.7344 L964.9335,1180.1406 Q966.4179,1180.6875 967.1288,1181.5938 Q967.8398,1182.5 967.8398,1183.875 Q967.8398,1185.75 966.7304,1186.6719 Q965.621,1187.5938 963.371,1187.5938 Q962.4491,1187.5938 961.5273,1187.375 Q960.6054,1187.1563 959.746,1186.7344 L959.746,1184.2031 Q960.7148,1184.8906 961.6366,1185.2344 Q962.5585,1185.5781 963.4491,1185.5781 Q964.3554,1185.5781 964.8554,1185.1641 Q965.3554,1184.75 965.3554,1184.0156 Q965.3554,1183.4531 965.0194,1183.0391 Q964.6835,1182.625 964.0585,1182.375 L962.8554,1181.9219 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="100" x="982.471" y="1185.5137">urt_hrtparams_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="926.421" x2="1107.421" y1="1197.3594" y2="1197.3594"/><ellipse cx="936.421" cy="1209.2617" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="157" x="945.421" y="1211.5698">deadlineOffset : urt_delay_t</text><ellipse cx="936.421" cy="1222.0664" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="150" x="945.421" y="1224.3745">expectedRate : urt_delay_t</text><ellipse cx="936.421" cy="1234.8711" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="145" x="945.421" y="1237.1792">qosTimer : urt_osTimer_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="926.421" x2="1107.421" y1="1243.7734" y2="1243.7734"/><!--class urt_frtparams_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="112.0234" id="urt_frtparams_t" style="stroke: #A80036; stroke-width: 1.5;" width="209" x="1501.42" y="1152.3594"/><ellipse cx="1553.67" cy="1168.3594" fill="#D3D3D3" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1553.1544,1168.9219 Q1551.295,1168.2188 1550.6466,1167.4453 Q1549.9981,1166.6719 1549.9981,1165.3594 Q1549.9981,1163.6719 1551.0763,1162.7031 Q1552.1544,1161.7344 1554.0294,1161.7344 Q1554.8888,1161.7344 1555.7403,1161.9297 Q1556.5919,1162.125 1557.4356,1162.5156 L1557.4356,1164.9063 Q1556.6544,1164.3438 1555.8341,1164.0547 Q1555.0138,1163.7656 1554.2169,1163.7656 Q1553.3419,1163.7656 1552.8653,1164.125 Q1552.3888,1164.4844 1552.3888,1165.1406 Q1552.3888,1165.6563 1552.7325,1165.9922 Q1553.0763,1166.3281 1554.17,1166.7344 L1555.2325,1167.1406 Q1556.7169,1167.6875 1557.4278,1168.5938 Q1558.1388,1169.5 1558.1388,1170.875 Q1558.1388,1172.75 1557.0294,1173.6719 Q1555.92,1174.5938 1553.67,1174.5938 Q1552.7481,1174.5938 1551.8263,1174.375 Q1550.9044,1174.1563 1550.045,1173.7344 L1550.045,1171.2031 Q1551.0138,1171.8906 1551.9356,1172.2344 Q1552.8575,1172.5781 1553.7481,1172.5781 Q1554.6544,1172.5781 1555.1544,1172.1641 Q1555.6544,1171.75 1555.6544,1171.0156 Q1555.6544,1170.4531 1555.3184,1170.0391 Q1554.9825,1169.625 1554.3575,1169.375 L1553.1544,1168.9219 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="96" x="1574.17" y="1172.5137">urt_frtparams_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1502.42" x2="1709.42" y1="1184.3594" y2="1184.3594"/><ellipse cx="1512.42" cy="1196.2617" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="157" x="1521.42" y="1198.5698">deadlineOffset : urt_delay_t</text><ellipse cx="1512.42" cy="1209.0664" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="150" x="1521.42" y="1211.3745">expectedRate : urt_delay_t</text><ellipse cx="1512.42" cy="1221.8711" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="145" x="1521.42" y="1224.1792">qosTimer : urt_osTimer_t</text><ellipse cx="1512.42" cy="1234.6758" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="183" x="1521.42" y="1236.9839">callback : urt_osTimerCallback_t</text><ellipse cx="1512.42" cy="1247.4805" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="98" x="1521.42" y="1249.7886">cbparams : void*</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1502.42" x2="1709.42" y1="1256.3828" y2="1256.3828"/><!--class urt_srtparams_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="73.6094" id="urt_srtparams_t" style="stroke: #A80036; stroke-width: 1.5;" width="322" x="1143.92" y="1171.3594"/><ellipse cx="1251.17" cy="1187.3594" fill="#D3D3D3" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1250.6544,1187.9219 Q1248.795,1187.2188 1248.1466,1186.4453 Q1247.4981,1185.6719 1247.4981,1184.3594 Q1247.4981,1182.6719 1248.5763,1181.7031 Q1249.6544,1180.7344 1251.5294,1180.7344 Q1252.3888,1180.7344 1253.2403,1180.9297 Q1254.0919,1181.125 1254.9356,1181.5156 L1254.9356,1183.9063 Q1254.1544,1183.3438 1253.3341,1183.0547 Q1252.5138,1182.7656 1251.7169,1182.7656 Q1250.8419,1182.7656 1250.3653,1183.125 Q1249.8888,1183.4844 1249.8888,1184.1406 Q1249.8888,1184.6563 1250.2325,1184.9922 Q1250.5763,1185.3281 1251.67,1185.7344 L1252.7325,1186.1406 Q1254.2169,1186.6875 1254.9278,1187.5938 Q1255.6388,1188.5 1255.6388,1189.875 Q1255.6388,1191.75 1254.5294,1192.6719 Q1253.42,1193.5938 1251.17,1193.5938 Q1250.2481,1193.5938 1249.3263,1193.375 Q1248.4044,1193.1563 1247.545,1192.7344 L1247.545,1190.2031 Q1248.5138,1190.8906 1249.4356,1191.2344 Q1250.3575,1191.5781 1251.2481,1191.5781 Q1252.1544,1191.5781 1252.6544,1191.1641 Q1253.1544,1190.75 1253.1544,1190.0156 Q1253.1544,1189.4531 1252.8184,1189.0391 Q1252.4825,1188.625 1251.8575,1188.375 L1250.6544,1187.9219 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="99" x="1271.67" y="1191.5137">urt_srtparams_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1144.92" x2="1464.92" y1="1203.3594" y2="1203.3594"/><ellipse cx="1154.92" cy="1215.2617" fill="none" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="85" x="1163.92" y="1217.5698">params : void*</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1144.92" x2="1464.92" y1="1224.1641" y2="1224.1641"/><ellipse cx="1154.92" cy="1236.0664" fill="#84BE84" rx="3" ry="3" style="stroke: #038048; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="296" x="1163.92" y="1238.3745">*usefulness (dt : urt_delay_t, params : void*) : float</text><!--class urt_nrtparams_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="48" id="urt_nrtparams_t" style="stroke: #A80036; stroke-width: 1.5;" width="132" x="757.921" y="1184.3594"/><ellipse cx="772.921" cy="1200.3594" fill="#D3D3D3" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M772.4054,1200.9219 Q770.546,1200.2188 769.8976,1199.4453 Q769.2491,1198.6719 769.2491,1197.3594 Q769.2491,1195.6719 770.3273,1194.7031 Q771.4054,1193.7344 773.2804,1193.7344 Q774.1398,1193.7344 774.9913,1193.9297 Q775.8429,1194.125 776.6866,1194.5156 L776.6866,1196.9063 Q775.9054,1196.3438 775.0851,1196.0547 Q774.2648,1195.7656 773.4679,1195.7656 Q772.5929,1195.7656 772.1163,1196.125 Q771.6398,1196.4844 771.6398,1197.1406 Q771.6398,1197.6563 771.9835,1197.9922 Q772.3273,1198.3281 773.421,1198.7344 L774.4835,1199.1406 Q775.9679,1199.6875 776.6788,1200.5938 Q777.3898,1201.5 777.3898,1202.875 Q777.3898,1204.75 776.2804,1205.6719 Q775.171,1206.5938 772.921,1206.5938 Q771.9991,1206.5938 771.0773,1206.375 Q770.1554,1206.1563 769.296,1205.7344 L769.296,1203.2031 Q770.2648,1203.8906 771.1866,1204.2344 Q772.1085,1204.5781 772.9991,1204.5781 Q773.9054,1204.5781 774.4054,1204.1641 Q774.9054,1203.75 774.9054,1203.0156 Q774.9054,1202.4531 774.5694,1202.0391 Q774.2335,1201.625 773.6085,1201.375 L772.4054,1200.9219 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="100" x="786.921" y="1204.5137">urt_nrtparams_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="758.921" x2="888.921" y1="1216.3594" y2="1216.3594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="758.921" x2="888.921" y1="1224.3594" y2="1224.3594"/><!--class urt_nodeSetupCallback_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="60.8047" id="urt_nodeSetupCallback_t" style="stroke: #A80036; stroke-width: 1.5;" width="418" x="2382.92" y="769.8594"/><ellipse cx="2509.67" cy="785.8594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2510.5138,792.6094 L2508.0606,792.6094 L2508.0606,782.3594 L2504.92,782.3594 L2504.92,780.2188 L2513.6544,780.2188 L2513.6544,782.3594 L2510.5138,782.3594 L2510.5138,792.6094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="156" x="2530.17" y="790.0137">urt_nodeSetupCallback_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2383.92" x2="2799.92" y1="801.8594" y2="801.8594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2383.92" x2="2799.92" y1="809.8594" y2="809.8594"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="406" x="2388.92" y="824.0698">urt_nodeSetupCallback_t (node : urt_node_t*, arg : void*) : urt_status_t</text><!--class urt_nodeLoopCallback_t--><rect fill="#FEFECE" filter="url(#fx5q9amszycal)" height="60.8047" id="urt_nodeLoopCallback_t" style="stroke: #A80036; stroke-width: 1.5;" width="576" x="2835.92" y="769.8594"/><ellipse cx="3045.17" cy="785.8594" fill="#ADD8E6" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M3046.0138,792.6094 L3043.5606,792.6094 L3043.5606,782.3594 L3040.42,782.3594 L3040.42,780.2188 L3049.1544,780.2188 L3049.1544,782.3594 L3046.0138,782.3594 L3046.0138,792.6094 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="149" x="3065.67" y="790.0137">urt_nodeLoopCallback_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2836.92" x2="3410.92" y1="801.8594" y2="801.8594"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2836.92" x2="3410.92" y1="809.8594" y2="809.8594"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="564" x="2841.92" y="824.0698">urt_nodeLoopCallback_t (node : urt_node_t*, events : urt_osEventMask_t, arg : void*) : urt_status_t</text><!--link urt_osCondvar_t to urt_osMutex_t--><path d="M4763,1258.0844 C4832.84,1314.2304 4957.26,1403.3164 5081.92,1438.8594 C5203.26,1473.4544 7232.33,1418.7634 7352.92,1455.8594 C7393.12,1468.2244 7432.5,1493.5574 7463.13,1517.1094 " fill="none" id="urt_osCondvar_t-urt_osMutex_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="7467.2,1520.2694,7462.5505,1511.5871,7463.2529,1517.2002,7457.6398,1517.9025,7467.2,1520.2694" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_osCondvar_t to urt_delay_t--><path d="M4648.44,1258.0164 C4578.45,1313.8684 4454.13,1402.4474 4329.92,1438.8594 C4248.65,1462.6824 3652.57,1453.2294 3567.92,1455.8594 C2446.28,1490.7064 1075.96,1552.9394 786.296,1566.2924 " fill="none" id="urt_osCondvar_t-urt_delay_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="781.287,1566.5234,790.4614,1570.1052,786.2817,1566.2934,790.0935,1562.1137,781.287,1566.5234" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_osCondvar_t to urt_condvarStatus_t--><path d="M4705.92,1258.2174 C4705.92,1327.4464 4705.92,1453.2524 4705.92,1521.5984 " fill="none" id="urt_osCondvar_t-urt_condvarStatus_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="4705.92,1526.8214,4709.92,1517.8214,4705.92,1521.8214,4701.92,1517.8214,4705.92,1526.8214" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_osTimer_t to urt_delay_t--><path d="M3583.3,1250.2054 C2823.04,1335.1374 1114.94,1525.9584 786.23,1562.6804 " fill="none" id="urt_osTimer_t-urt_delay_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="781.026,1563.2624,790.414,1566.2399,785.9952,1562.708,789.527,1558.2892,781.026,1563.2624" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_osTimer_t to urt_status_t--><path d="M3583.08,1257.0034 C3143.34,1311.9864 2382.62,1399.8334 1726.92,1438.8594 C1667.91,1442.3714 716.629,1431.1524 662.921,1455.8594 C632.661,1469.7794 607.792,1497.7464 590.423,1522.3734 " fill="none" id="urt_osTimer_t-urt_status_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="587.484,1526.6104,595.9004,1521.4952,590.3338,1522.502,589.327,1516.9355,587.484,1526.6104" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_osTimer_t to urt_osTimerCallback_t--><path d="M3933.84,1258.2174 C3911.07,1331.9374 3868.5,1469.8114 3848.64,1534.1424 " fill="none" id="urt_osTimer_t-urt_osTimerCallback_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="3847.13,1539.0184,3853.6086,1531.6003,3848.6061,1534.2412,3845.9652,1529.2386,3847.13,1539.0184" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_osThread_t to urt_osThreadPrio_t--><path d="M5258.12,1439.0714 C5231.25,1480.0084 5206.84,1517.1894 5191.1,1541.1594 " fill="none" id="urt_osThread_t-urt_osThreadPrio_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="5188.27,1545.4794,5196.5498,1540.146,5191.0115,1541.2979,5189.8595,1535.7596,5188.27,1545.4794" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_osThread_t to urt_osThreadFunction_t--><path d="M5408.92,1439.0714 C5408.92,1476.1724 5408.92,1510.1884 5408.92,1534.0814 " fill="none" id="urt_osThread_t-urt_osThreadFunction_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="5408.92,1539.3254,5412.92,1530.3254,5408.92,1534.3254,5404.92,1530.3254,5408.92,1539.3254" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_osThread_t to urt_osTime_t--><path d="M5715.7,1391.1894 C5760.15,1410.6874 5806.32,1427.5244 5851.92,1438.8594 C5950.97,1463.4784 7592.44,1422.5644 7688.92,1455.8594 C7731.44,1470.5324 7771.33,1502.8514 7798.81,1529.1824 " fill="none" id="urt_osThread_t-urt_osTime_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="7802.43,1532.6914,7798.7388,1523.5604,7798.8349,1529.2164,7793.1789,1529.3125,7802.43,1532.6914" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_osThread_t to urt_osThreadTerminateSignal_t--><path d="M5589.11,1439.0714 C5616.15,1473.5444 5641.11,1505.3534 5659.54,1528.8534 " fill="none" id="urt_osThread_t-urt_osThreadTerminateSignal_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="5662.67,1532.8474,5660.2543,1523.2994,5659.5806,1528.916,5653.964,1528.2424,5662.67,1532.8474" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_osEventListener_t to urt_osEventFlags_t--><path d="M6976.67,1612.8774 C6929.92,1629.7384 6875.04,1648.9134 6824.92,1664.8594 C6782.8,1678.2594 6735.43,1691.7594 6696.44,1702.4584 " fill="none" id="urt_osEventListener_t-urt_osEventFlags_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="6691.25,1703.8824,6700.985,1705.3753,6696.0741,1702.5678,6698.8817,1697.6568,6691.25,1703.8824" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_osEventSource_t to urt_osEventFlags_t--><path d="M6253.5,1606.9184 C6307.66,1624.4174 6373.68,1645.7414 6432.92,1664.8594 C6467.89,1676.1454 6506.63,1688.6354 6539.42,1699.2064 " fill="none" id="urt_osEventSource_t-urt_osEventFlags_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="6544.22,1700.7514,6536.8746,1694.1905,6539.4596,1699.2222,6534.4279,1701.8072,6544.22,1700.7514" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_events to urt_osEventSource_t--><path d="M6223.98,1251.6554 C6206.01,1321.1194 6170.47,1458.5144 6152.64,1527.4164 " fill="none" id="urt_events-urt_osEventSource_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="6151.29,1532.6604,6157.4145,1524.9474,6152.5409,1527.8194,6149.6689,1522.9458,6151.29,1532.6604" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_events to urt_osEventListener_t--><path d="M6285,1251.3874 C6352.83,1305.5704 6479.93,1397.7044 6605.92,1438.8594 C6698.72,1469.1734 6730.1,1432.6274 6824.92,1455.8594 C6887.76,1471.2544 6954.75,1499.9394 7005.65,1524.5554 " fill="none" id="urt_events-urt_osEventListener_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="7010.22,1526.7724,7003.8739,1519.2406,7005.723,1524.5867,7000.3769,1526.4358,7010.22,1526.7724" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_events to urt_osEventMask_t--><path d="M6269.04,1251.6554 C6329.26,1326.3014 6452.75,1479.3924 6502.96,1541.6374 " fill="none" id="urt_events-urt_osEventMask_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="6506.16,1545.6044,6503.6145,1536.0902,6503.0174,1541.7154,6497.3921,1541.1184,6506.16,1545.6044" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_events to urt_status_t--><path d="M6181.6,1251.4274 C6107.36,1307.0474 5966.34,1402.2784 5827.92,1438.8594 C5758.57,1457.1884 728.281,1426.2924 662.921,1455.8594 C632.461,1469.6384 607.519,1497.7614 590.163,1522.5024 " fill="none" id="urt_events-urt_status_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="587.228,1526.7584,595.6306,1521.6206,590.0668,1522.6424,589.045,1517.0786,587.228,1526.7584" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_events to urt_osEventWaitType_t--><path d="M6312.42,1251.5514 C6392.52,1296.8964 6519.27,1373.6194 6616.92,1455.8594 C6640.73,1475.9084 6664.45,1501.1694 6683.21,1522.7204 " fill="none" id="urt_events-urt_osEventWaitType_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="6686.65,1526.6984,6683.7723,1517.2793,6683.3729,1522.9221,6677.7302,1522.5227,6686.65,1526.6984" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_events to urt_delay_t--><path d="M6181.26,1251.5794 C6106.91,1307.1344 5966.07,1402.0374 5827.92,1438.8594 C5767.26,1455.0284 3630.68,1454.3734 3567.92,1455.8594 C2446.05,1482.4144 1075.91,1551.1034 786.287,1565.9874 " fill="none" id="urt_events-urt_delay_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="781.279,1566.2454,790.4718,1569.7798,786.2725,1565.9896,790.0626,1561.7903,781.279,1566.2454" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_rtclass_t to urt_rtclasstype_t--><path d="M1506.92,591.4894 C1506.92,637.1594 1506.92,704.8194 1506.92,750.4194 " fill="none" id="urt_rtclass_t-urt_rtclasstype_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1506.92,578.3694,1502.92,584.3694,1506.92,590.3694,1510.92,584.3694,1506.92,578.3694" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1498.2325" y="598.1314">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1498.3825" y="739.762">1</text><!--link urt_rtclass_t to urt_rtclassparams_t--><path d="M1470.37,588.8694 C1434.47,634.5394 1379.93,703.9294 1343.39,750.4194 " fill="none" id="urt_rtclass_t-urt_rtclassparams_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1478.62,578.3694,1471.7654,580.6088,1471.1962,587.7974,1478.0508,585.558,1478.62,578.3694" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1465.0684" y="598.1314">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1340.0219" y="739.762">1</text><!--link urt_rtclassparams_t to urt_hrtparams_t--><path d="M1214.68,830.8014 C1183,844.9664 1149.48,864.8764 1125.92,891.8594 C1055.89,972.0794 1030.24,1099.6844 1021.33,1165.3224 " fill="none" id="urt_rtclassparams_t-urt_hrtparams_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1226.71,825.6514,1219.6188,824.3419,1215.6826,830.384,1222.7739,831.6935,1226.71,825.6514" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1210.8744" y="824.41">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="24" x="1023.9452" y="1154.3125">0..1</text><!--link urt_rtclassparams_t to urt_frtparams_t--><path d="M1367.38,857.8954 C1381.51,868.0724 1397.05,877.4644 1412.92,883.8594 C1441.97,895.5634 1458.11,872.7494 1482.92,891.8594 C1564.65,954.8264 1592.13,1079.7364 1601.33,1152.0674 " fill="none" id="urt_rtclassparams_t-urt_frtparams_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1356.86,849.9954,1359.2513,856.7984,1366.4508,857.2076,1364.0595,850.4046,1356.86,849.9954" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1355.6016" y="870.091">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="24" x="1575.3081" y="1141.3663">0..1</text><!--link urt_rtclassparams_t to urt_srtparams_t--><path d="M1304.92,863.1194 C1304.92,949.0264 1304.92,1101.8374 1304.92,1171.2574 " fill="none" id="urt_rtclassparams_t-urt_srtparams_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1304.92,849.9294,1300.92,855.9294,1304.92,861.9294,1308.92,855.9294,1304.92,849.9294" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1296.3575" y="870.0157">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="24" x="1278.7825" y="1160.4262">0..1</text><!--link urt_rtclassparams_t to urt_nrtparams_t--><path d="M1213.91,811.1834 C1110.65,824.1514 950.981,850.3254 907.921,891.8594 C824.491,972.3324 820.751,1125.5664 822.622,1183.9624 " fill="none" id="urt_rtclassparams_t-urt_nrtparams_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1226.83,809.5914,1220.3834,806.3601,1214.9212,811.0681,1221.3678,814.2993,1226.83,809.5914" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1211.0058" y="806.8171">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="24" x="795.3804" y="1173.2706">0..1</text><!--link urt_hrtparams_t to urt_delay_t--><path d="M1003.628,1251.7904 C986.809,1300.6884 954.215,1381.6474 906.921,1438.8594 C873.081,1479.7954 823.706,1514.7944 785.86,1538.1294 " fill="none" id="urt_hrtparams_t-urt_delay_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="781.303,1540.9174,791.0675,1539.6307,785.5676,1538.3072,786.8911,1532.8073,781.303,1540.9174" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_hrtparams_t to urt_osTimer_t--><path d="M1020.21,1152.0084 C1027.49,1080.7564 1050.89,959.2684 1125.92,891.8594 C1131.86,886.5274 1135.49,888.7544 1143.42,887.8594 C1174.67,884.3334 1678.06,885.6264 1709.42,887.8594 C2430.53,939.1974 3272.41,1082.3954 3688.61,1158.8204 " fill="none" id="urt_hrtparams_t-urt_osTimer_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1018.99,1165.1304,1023.5268,1159.5253,1020.0978,1153.1816,1015.561,1158.7867,1018.99,1165.1304" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1010.6943" y="1154.4079">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="3643.4414" y="1147.8601">1</text><!--link urt_frtparams_t to urt_delay_t--><path d="M1591.67,1264.3714 C1574.86,1317.7184 1541.49,1396.6064 1482.92,1438.8594 C1370.69,1519.8284 940.89,1555.2174 786.528,1565.4994 " fill="none" id="urt_frtparams_t-urt_delay_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="781.154,1565.8544,790.3984,1569.2516,786.1431,1565.5243,789.8703,1561.269,781.154,1565.8544" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_frtparams_t to urt_osTimer_t--><path d="M1723.86,1208.3594 C2343.69,1208.3594 2963.51,1208.3594 3583.34,1208.3594 " fill="none" id="urt_frtparams_t-urt_osTimer_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1710.6,1208.3594,1716.6,1212.3594,1722.6,1208.3594,1716.6,1204.3594,1710.6,1208.3594" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1718.5812" y="1204.8795">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="3567.8329" y="1205.2731">1</text><!--link urt_frtparams_t to urt_osTimerCallback_t--><path d="M1723.68,1228.3264 C2101.55,1289.1884 3282.78,1479.4454 3694.59,1545.7734 " fill="none" id="urt_frtparams_t-urt_osTimerCallback_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1710.58,1226.2164,1715.8661,1231.1212,1722.4267,1228.1282,1717.1406,1223.2234,1710.58,1226.2164" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1718.5597" y="1224.0479">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="3678.9933" y="1541.2201">1</text><!--link urt_srtparams_t to urt_delay_t--><path d="M1285.92,1245.4534 C1257.61,1295.8544 1199.69,1386.9544 1125.92,1438.8594 C1019.47,1513.7624 867.044,1547.6414 786.197,1561.1284 " fill="none" id="urt_srtparams_t-urt_delay_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="780.977,1561.9874,790.5075,1564.4713,785.9105,1561.1746,789.2071,1556.5777,780.977,1561.9874" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_message_t to urt_message_t--><path d="M2341.49,766.8794 C2355.82,774.8394 2364.42,785.9994 2364.42,800.3594 C2364.42,818.3744 2350.87,831.3574 2329.45,839.3094 " fill="none" id="urt_message_t-urt_message_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="2329.45,761.4094,2333.2592,767.5323,2340.3762,766.371,2336.567,760.2481,2329.45,761.4094" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2337.6987" y="756.805">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="24" x="2337.244" y="837.4064">0..1</text><!--link urt_message_t to urt_osTime_t--><path d="M2342.48,879.5614 C2350.69,881.1734 2358.85,882.6164 2366.92,883.8594 C2384.37,886.5464 7437.52,881.6494 7451.92,891.8594 C7662.25,1040.9334 7465.34,1253.8984 7644.92,1438.8594 C7659.52,1453.9004 7670.65,1445.5884 7688.92,1455.8594 C7727.65,1477.6234 7767.34,1508.7604 7795.7,1532.8394 " fill="none" id="urt_message_t-urt_osTime_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="2329.56,876.8944,2334.6273,882.0249,2341.3121,879.3208,2336.2449,874.1902,2329.56,876.8944" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2337.0951" y="891.7169">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="7779.5469" y="1521.7461">1</text><!--link urt_message_t to urt_osMutex_t--><path d="M2342.48,879.5614 C2350.69,881.1734 2358.85,882.6164 2366.92,883.8594 C2384.03,886.4944 7339.29,881.1914 7352.92,891.8594 C7403.61,931.5144 7486.59,1371.8094 7513.33,1520.2954 " fill="none" id="urt_message_t-urt_osMutex_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="2329.56,876.8944,2334.6273,882.0249,2341.3121,879.3208,2336.2449,874.1902,2329.56,876.8944" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2337.0951" y="876.2247">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="7503.5595" y="1509.3316">1</text><!--link urt_message_t to urt_osCondvar_t--><path d="M2342.49,879.5354 C2350.69,881.1544 2358.85,882.6064 2366.92,883.8594 C2393.86,888.0424 4304.32,882.4824 4329.92,891.8594 C4476.75,945.6394 4606.27,1084.4244 4667.86,1158.7194 " fill="none" id="urt_message_t-urt_osCondvar_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="2329.56,876.8574,2334.6272,881.9881,2341.3121,879.284,2336.2449,874.1533,2329.56,876.8574" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2337.1441" y="894.8265">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="4653.9453" y="1147.7449">1</text><!--link urt_subscriber_t to urt_subscriber_t--><path d="M1956.41,213.2694 C1971.06,221.4494 1979.42,231.6494 1979.42,243.8594 C1979.42,259.0394 1966.51,271.0994 1944.66,280.0494 " fill="none" id="urt_subscriber_t-urt_subscriber_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="1944.66,207.6694,1948.3571,213.8606,1955.4941,212.8291,1951.7969,206.6379,1944.66,207.6694" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1952.0462" y="203.9859">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="24" x="1952.1837" y="277.6099">0..1</text><!--link urt_subscriber_t to urt_topic_t--><path d="M1729.44,372.4094 C1760.24,390.1294 1791.99,408.2394 1822.85,425.6994 " fill="none" id="urt_subscriber_t-urt_topic_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="1718.13,365.8994,1721.332,372.3606,1728.5277,371.89,1725.3257,365.4287,1718.13,365.8994" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1722.0256" y="385.862">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="24" x="1784.4315" y="414.8721">0..1</text><!--link urt_topic_t to urt_subscriber_t--><path d="M1836.91,418.9994 C1806.49,401.4694 1774.92,383.4294 1744,365.8994 " fill="none" id="urt_topic_t-urt_subscriber_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="1848.5,425.6994,1845.3041,419.2351,1838.108,419.6989,1841.3038,426.1631,1848.5,425.6994" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1828.2372" y="414.8721">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="1734.015" y="385.862">0..*</text><!--link urt_subscriber_t to urt_osEventListener_t--><path d="M1957.64,362.3494 C1965.11,363.5894 1972.54,364.7594 1979.92,365.8594 C2657.86,466.7894 2836.61,387.1494 3520.92,425.8594 C4393.03,475.1894 6650.59,344.8394 7440.92,716.8594 C7739.01,857.1754 7834.39,1198.6344 7608.92,1438.8594 C7588.5,1460.6154 7369.88,1448.6744 7340.92,1455.8594 C7278.77,1471.2794 7212.91,1501.5164 7164.26,1526.8354 " fill="none" id="urt_subscriber_t-urt_osEventListener_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1944.59,360.1294,1949.8374,365.0756,1956.4213,362.1342,1951.174,357.188,1944.59,360.1294" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1951.975" y="359.0663">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="7167.4704" y="1515.8276">1</text><!--link urt_subscriber_t to urt_rtclass_t--><path d="M1513.47,379.0994 C1511.61,424.9594 1509.67,472.5694 1508.39,504.0594 " fill="none" id="urt_subscriber_t-urt_rtclass_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1514.01,365.8994,1509.7693,371.7317,1513.522,377.8894,1517.7627,372.0571,1514.01,365.8994" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1505.467" y="385.862">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1499.9393" y="493.1929">1</text><!--link urt_subscriber_t to urt_message_t--><path d="M1691.74,376.1294 C1705.17,391.6994 1717.24,408.3294 1726.92,425.8594 C1777.16,516.8094 1698.82,575.0794 1762.92,656.8594 C1792.61,694.7294 1834.17,722.6494 1878.1,743.1894 " fill="none" id="urt_subscriber_t-urt_message_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="1682.74,366.0594,1683.7561,373.1985,1690.7369,375.0064,1689.7208,367.8673,1682.74,366.0594" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1684.479" y="386.0318">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="24" x="1846.2965" y="738.1325">0..1</text><!--link urt_subscriber_t to urt_osTime_t--><path d="M1957.6,362.5694 C1965.09,363.7394 1972.53,364.8394 1979.92,365.8594 C2737.09,470.2994 4656.79,367.8594 5418.92,425.8594 C6380.85,499.0694 6740.94,223.4494 7569.92,716.8594 C7862.2,890.8224 7848.82,1392.8324 7839.07,1532.4474 " fill="none" id="urt_subscriber_t-urt_osTime_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1944.55,360.4694,1949.8357,365.3747,1956.3966,362.3822,1951.1109,357.477,1944.55,360.4694" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1951.9343" y="374.6699">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="7830.9239" y="1521.84">1</text><!--link urt_subscriber_t to urt_delay_t--><path d="M1080.51,364.8794 C1078.98,365.2094 1077.45,365.5394 1075.92,365.8594 C988.626,384.3094 737.107,358.2194 678.921,425.8594 C397.814,752.6394 630.634,1346.6954 708.096,1520.1124 " fill="none" id="urt_subscriber_t-urt_delay_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1093.28,362.1194,1086.5686,359.4818,1081.5526,364.6625,1088.264,367.3001,1093.28,362.1194" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1077.8956" y="361.0905">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="696.3237" y="1509.1229">2</text><!--link urt_subscriber_t to urt_status_t--><path d="M1093.34,362.4094 C1087.5,363.5894 1081.69,364.7394 1075.92,365.8594 C962.147,387.8594 652.877,359.4394 557.921,425.8594 C179.279,690.7094 17.8076,1092.7224 323.921,1438.8594 C344.39,1462.0054 434.543,1441.5364 461.921,1455.8594 C491.123,1471.1364 515.928,1498.5154 533.648,1522.4964 " fill="none" id="urt_subscriber_t-urt_status_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="536.651,1526.6214,534.5884,1516.9909,533.7084,1522.5789,528.1204,1521.699,536.651,1526.6214" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_subscriber_t to urt_topicid_t--><path d="M1093.39,362.7094 C1087.54,363.7994 1081.71,364.8494 1075.92,365.8594 C907.049,395.2394 445.989,325.6594 306.921,425.8594 C-31.5844,669.7694 240.178,1281.0434 349.545,1494.1634 " fill="none" id="urt_subscriber_t-urt_topicid_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="351.939,1498.8154,351.3762,1488.9826,349.6505,1494.3698,344.2633,1492.6442,351.939,1498.8154" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_publisher_t to urt_topic_t--><path d="M2293.44,317.1994 C2255.75,349.8594 2210.31,389.2394 2168.16,425.7594 " fill="none" id="urt_publisher_t-urt_topic_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="2303.35,308.6194,2296.1959,309.5246,2294.28,316.4765,2301.434,315.5713,2303.35,308.6194" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2287.3506" y="328.1538">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2168.3754" y="414.9359">1</text><!--link urt_publisher_t to urt_message_t--><path d="M2372.2,308.3994 C2363.71,416.6494 2345.07,627.9994 2326.92,656.8594 C2313.39,678.3694 2295.3,697.2394 2275.24,713.5994 " fill="none" id="urt_publisher_t-urt_message_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="2271.21,716.8394,2280.7332,714.3278,2275.1102,713.7107,2275.7273,708.0876,2271.21,716.8394" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_publisher_t to urt_osTime_t--><path d="M2756.46,250.0894 C4001.89,268.1394 7889.97,331.9194 7980.92,425.8594 C8137.51,587.5894 8072.7,1233.3074 7980.92,1438.8594 C7964.23,1476.2344 7930.9,1507.3334 7900.4,1529.7324 " fill="none" id="urt_publisher_t-urt_osTime_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="7896.31,1532.6974,7905.9466,1530.6635,7900.3612,1529.7669,7901.2578,1524.1815,7896.31,1532.6974" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_publisher_t to urt_delay_t--><path d="M2201.82,308.4394 C2133.49,330.5394 2053.93,352.9894 1979.92,365.8594 C1844.24,389.4494 837.394,326.6094 741.921,425.8594 C590.993,582.7594 690.7,1310.3464 722.283,1515.1094 " fill="none" id="urt_publisher_t-urt_delay_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="723.061,1520.1404,725.6383,1510.6347,722.2967,1515.1991,717.7323,1511.8575,723.061,1520.1404" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_publisher_t to urt_status_t--><path d="M2202.33,308.3994 C2133.9,330.5594 2054.12,353.0694 1979.92,365.8594 C1835.45,390.7594 782.952,343.1394 661.921,425.8594 C284.195,683.9994 349.484,1000.0414 478.921,1438.8594 C487.868,1469.1924 506.342,1499.1114 523.693,1522.5854 " fill="none" id="urt_publisher_t-urt_status_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="526.691,1526.5934,524.5009,1516.9911,523.6951,1522.5903,518.0959,1521.7845,526.691,1526.5934" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_topic_t to urt_topic_t--><path d="M2303.78,509.4194 C2318,517.2594 2326.42,527.9094 2326.42,541.3594 C2326.42,558.2394 2313.16,570.6994 2291.83,578.7494 " fill="none" id="urt_topic_t-urt_topic_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="2291.83,503.9694,2295.627,510.0999,2302.7463,508.9529,2298.9493,502.8224,2291.83,503.9694" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2299.5461" y="499.7016">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="24" x="2299.7836" y="576.7017">0..1</text><!--link urt_topic_t to urt_osMutex_t--><path d="M2304.45,643.5994 C2324.39,648.7994 2344.35,653.3194 2363.92,656.8594 C2920.83,757.5194 7046.14,497.3594 7451.92,891.8594 C7626.02,1061.1224 7565.72,1394.8864 7535.15,1519.9794 " fill="none" id="urt_topic_t-urt_osMutex_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="2291.7,640.1794,2296.4576,645.5984,2303.2896,643.291,2298.532,637.872,2291.7,640.1794" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2299.4122" y="655.4007">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="7528.3903" y="1509.3301">1</text><!--link urt_topic_t to urt_osEventSource_t--><path d="M2304.56,642.9794 C2324.47,648.3294 2344.4,653.0494 2363.92,656.8594 C2892.83,760.0494 3036.81,688.0694 3574.92,716.8594 C3913.33,734.9694 6387.26,645.4494 6619.92,891.8594 C6786.82,1068.6274 6783.86,1259.3404 6619.92,1438.8594 C6591.78,1469.6714 6473.54,1446.3254 6432.92,1455.8594 C6357.34,1473.5984 6275.23,1506.8674 6217.56,1532.7314 " fill="none" id="urt_topic_t-urt_osEventSource_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="2291.83,639.4794,2296.5556,644.9263,2303.4011,642.6591,2298.6754,637.2122,2291.83,639.4794" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2299.5461" y="654.6799">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="6222.3209" y="1521.8955">1</text><!--link urt_topic_t to urt_osTimer_t--><path d="M2304.59,642.8294 C2324.5,648.2094 2344.42,652.9894 2363.92,656.8594 C2596.2,702.9994 3210.33,623.3794 3427.92,716.8594 C3654.21,814.0804 3842.47,1054.8834 3915.89,1158.5804 " fill="none" id="urt_topic_t-urt_osTimer_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="2291.86,639.3094,2296.5798,644.7613,2303.4277,642.5014,2298.7078,637.0495,2291.86,639.3094" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2299.577" y="639.0595">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="3902.9141" y="1147.9446">1</text><!--link urt_topic_t to urt_message_t--><path d="M2056.87,669.6994 C2061.07,685.6294 2065.53,701.5794 2070.01,716.5694 " fill="none" id="urt_topic_t-urt_message_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="2053.56,656.9594,2051.1908,663.7702,2056.5665,668.5766,2058.9357,661.7658,2053.56,656.9594" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2046.4764" y="677.2926">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="2043.1076" y="705.7863">1..*</text><!--link urt_topic_t to urt_message_t--><path d="M2083.11,669.6994 C2087.34,685.6294 2091.3,701.5794 2094.73,716.5694 " fill="none" id="urt_topic_t-urt_message_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="2079.67,656.9594,2077.3718,663.7945,2082.7973,668.5447,2085.0954,661.7096,2079.67,656.9594" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2074.3407" y="677.2926">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2085.5965" y="705.7863">1</text><!--link urt_topic_t to urt_topicid_t--><path d="M1767.15,647.3694 C1753.65,650.9294 1740.19,654.1294 1726.92,656.8594 C1596.8,683.5794 637.789,635.3294 532.921,716.8594 C292.402,903.8554 343.537,1330.5024 374.921,1498.7664 " fill="none" id="urt_topic_t-urt_topicid_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1780.1,643.8394,1773.26,641.5557,1768.5213,646.9912,1775.3613,649.2749,1780.1,643.8394" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1764.3866" y="643.724">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="364.9616" y="1487.7541">1</text><!--link urt_topic_t to urt_osTime_t--><path d="M2291.65,640.4094 C2315.82,647.0094 2340.16,652.6794 2363.92,656.8594 C2884.19,748.4394 6599.08,617.5294 7117.92,716.8594 C7331.53,757.7594 7420.96,738.2394 7574.92,891.8594 C7761.42,1077.9344 7817.39,1411.8214 7831.63,1527.8184 " fill="none" id="urt_topic_t-urt_osTime_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="7832.24,1532.8454,7835.1301,1523.4301,7831.6395,1527.8816,7827.188,1524.3909,7832.24,1532.8454" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_topic_t to urt_status_t--><path d="M1780.06,643.6294 C1762.24,648.6794 1744.41,653.1694 1726.92,656.8594 C1512.35,702.1094 945.366,635.0094 741.921,716.8594 C630.471,761.6994 586.36,782.8294 535.921,891.8594 C435.673,1108.5594 511.373,1407.2404 547.027,1521.6594 " fill="none" id="urt_topic_t-urt_status_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="548.59,1526.6394,549.7121,1516.8546,547.0931,1521.8687,542.079,1519.2497,548.59,1526.6394" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_core_t to urt_topic_t--><path d="M980.075,314.0894 C1008.83,334.1594 1042.26,353.8794 1075.92,365.8594 C1349.67,463.2694 1443.58,361.4894 1726.92,425.8594 C1744.49,429.8494 1762.42,434.5994 1780.35,439.8394 " fill="none" id="urt_core_t-urt_topic_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="969.294,306.3894,971.8507,313.132,979.058,313.3654,976.5013,306.6227,969.294,306.3894" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="977.7567" y="326.1325">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="1749.4214" y="433.6678">0..*</text><!--link urt_core_t to urt_node_t--><path d="M978.968,314.3994 C1007.88,334.7294 1041.69,354.5194 1075.92,365.8594 C1340.12,453.3794 2050.51,393.3194 2326.92,425.8594 C2361.67,429.9494 2397.42,434.8594 2433.35,440.3094 " fill="none" id="urt_core_t-urt_node_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="968.136,306.5994,970.6647,313.3526,977.871,313.6157,975.3423,306.8625,968.136,306.5994" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="967.597" y="326.3654">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="23" x="2372.7449" y="429.4221">0..*</text><!--link urt_core_t to urt_status_t--><path d="M733.214,258.9494 C526.453,280.6094 187.171,330.0294 110.921,425.8594 C22.2604,537.2894 51.7099,1256.5464 252.921,1438.8594 C287.452,1470.1474 420.193,1435.1184 461.921,1455.8594 C491.656,1470.6394 516.619,1498.3084 534.289,1522.5664 " fill="none" id="urt_core_t-urt_status_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="537.282,1526.7394,535.2866,1517.0948,534.3677,1522.6765,528.786,1521.7576,537.282,1526.7394" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_core_t to urt_topicid_t--><path d="M733.21,256.3994 C513.973,275.7094 141.471,323.0594 57.9209,425.8594 C-24.1507,526.8394 1.6902,1345.6994 65.9209,1438.8594 C125.808,1525.7184 254.056,1554.5614 330.01,1564.1264 " fill="none" id="urt_core_t-urt_topicid_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="335.386,1564.7824,326.9369,1559.7215,330.4228,1564.1766,325.9677,1567.6626,335.386,1564.7824" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_nodeSetupCallback_t to urt_node_t--><path d="M2622.99,769.6094 C2659.94,739.2394 2723.68,690.3394 2783.92,645.6694 " fill="none" id="urt_nodeSetupCallback_t-urt_node_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="2788.25,642.4594,2778.6363,644.5989,2784.2312,645.4341,2783.396,651.029,2788.25,642.4594" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_node_t to urt_nodeSetupCallback_t--><path d="M2803.35,650.5094 C2746.34,693.8394 2683.02,740.3294 2640.53,769.6094 " fill="none" id="urt_node_t-urt_nodeSetupCallback_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="2813.92,642.4594,2806.723,642.91,2804.3709,649.7267,2811.5679,649.2761,2813.92,642.4594" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2797.2013" y="662.179">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2641.7308" y="758.821">1</text><!--link urt_nodeSetupCallback_t to urt_status_t--><path d="M2533.05,830.8824 C2491.22,850.1684 2433.08,873.6104 2378.92,883.8594 C2366.84,886.1464 616.882,883.4364 607.921,891.8594 C517.356,976.9884 545.527,1381.8334 558.216,1521.4194 " fill="none" id="urt_nodeSetupCallback_t-urt_status_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="558.698,1526.6714,561.8583,1517.3433,558.2408,1521.6923,553.8918,1518.0748,558.698,1526.6714" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_nodeLoopCallback_t to urt_node_t--><path d="M3093.41,769.6094 C3067.7,739.4794 3030.6,691.1194 2998.54,646.7394 " fill="none" id="urt_nodeLoopCallback_t-urt_node_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="2995.45,642.4594,2997.4742,652.098,2998.3764,646.5135,3003.9609,647.4157,2995.45,642.4594" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_node_t to urt_nodeLoopCallback_t--><path d="M3029.05,652.9394 C3061.13,695.5694 3093.18,740.8794 3110.95,769.6094 " fill="none" id="urt_node_t-urt_nodeLoopCallback_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="3021.13,642.4594,3021.5585,649.6577,3028.3679,652.0308,3027.9394,644.8325,3021.13,642.4594" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="3018.9807" y="662.179">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="3099.4499" y="758.821">1</text><!--link urt_nodeLoopCallback_t to urt_osEventMask_t--><path d="M3412.16,803.5094 C4239.15,810.3634 6564.21,834.6854 6619.92,891.8594 C6704.75,978.9174 6657.64,1323.3054 6619.92,1438.8594 C6606.75,1479.2174 6575.77,1517.4444 6552.75,1541.8644 " fill="none" id="urt_nodeLoopCallback_t-urt_osEventMask_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="6549.12,1545.6634,6558.2277,1541.9151,6552.5724,1542.0466,6552.4409,1536.3913,6549.12,1545.6634" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_nodeLoopCallback_t to urt_status_t--><path d="M3038.09,830.9214 C2977.42,850.2254 2893.72,873.6724 2817.92,883.8594 C2803.63,885.7794 753.292,882.9974 741.921,891.8594 C543.989,1046.1244 669.101,1197.0714 601.921,1438.8594 C594.233,1466.5284 585.026,1497.3174 577.489,1521.9834 " fill="none" id="urt_nodeLoopCallback_t-urt_status_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="576.004,1526.8324,582.4647,1519.3987,577.4685,1522.0517,574.8155,1517.0555,576.004,1526.8324" style="stroke: #A80036; stroke-width: 1.0;"/><!--link urt_node_t to urt_node_t--><path d="M3498.34,517.5094 C3512.81,524.1294 3520.92,532.0694 3520.92,541.3594 C3520.92,553.0094 3508.15,562.5594 3486.06,569.9994 " fill="none" id="urt_node_t-urt_node_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="3486.06,512.7194,3490.1949,518.6273,3497.2386,517.0827,3493.1038,511.1748,3486.06,512.7194" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="3493.8807" y="509.2814">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="24" x="3493.9932" y="582.5778">0..1</text><!--link urt_node_t to urt_osThread_t--><path d="M3498.98,599.1094 C4032.47,659.1594 4789.54,762.9994 5057.92,891.8594 C5104.27,914.1134 5148.99,944.4144 5190.09,977.4794 " fill="none" id="urt_node_t-urt_osThread_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="3486.02,597.6494,3491.5337,602.2969,3497.9443,598.9948,3492.4306,594.3473,3486.02,597.6494" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="3493.8402" y="595.4057">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="5174.7784" y="966.7275">1</text><!--link urt_node_t to urt_osEventMask_t--><path d="M3499.29,552.1994 C4559.46,572.6794 6770.13,625.7094 7108.92,716.8594 C7270.37,760.2994 7355.46,748.7594 7441.92,891.8594 C7567.64,1099.9434 7612.05,1265.1924 7441.92,1438.8594 C7409.84,1471.6074 6658.12,1435.7524 6616.92,1455.8594 C6578.27,1474.7224 6550.38,1518.3634 6536.01,1545.5564 " fill="none" id="urt_node_t-urt_osEventMask_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="3486.09,551.9394,3492.0096,556.0574,3498.0876,552.177,3492.168,548.0589,3486.09,551.9394" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="3493.9111" y="549.0529">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="6529.7382" y="1534.8875">1</text><!--link urt_node_t to urt_osEventWaitType_t--><path d="M3499.35,545.7994 C4599.4,555.2894 6950.55,590.2794 7297.92,716.8594 C7613.84,831.9764 7758.77,1198.2274 7523.92,1438.8594 C7496.79,1466.6584 6860.3,1439.8224 6824.92,1455.8594 C6792.26,1470.6644 6765.21,1501.1044 6746.89,1526.6644 " fill="none" id="urt_node_t-urt_osEventWaitType_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="3486.07,545.6894,3492.0346,549.742,3498.0695,545.7949,3492.1049,541.7423,3486.07,545.6894" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="3493.8909" y="557.926">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="6742.2542" y="1515.9471">1</text><!--link urt_node_t to urt_osThreadTerminateSignal_t--><path d="M3485.95,545.1094 C4613.19,556.4794 7095.47,613.2394 7352.92,891.8594 C7517.91,1070.4134 7523.85,1265.9834 7352.92,1438.8594 C7323.6,1468.5104 5891.61,1443.0734 5851.92,1455.8594 C5806.5,1470.4904 5762.7,1502.8134 5732.28,1529.1564 " fill="none" id="urt_node_t-urt_osThreadTerminateSignal_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="5728.27,1532.6664,5737.6807,1529.7615,5732.0369,1529.3784,5732.42,1523.7345,5728.27,1532.6664" style="stroke: #A80036; stroke-width: 1.0;"/><!--
2
@startuml
3

  
4
title **µRtWare**\nOverview\n
5

  
6

  
7

  
8
package "primitives" {
9

  
10
  class urt_delay_t <<(T,lightblue)>> {
11
    .. either ..
12
    uint32_t
13
    .. or ..
14
    uint64_t
15
  }
16

  
17
  enum urt_status_t {
18
    URT_STATUS_OK = 0
19
    URT_STATUS_WARNING = 1
20
    URT_STATUS_ERROR = -1
21
  }
22
  
23
  class urt_topicid_t <<(T,lightblue)>> {
24
    uin8_t
25
    .. or ..
26
    uint16_t
27
    .. or ..
28
    uint32_t
29
    .. or ..
30
    uint64_t
31
  }
32

  
33
} 
34

  
35

  
36

  
37
package "interfaces" {
38

  
39
  class urt_osTime_t <<(T,lightblue)>> {
40
    + urtTime2Us (t : urt_osTime_t*) : uint64_t
41
    + urtTimeNow (void) : urt_osTime_t
42
  }
43

  
44
  class urt_osMutex_t <<(T,lightblue)>> {
45
    + urtMutexInit (mutex : urt_osmutex_t*) : void
46
    + urtMutexLock (mutex : urt_osmutex_t*) : void
47
    + urtMutexTryLock (mutex : urt_osmutex_t*) : bool
48
    + urtMutexUnlock (mutex : urt_osmutex_t*) : void
49
  }
50

  
51
  package "condition variable" {
52

  
53
    enum urt_condvarStatus_t {
54
      + URT_CONDVAR_STATUS_SIGNAL = 0
55
      + URT_CONDVAR_STATUS_BROADCAST = 1
56
      + URT_CONDVAR_STATUS_TIMEOUT = 2
57
    }
58

  
59
    class urt_osCondvar_t <<(T,lightblue)>> {
60
      + urtCondvarInit (condvar : urt_osCondvar_t*) : void
61
      + urtConvarSignal (condvar : urt_osCondvar_t*) : void
62
      + urtCondvarBroadcast (condvar : urt_osCondvar_t*) : void
63
      + urtCondvarWait (condvar : urt_osCondvar_t*, mutex : urt_osMutex_t*, timeout : urt_delay_t) : urt_condvarStatus_t
64
    }
65
    urt_osCondvar_t ..> urt_osMutex_t
66
    urt_osCondvar_t ..> urt_delay_t
67
    urt_osCondvar_t ..> urt_condvarStatus_t
68

  
69
  } 
70

  
71
  package "timer" {
72

  
73
    class urt_osTimerCallback_t <<(T,lightblue)>> {
74
      urt_osTimerCallback_t (parameter : void*) : void
75
    }
76
  
77
    class urt_osTimer_t <<(T,lightblue)>> {
78
      + urtTimerInit (timer : urt_osTimer_t*) : void
79
      + urtTimerSet (timer : urt_osTimer_t*, delay : urt_delay_t, callback : urt_osTimerCallback_t*, parameter : void*) : urt_status_t
80
      + urtTimerReset (timer : urt_osTimer_t*) : urt_status_t
81
      + urtTimerIsArmed (timer : urt_timer_t*) : bool
82
    }
83
    urt_osTimer_t ..> urt_delay_t
84
    urt_osTimer_t ..> urt_status_t
85
    urt_osTimer_t ..> urt_osTimerCallback_t
86

  
87
  } 
88

  
89
  package "thread" {
90

  
91
    class urt_osThreadPrio_t <<(T,lightblue)>>
92

  
93
    class urt_osThreadFunction_t <<(T,lightblue)>> {
94
      urt_osThreadFunction_t (arg : void*) : void
95
    }
96

  
97
    enum urt_osThreadTerminateSignal_t {
98
      URT_THREAD_TERMINATE_REQUEST = 15
99
      URT_THREAD_TERMINATE_KILL = 9
100
    }
101

  
102
    class urt_osThread_t <<(T,lightblue)>> {
103
      + URT_THREAD_PRIO_LOW_MIN : urt_osThreadPrio_t
104
      + URT_THREAD_PRIO_LOW_MAX : urt_osThreadPrio_t
105
      + URT_THREAD_PRIO_NORMAL_MIN : urt_osThreadPrio_t
106
      + URT_THREAD_PRIO_NORMAL_MAX : urt_osThreadPrio_t
107
      + URT_THREAD_PRIO_HIGH_MIN : urt_osThreadPrio_t
108
      + URT_THREAD_PRIO_HIGH_MAX : urt_osThreadPrio_t
109
      + URT_THREAD_PRIO_RT_MIN : urt_osThreadPrio_t
110
      + URT_THREAD_PRIO_RT_MAX : urt_osThreadPrio_t
111
      ..
112
      + URT_THREAD_MAX_SLEEP : float
113
      + URT_THREAD_MAX_SSLEP : unsigned int
114
      + URT_THREAD_MAX_MSLEEP : unsigned int
115
      + URT_THREAD_MAX_USLEEP : unsigned int
116
      __
117
      + URT_THREAD_WORKING_AREA (var : varname, stacksize : size_t)
118
      ..
119
      + urtThreadInit (wa : void*, wasize : size_t, func : urt_osThreadFunction_t*, arg : void*) : urt_osThread_t*
120
      + urtThreadStart (thread : urt_osThread_t*, prio : urt_osThreadPrio_t, arg : void*) : void
121
      + urtThreadYield (void) : void
122
      + urtThreadGetPriority (thread : urt_osThread_t*) : urt_osThreadPrio_t
123
      + urtThreadSetPriority (thread : urt_osThread_t*, prio : urt_osThreadPrio_t) : void
124
      + urtThreadGetChildren (thread : urt_osThread_t*) : urt_osThread_t*
125
      + urtThreadGetParent (thread : urt_osThread_t*) : urt_osThread_t*
126
      + urtThreadSuspend (void) : void
127
      + urtThreadIsSuspended (thread : urt_osThread_t*) : bool
128
      + urtThreadResume (thread : urt_osThread_t*) : urt_status_t
129
      + urtThreadSleep (seconds : float) : void
130
      + urtThreadSSleep (seconds : usnigned int) : void
131
      + urtThreadMSleep (milliseconds : unsigned int) : void
132
      + urtThreadUSleep (microseconds : unsigned int) : void
133
      + urtThreadSleepUntil (time : urt_osTime_t) : void
134
      + urtThreadExit (void) : void
135
      + urtThreadTerminate (thread : urt_osThread_t*, sig : urt_osThreadTerminateSignal_t) : void
136
      + urtThreadJoin (thread : urt_osThread_t*) : void
137
    }
138
    urt_osThread_t ..> urt_osThreadPrio_t
139
    urt_osThread_t ..> urt_osThreadFunction_t
140
    urt_osThread_t ..> urt_osTime_t
141
    urt_osThread_t ..> urt_osThreadTerminateSignal_t
142

  
143
  } 
144

  
145
  package "events" {
146

  
147
    class urt_osEventMask_t <<(T,lightblue)>>
148

  
149
    class urt_osEventFlags_t <<(T,lightblue)>>
150

  
151
    enum urt_osEventWaitType_t {
152
      URT_EVENT_WAIT_ONE = 0
153
      URT_EVENT_WAIT_ANY = 1
154
      URT_EVENT_WAIT_ALL = 2
155
    }
156

  
157
    class urt_osEventListener_t <<(T,lightblue)>> {
158
      + urtEventListenerInit (listener : urt_osEventListener_t*) : void
159
      + urtEventListenerGetFlags (listener : urt_osEventListener_t*) : urt_osEventFlags_t
160
      + urtEventListenerClearFlags (listener : urt_osEventListener_t*) : urt_osEventFlags_t
161
    }
162
    urt_osEventListener_t ..> urt_osEventFlags_t
163

  
164
    class urt_osEventSource_t <<(T,lightblue)>> {
165
      + urtEventSourceInit (source : urt_osEventSource_t*) : void
166
      + urtEventSourceBroadcast (source : urt_osEventSource_t*, flags : urt_osEventFlags_t) : void
167
    }
168
    urt_osEventSource_t ..> urt_osEventFlags_t
169

  
170
    class urt_events <<(F,white)>> {
171
      + urtEventRegister (source : urt_osEventSource_t*, listener : urt_osEventListener_t*, mask : urt_osEventMask_t) : urt_status_t
172
      + urtEventUnregister (source _ urt_osEventSource_t*, listener : urt_osEventListener_t*) : urt_status_t
173
      + urtEventWait (type : urt_osEventWaitType_t, timeout : urt_delay_t) : urt_osEventMask_t
174
    }
175
    urt_events ..> urt_osEventSource_t
176
    urt_events ..> urt_osEventListener_t
177
    urt_events ..> urt_osEventMask_t
178
    urt_events ..> urt_status_t
179
    urt_events ..> urt_osEventWaitType_t
180
    urt_events ..> urt_delay_t
181

  
182
  } 
183

  
184
} 
185

  
186
package "middleware" {
187

  
188
  package "real-time class" {
189

  
190
    class urt_rtclass_t <<(S,lightgrey)>> {
191
      + class : urt_rtclasstype_t
192
      + params : urt_rtclassparams_t
193
    }
194
    urt_rtclass_t "1" *- - "1" urt_rtclasstype_t
195
    urt_rtclass_t "1" *- - "1" urt_rtclassparams_t
196

  
197
    enum urt_rtclasstype_t {
198
      URT_RTCLASS_HARD = 0
199
      URT_RTCLASS_FIRM = 1
200
      URT_RTCLASS_SOFT = 2
201
      URT_RTCLASS_NONE = 3
202
    }
203

  
204
    class urt_rtclassparams_t <<(U,lightgreen)>> {
205
      + hrt : urt_hrtparams_t
206
      + frt : urt_frtparams_t
207
      + srt : urt_srtparans_t
208
      + nrt : urt_nrtparams_t
209
    }
210
    urt_rtclassparams_t "1" *- - "0..1" urt_hrtparams_t
211
    urt_rtclassparams_t "1" *- - "0..1" urt_frtparams_t
212
    urt_rtclassparams_t "1" *- - "0..1" urt_srtparams_t
213
    urt_rtclassparams_t "1" *- - "0..1" urt_nrtparams_t
214

  
215
    class urt_hrtparams_t <<(S,lightgrey)>> {
216
      + deadlineOffset : urt_delay_t
217
      + expectedRate : urt_delay_t
218
      + qosTimer : urt_osTimer_t
219
    }
220
    urt_hrtparams_t ..> urt_delay_t
221
    urt_hrtparams_t "1" *- - "1" urt_osTimer_t
222

  
223
    class urt_frtparams_t <<(S,lightgrey)>> {
224
      + deadlineOffset : urt_delay_t
225
      + expectedRate : urt_delay_t
226
      + qosTimer : urt_osTimer_t
227
      + callback : urt_osTimerCallback_t
228
      + cbparams : void*
229
    }
230
    urt_frtparams_t ..> urt_delay_t
231
    urt_frtparams_t "1" *- - "1" urt_osTimer_t
232
    urt_frtparams_t "1" *- - "1" urt_osTimerCallback_t
233

  
234
    class urt_srtparams_t <<(S,lightgrey)>> {
235
      + *usefulness (dt : urt_delay_t, params : void*) : float
236
      + params : void*
237
    }
238
    urt_srtparams_t ..> urt_delay_t
239

  
240
    class urt_nrtparams_t <<(S,lightgrey)>> {
241
    }
242

  
243
  } 
244

  
245

  
246

  
247
  class urt_message_t <<(S,lightgrey)>> {
248
    + next : urt_message_t*
249
    + payload : void*
250
    + originTime : urt_osTime_t
251
    + lock : urt_osMutex_t
252
    + numHrtConsumersLeft : unsigned int
253
    + hrtConsumersLeft : urt_osCondvar_t
254
    - - evaluation data - -
255
    + numConsumersLeft : unsigned int
256
    __
257
    + urtMessageInit (message : urt_message_t*, payload : void*) : urt_status_t
258
  }
259
  urt_message_t "1" o- - "0..1" urt_message_t
260
  urt_message_t "1" *- - "1" urt_osTime_t
261
  urt_message_t "1" *- - "1" urt_osMutex_t
262
  urt_message_t "1" *- - "1" urt_osCondvar_t
263

  
264
  class urt_subscriber_t <<(S,lightgrey)>> {
265
    + next : urt_subscriber_t*
266
    + topic : urt_topic_t*
267
    + evtListener : urt_osEventListener_t
268
    + rtclass : urt_rtclass_t
269
    + lastMessage : urt_message_t*
270
    + lastMessageTime : urt_osTime_t
271
    - - evaluation data - -
272
    + minLatency : urt_delay_t
273
    + maxLatency : urt_delay_t
274
    + sumLatencies : uint64_t
275
    + numMessagesReceived : unsigned int
276
    __
277
    + urtSubscriberInit (subscriber : urt_subscriber_t*) : urt_status_t
278
    + urtSubscriberSubscribe (subscriber : urt_subscriber_t*, topic : urt_topic_t*, rtclass : urt_rtclass_t*, messages : urt_messages_t*) : urt_status_t
279
    + urtSubscriberUnsubscribe (subscriber : urt_subscriber_t*) : urt_status_t
280
    + urtSubscriberFetchMessage (subscriber : urt_subscriber_t*, latest : bool) : urt_status_t
281
  }
282
  urt_subscriber_t "1" o- - "0..1" urt_subscriber_t
283
  urt_subscriber_t "1" o- - "0..1" urt_topic_t
284
  urt_subscriber_t "1" *- - "1" urt_osEventListener_t
285
  urt_subscriber_t "1" *- - "1" urt_rtclass_t
286
  urt_subscriber_t "1" o- - "0..1" urt_message_t
287
  urt_subscriber_t "1" *- - "1" urt_osTime_t
288
  urt_subscriber_t "1" *- - "2" urt_delay_t
289
  urt_subscriber_t ..> urt_status_t
290
  urt_subscriber_t ..> urt_topicid_t
291

  
292
  class urt_publisher_t <<(S,lightgrey)>> {
293
    + topic : urt_topic_t*
294
    - - evaluation data - -
295
    + publishAttempts : unsigned int
296
    + publishFails : unsigned int
297
    __
298
    + urtPublisherInit (publisher : urt_publisher_t*, topic : urt_topic_t*, messages : urt_message_t*) : urt_status_t
299
    + urtPublisherPublish (publisher : urt_publisher_t*, payload : void*, n : size_t, t : urt_osTime_t, timeout : urt_delay_t) : urt_status_t
300
  }
301
  urt_publisher_t "1" o- - "1" urt_topic_t
302
  urt_publisher_t ..> urt_message_t
303
  urt_publisher_t ..> urt_osTime_t
304
  urt_publisher_t ..> urt_delay_t
305
  urt_publisher_t ..> urt_status_t
306

  
307
  class urt_topic_t <<(S,lightgrey)>> {
308
    + next : urt_topic_t*
309
    + mutex : urt_osMutex_t
310
    + evtSource : urt_osEventSource_t
311
    + numHrtSubscribers : unsigned int
312
    + hrtSubscribers : urt_subscriber_t*
313
    + qosTimer : urt_osTimer_t
314
    + mandatoryMessage : urt_message_t
315
    + latestMessage : urt_message_t*
316
    + id : urt_topicid_t
317
    - - evaluation data - -
318
    + numDiscardedMessages : unsigned int
319
    + numSubscribers : unsigned int
320
    __
321
    + urtTopicInit (topic : urt_topic_t*, id : urt_topicid_t) : urt_status_t
322
    + urtTopicContributeMessages (topic : urt_topic_t*, messages : urt_message_t*) : void
323
  }
324
  urt_topic_t "1" o- - "0..1" urt_topic_t
325
  urt_topic_t "1" *- - "1" urt_osMutex_t
326
  urt_topic_t "1" *- - "1" urt_osEventSource_t
327
  urt_topic_t "1" o- - "0..*" urt_subscriber_t
328
  urt_topic_t "1" *- - "1" urt_osTimer_t
329
  urt_topic_t "1" o- - "1..*" urt_message_t
330
  urt_topic_t "1" *- - "1" urt_message_t
331
  urt_topic_t "1" *- - "1" urt_topicid_t
332
  urt_topic_t ..> urt_osTime_t
333
  urt_topic_t ..> urt_status_t
334

  
335
  class urt_core_t <<(S,lightgrey)>> {
336
    - {static} _nodes : urt_node_t*
337
    - {static} _topics : urt_topic_t*
338
    __
339
    + urtCoreInit (void) : urt_status_t
340
    + urtCoreStartAll (void) : urt_status_t
341
    + urtCoreStopAll (void) : urt_status_t
342
    + urtCoreRetrieveTopic (id : urt_topicid_t) : urt_topic_t*
343
  }
344
  urt_core_t "1" o- - "0..*" urt_topic_t
345
  urt_core_t "1" o- - "0..*" urt_node_t
346
  urt_core_t ..> urt_status_t
347
  urt_core_t ..> urt_topicid_t
348

  
349
  package "node" {
350

  
351
    class urt_nodeSetupCallback_t <<(T,lightblue)>> {
352
      urt_nodeSetupCallback_t (node : urt_node_t*, arg : void*) : urt_status_t
353
    }
354
    urt_nodeSetupCallback_t ..> urt_node_t
355
    urt_nodeSetupCallback_t ..> urt_status_t
356

  
357
    class urt_nodeLoopCallback_t <<(T,lightblue)>> {
358
      urt_nodeLoopCallback_t (node : urt_node_t*, events : urt_osEventMask_t, arg : void*) : urt_status_t
359
    }
360
    urt_nodeLoopCallback_t ..> urt_node_t
361
    urt_nodeLoopCallback_t ..> urt_osEventMask_t
362
    urt_nodeLoopCallback_t ..> urt_status_t
363

  
364
    class urt_node_t <<(S,lightgrey)>> {
365
      + next : urt_node_t*
366
      + thread : urt_osThread_t*
367
      + setupcallback : urt_nodeSetupCallback_t*
368
      + setupparams : void*
369
      + loopcallback : urt_nodeLoopCallback_t*
370
      + loopparams : void*
371
      + waitmask : urt_osEventMask_t
372
      + waittype : urt_osEventWaitType_t
373
      __
374
      - {static} _main : urt_osThreadFunction_t
375
      + urtNodeInit (node : urt_node_t*, stacksize : size_t, setupcallback : urt_nodeSetupCallback_t*, setupparams : void*, loopcallback : urt_nodeLoopCallback_t*, loopparams : void*) : urt_status_t
376
      + urtNodeTerminateRecusively (node : urt_node_t*, sig : urt_osThreadTerminateSignal_t) : void
377
      + urtNodeJoinRecursively (node : urt_node_t*) : void
378
    }
379
    urt_node_t "1" o- - "0..1" urt_node_t
380
    urt_node_t "1" o- - "1" urt_osThread_t
381
    urt_node_t "1" o- - "1" urt_nodeSetupCallback_t
382
    urt_node_t "1" o- - "1" urt_nodeLoopCallback_t
383
    urt_node_t "1" *- - "1" urt_osEventMask_t
384
    urt_node_t "1" *- - "1" urt_osEventWaitType_t
385
    urt_node_t ..> urt_osThreadTerminateSignal_t
386

  
387
  } 
388

  
389
} 
390

  
391
@enduml
392

  
393
PlantUML version 1.2018.11(Sat Sep 22 18:43:53 CEST 2018)
394
(GPL source distribution)
395
Java Runtime: OpenJDK Runtime Environment
396
JVM: OpenJDK 64-Bit Server VM
397
Java Version: 1.8.0_181-8u181-b13-0ubuntu0.16.04.1-b13
398
Operating System: Linux
399
OS Version: 4.15.0-36-generic
400
Default Encoding: UTF-8
401
Language: en
402
Country: US
403
--></g></svg>
doc/classdiagrams/overview.uml
1
/'
2
µRtWare is a lightweight publish/subscribe middleware for real-time
3
applications. It was developed as part of the software habitat for the
4
Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
5

  
6
Copyright (C) 2018..2018  Thomas Schöpping et al.
7

  
8
This program is free software: you can redistribute it and/or modify
9
it under the terms of the GNU General Public License as published by
10
the Free Software Foundation, either version 3 of the License, or
11
(at your option) any later version.
12

  
13
This program is distributed in the hope that it will be useful,
14
but WITHOUT ANY WARRANTY; without even the implied warranty of
15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
GNU General Public License for more details.
17

  
18
You should have received a copy of the GNU General Public License
19
along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
'/
21

  
22
@startuml
23

  
24
title **µRtWare**\nOverview\n
25

  
26

  
27

  
28
package "primitives" {
29

  
30
  /' Temporal delay in microseconds. '/
31
  class urt_delay_t <<(T,lightblue)>> {
32
    .. either ..
33
    uint32_t
34
    .. or ..
35
    uint64_t
36
  }
37

  
38
  /' Well defined error codes. '/
39
  enum urt_status_t {
40
    URT_STATUS_OK = 0
41
    URT_STATUS_WARNING = 1
42
    URT_STATUS_ERROR = -1
43
  }
44
  
45
  /' Topic ID type. '/
46
  class urt_topicid_t <<(T,lightblue)>> {
47
    'configurable
48
    uin8_t
49
    .. or ..
50
    uint16_t
51
    .. or ..
52
    uint32_t
53
    .. or ..
54
    uint64_t
55
  }
56

  
57
} /' package "primitives" '/
58

  
59

  
60

  
61
package "interfaces" {
62

  
63
  /' OS time type with arbitrary resolution. '/
64
  class urt_osTime_t <<(T,lightblue)>> {
65
      'Converts an OS time to 64 bit microsecond precise value.
66
    + urtTime2Us (t : urt_osTime_t*) : uint64_t
67
      'Retrieves the current time.
68
    + urtTimeNow (void) : urt_osTime_t
69
  }
70

  
71
  /' OS mutex lock interface. '/
72
  class urt_osMutex_t <<(T,lightblue)>> {
73
      'Initializes a urt_osMutex_t object.
74
    + urtMutexInit (mutex : urt_osmutex_t*) : void
75
      'Block the thread until the mutex could be locked.
76
    + urtMutexLock (mutex : urt_osmutex_t*) : void
77
      'Tries to lock the mutex, but does not block but immediately returns an indicator.
78
    + urtMutexTryLock (mutex : urt_osmutex_t*) : bool
79
      'Unlocks a previously locked mutex.
80
    + urtMutexUnlock (mutex : urt_osmutex_t*) : void
81
  }
82

  
83
  package "condition variable" {
84

  
85
    /' Return type for the wait function on condition variables. '/
86
    enum urt_condvarStatus_t {
87
        'The condition variable has been signaled.
88
      + URT_CONDVAR_STATUS_SIGNAL = 0
89
        'The condition variable has been broadcasted.
90
      + URT_CONDVAR_STATUS_BROADCAST = 1
91
        'The wait function timed out.
92
      + URT_CONDVAR_STATUS_TIMEOUT = 2
93
    }
94

  
95
    /' Condition variable interface. '/
96
    class urt_osCondvar_t <<(T,lightblue)>> {
97
        'Initializes a urt_osCondvar_t object.
98
      + urtCondvarInit (condvar : urt_osCondvar_t*) : void
99
        'Signals one thread that is waiting for the condition variable.
100
      + urtConvarSignal (condvar : urt_osCondvar_t*) : void
101
        'Signals all threads that are waiting for the condition variable.
102
      + urtCondvarBroadcast (condvar : urt_osCondvar_t*) : void
103
        'Waits for the condition variable.
104
      + urtCondvarWait (condvar : urt_osCondvar_t*, mutex : urt_osMutex_t*, timeout : urt_delay_t) : urt_condvarStatus_t
105
    }
106
    urt_osCondvar_t ..> urt_osMutex_t
107
    urt_osCondvar_t ..> urt_delay_t
108
    urt_osCondvar_t ..> urt_condvarStatus_t
109

  
110
  } /' package "condition variable" '/
111

  
112
  package "timer" {
113

  
114
    /' Timer callback definition. '/
115
    class urt_osTimerCallback_t <<(T,lightblue)>> {
116
      urt_osTimerCallback_t (parameter : void*) : void
117
    }
118
  
119
    /' OS timer interface. '/
120
    class urt_osTimer_t <<(T,lightblue)>> {
121
        'Initializes an urt_osTimer_t object.
122
      + urtTimerInit (timer : urt_osTimer_t*) : void
123
        'Sets the timer to a specified delay with specified callback and arguments.
124
      + urtTimerSet (timer : urt_osTimer_t*, delay : urt_delay_t, callback : urt_osTimerCallback_t*, parameter : void*) : urt_status_t
125
        'Resets the timer.
126
      + urtTimerReset (timer : urt_osTimer_t*) : urt_status_t
127
        'Check whether the timer is already armed.
128
      + urtTimerIsArmed (timer : urt_timer_t*) : bool
129
    }
130
    urt_osTimer_t ..> urt_delay_t
131
    urt_osTimer_t ..> urt_status_t
132
    urt_osTimer_t ..> urt_osTimerCallback_t
133

  
134
  } /' package "timer" '/
135

  
136
  package "thread" {
137

  
138
    /' Thread priority type. '/
139
    class urt_osThreadPrio_t <<(T,lightblue)>>
140

  
141
    /' Thread main function type. '/
142
    class urt_osThreadFunction_t <<(T,lightblue)>> {
143
      urt_osThreadFunction_t (arg : void*) : void
144
    }
145

  
146
    /' Thread terminate signals. '/
147
    enum urt_osThreadTerminateSignal_t {
148
      'Signal to request termination asap.
149
      URT_THREAD_TERMINATE_REQUEST = 15
150
      'Signal to kill a thread immediately.
151
      URT_THREAD_TERMINATE_KILL = 9
152
    }
153

  
154
    /' OS thread interface. '/
155
    class urt_osThread_t <<(T,lightblue)>> {
156
        'Minimum priority for low priority threads.
157
      + URT_THREAD_PRIO_LOW_MIN : urt_osThreadPrio_t
158
        'Maximum priority for low priority threads.
159
      + URT_THREAD_PRIO_LOW_MAX : urt_osThreadPrio_t
160
        'Minimum priority for normal priority threads.
161
      + URT_THREAD_PRIO_NORMAL_MIN : urt_osThreadPrio_t
162
        'Maximum priority for normal priority threads.
163
      + URT_THREAD_PRIO_NORMAL_MAX : urt_osThreadPrio_t
164
        'Minimum priority for high priority threads.
165
      + URT_THREAD_PRIO_HIGH_MIN : urt_osThreadPrio_t
166
        'Maximum priority for high priority threads.
167
      + URT_THREAD_PRIO_HIGH_MAX : urt_osThreadPrio_t
168
        'Minimum priority for real-time threads.
169
      + URT_THREAD_PRIO_RT_MIN : urt_osThreadPrio_t
170
        'Maximum priority for real-time threads.
171
      + URT_THREAD_PRIO_RT_MAX : urt_osThreadPrio_t
172
      ..
173
        'Maximum sleep interval in seconds (as float).
174
      + URT_THREAD_MAX_SLEEP : float
175
        'Maximum sleep interval in seconds.
176
      + URT_THREAD_MAX_SSLEP : unsigned int
177
        'Maximum sleep interval in milliseconds.
178
      + URT_THREAD_MAX_MSLEEP : unsigned int
179
        'Maximum sleep interval in microseconds.
180
      + URT_THREAD_MAX_USLEEP : unsigned int
181
      __
182
        'Macro to setup working area as static variable (handles alignment if required).
183
      + URT_THREAD_WORKING_AREA (var : varname, stacksize : size_t)
184
      ..
185
        'Initializes an urt_osThread_t object.
186
      + urtThreadInit (wa : void*, wasize : size_t, func : urt_osThreadFunction_t*, arg : void*) : urt_osThread_t*
187
        'Starts a thread.
188
      + urtThreadStart (thread : urt_osThread_t*, prio : urt_osThreadPrio_t, arg : void*) : void
189
        'The calling threads yields.
190
      + urtThreadYield (void) : void
191
        'Retrieves the priority of a thread.
192
      + urtThreadGetPriority (thread : urt_osThread_t*) : urt_osThreadPrio_t
193
        'Sets the priority of a thread.
194
      + urtThreadSetPriority (thread : urt_osThread_t*, prio : urt_osThreadPrio_t) : void
195
        'Retrieves the first thread in the list of children.
196
      + urtThreadGetChildren (thread : urt_osThread_t*) : urt_osThread_t*
197
        'Retrieves the parent thread.
198
      + urtThreadGetParent (thread : urt_osThread_t*) : urt_osThread_t*
199
        'The calling threads suspends execution until it is woken up by calling urtTheadResume().
200
      + urtThreadSuspend (void) : void
201
        'Retrieves whether a  thread is currently suspended.
202
      + urtThreadIsSuspended (thread : urt_osThread_t*) : bool
203
        'Wakes a suspended thread.
204
      + urtThreadResume (thread : urt_osThread_t*) : urt_status_t
205
        'Suspends the calling thread for the specified time.
206
      + urtThreadSleep (seconds : float) : void
207
        'Suspends the calling thread for the specified time.
208
      + urtThreadSSleep (seconds : usnigned int) : void
209
        'Suspends the calling thread for the specified time.
210
      + urtThreadMSleep (milliseconds : unsigned int) : void
211
        'Suspends the calling thread for the specified time.
212
      + urtThreadUSleep (microseconds : unsigned int) : void
213
        'Suspends the calling thread until the specified time.
214
      + urtThreadSleepUntil (time : urt_osTime_t) : void
215
        'The calling thread exits execution (terminates).
216
      + urtThreadExit (void) : void
217
        'Terminates a specified thread.
218
      + urtThreadTerminate (thread : urt_osThread_t*, sig : urt_osThreadTerminateSignal_t) : void
219
        'Waits until the specified thread terminates.
220
      + urtThreadJoin (thread : urt_osThread_t*) : void
221
    }
222
    urt_osThread_t ..> urt_osThreadPrio_t
223
    urt_osThread_t ..> urt_osThreadFunction_t
224
    urt_osThread_t ..> urt_osTime_t
225
    urt_osThread_t ..> urt_osThreadTerminateSignal_t
226

  
227
  } /' package "thread" '/
228

  
229
  package "events" {
230

  
231
    /' OS event mask type. '/
232
    class urt_osEventMask_t <<(T,lightblue)>>
233

  
234
    /' OS event flag type. '/
235
    class urt_osEventFlags_t <<(T,lightblue)>>
236

  
237
    enum urt_osEventWaitType_t {
238
      URT_EVENT_WAIT_ONE = 0
239
      URT_EVENT_WAIT_ANY = 1
240
      URT_EVENT_WAIT_ALL = 2
241
    }
242

  
243
    /' OS event listener interface. '/
244
    class urt_osEventListener_t <<(T,lightblue)>> {
245
        'Initializes an urt_osEventListener_t object.
246
      + urtEventListenerInit (listener : urt_osEventListener_t*) : void
247
        'Retrieves the flags of the event listener.
248
      + urtEventListenerGetFlags (listener : urt_osEventListener_t*) : urt_osEventFlags_t
249
        'Retrieves and clears the flags of the event listener.
250
      + urtEventListenerClearFlags (listener : urt_osEventListener_t*) : urt_osEventFlags_t
251
    }
252
    urt_osEventListener_t ..> urt_osEventFlags_t
253

  
254
    /' OS event source interface. '/
255
    class urt_osEventSource_t <<(T,lightblue)>> {
256
        'Initializes an urt_osEventSource_t object.
257
      + urtEventSourceInit (source : urt_osEventSource_t*) : void
258
        'Emits an event.
259
      + urtEventSourceBroadcast (source : urt_osEventSource_t*, flags : urt_osEventFlags_t) : void
260
    }
261
    urt_osEventSource_t ..> urt_osEventFlags_t
262

  
263
    /' Not a class/type but a set of static event-related functions. '/
264
    class urt_events <<(F,white)>> {
265
        'Registers a lister to a source.
266
      + urtEventRegister (source : urt_osEventSource_t*, listener : urt_osEventListener_t*, mask : urt_osEventMask_t) : urt_status_t
267
        'Unregisters a listener from a source.
268
      + urtEventUnregister (source _ urt_osEventSource_t*, listener : urt_osEventListener_t*) : urt_status_t
269
        'Blocks the thread until any event occurs or the timeout expires.
270
      + urtEventWait (type : urt_osEventWaitType_t, timeout : urt_delay_t) : urt_osEventMask_t
271
    }
272
    urt_events ..> urt_osEventSource_t
273
    urt_events ..> urt_osEventListener_t
274
    urt_events ..> urt_osEventMask_t
275
    urt_events ..> urt_status_t
276
    urt_events ..> urt_osEventWaitType_t
277
    urt_events ..> urt_delay_t
278

  
279
  } /' package "events" '/
280

  
281
} /' package "interfaces" '/
282

  
283
package "middleware" {
284

  
285
  package "real-time class" {
286

  
287
    /' The top level RT class structure. '/
288
    class urt_rtclass_t <<(S,lightgrey)>> {
289
        'The actual RT class.
290
      + class : urt_rtclasstype_t
291
        'Parameters of the RT class.
292
      + params : urt_rtclassparams_t
293
    }
294
    urt_rtclass_t "1" *-- "1" urt_rtclasstype_t
295
    urt_rtclass_t "1" *-- "1" urt_rtclassparams_t
296

  
297
    /' Descriptor to distinguish the four RT classes. '/
298
    enum urt_rtclasstype_t {
299
      'Hard real-time.
300
      URT_RTCLASS_HARD = 0
301
      'Firm real-time.
302
      URT_RTCLASS_FIRM = 1
303
      'Soft real-time.
304
      URT_RTCLASS_SOFT = 2
305
      'No real-time at all.
306
      URT_RTCLASS_NONE = 3
307
    }
308

  
309
    /' Union structure, holding RT class parameters. '/
310
    class urt_rtclassparams_t <<(U,lightgreen)>> {
311
        'Parameters for hard real-time.
312
      + hrt : urt_hrtparams_t
313
        'Parameters for firm real-time.
314
      + frt : urt_frtparams_t
315
        'Parameters for soft real-time.
316
      + srt : urt_srtparans_t
317
        'Parameters for non-real-time.
318
      + nrt : urt_nrtparams_t
319
    }
320
    urt_rtclassparams_t "1" *-- "0..1" urt_hrtparams_t
321
    urt_rtclassparams_t "1" *-- "0..1" urt_frtparams_t
322
    urt_rtclassparams_t "1" *-- "0..1" urt_srtparams_t
323
    urt_rtclassparams_t "1" *-- "0..1" urt_nrtparams_t
324

  
325
    /' Parameters for hard real-time. '/
326
    class urt_hrtparams_t <<(S,lightgrey)>> {
327
        'Maximum temporal offset between creation and consumption of messages.
328
      + deadlineOffset : urt_delay_t
329
        'Expected rate at which data is published.
330
      + expectedRate : urt_delay_t
331
        'QoS timer to detected missed deadlines.
332
      + qosTimer : urt_osTimer_t
333
    }
334
    urt_hrtparams_t ..> urt_delay_t
335
    urt_hrtparams_t "1" *-- "1" urt_osTimer_t
336

  
337
    /' Parameters for firm real-time. '/
338
    class urt_frtparams_t <<(S,lightgrey)>> {
339
        'Maximum temporal offset between creation and consumption of messages.
340
      + deadlineOffset : urt_delay_t
341
        'Expected rate at which data is published.
342
      + expectedRate : urt_delay_t
343
        'QoS Timer to detect missed deadlines.
344
      + qosTimer : urt_osTimer_t
345
        'Callback function for the QoS timer.
346
      + callback : urt_osTimerCallback_t
347
        'Parameters for the callback function.
348
      + cbparams : void*
349
    }
350
    urt_frtparams_t ..> urt_delay_t
351
    urt_frtparams_t "1" *-- "1" urt_osTimer_t
352
    urt_frtparams_t "1" *-- "1" urt_osTimerCallback_t
353

  
354
    /' Parameters for soft real-time. '/
355
    class urt_srtparams_t <<(S,lightgrey)>> {
356
        'Callback function to calculate usefulness given a dleay.
357
      + *usefulness (dt : urt_delay_t, params : void*) : float
358
        'Optional parameters for the callback function.
359
      + params : void*
360
    }
361
    urt_srtparams_t ..> urt_delay_t
362

  
363
    /' Parameters for non-real-time. '/
364
    class urt_nrtparams_t <<(S,lightgrey)>> {
365
      'There are nor parameters in this case.
366
    }
367

  
368
  } /' package "real-time class" '/
369

  
370

  
371

  
372
  /' Message type. '/
373
  class urt_message_t <<(S,lightgrey)>> {
374
      'Pointer to the next message in a list.
375
    + next : urt_message_t*
376
      'Pointer to some arbitrary (reusable) payload object.
377
    + payload : void*
378
      'Origin time of the message.
379
    + originTime : urt_osTime_t
380
      'Mutex lock for exclusive access.
381
    + lock : urt_osMutex_t
382
      'Counter of HRT subscribers that did not consume the message yet.
383
    + numHrtConsumersLeft : unsigned int
384
      'Condition variable to inform waiting publishers when the message is available again.
385
    + hrtConsumersLeft : urt_osCondvar_t
386
    -- evaluation data --
387
      'Counter of overall subscribers that did not consume the message yet.
388
    + numConsumersLeft : unsigned int
389
    __
390
      'Initializes a urt_message_t object.
391
    + urtMessageInit (message : urt_message_t*, payload : void*) : urt_status_t
392
  }
393
  urt_message_t "1" o-- "0..1" urt_message_t
394
  urt_message_t "1" *-- "1" urt_osTime_t
395
  urt_message_t "1" *-- "1" urt_osMutex_t
396
  urt_message_t "1" *-- "1" urt_osCondvar_t
397

  
398
  /' Subscriber type. '/
399
  class urt_subscriber_t <<(S,lightgrey)>> {
400
      'Pointer to the next subscriber in a list.
401
    + next : urt_subscriber_t*
402
      'Pointer to the topic, this subscriber subscribed to.
403
    + topic : urt_topic_t*
404
      'Event listener to notify the node about new messages.
405
    + evtListener : urt_osEventListener_t
406
      'Real-time class descriptor.
407
    + rtclass : urt_rtclass_t
408
      'Pointer to the message consumed most recently.
409
    + lastMessage : urt_message_t*
410
      'Copy of the origin time of the message consumed most recently.
411
    + lastMessageTime : urt_osTime_t
412
    -- evaluation data --
413
      'Minimum latency ever detected.
414
    + minLatency : urt_delay_t
415
      'Maximum latency ever detected.
416
    + maxLatency : urt_delay_t
417
      'Sum of all latencies.
418
    + sumLatencies : uint64_t
419
      'Number of messages received.
420
    + numMessagesReceived : unsigned int
421
    __
422
      'Initializes a urt_subscriber_t object.
423
    + urtSubscriberInit (subscriber : urt_subscriber_t*) : urt_status_t
424
      'Tries to subscribe to a topic and contributes an optional list of messages.
425
    + urtSubscriberSubscribe (subscriber : urt_subscriber_t*, topic : urt_topic_t*, rtclass : urt_rtclass_t*, messages : urt_messages_t*) : urt_status_t
426
      'Unsubscribes from a topic.
427
    + urtSubscriberUnsubscribe (subscriber : urt_subscriber_t*) : urt_status_t
428
      'Fetches either the next or the latest message.
429
    + urtSubscriberFetchMessage (subscriber : urt_subscriber_t*, latest : bool) : urt_status_t
430
  }
431
  urt_subscriber_t "1" o-- "0..1" urt_subscriber_t
432
  urt_subscriber_t "1" o-- "0..1" urt_topic_t
433
  urt_subscriber_t "1" *-- "1" urt_osEventListener_t
434
  urt_subscriber_t "1" *-- "1" urt_rtclass_t
435
  urt_subscriber_t "1" o-- "0..1" urt_message_t
436
  urt_subscriber_t "1" *-- "1" urt_osTime_t
437
  urt_subscriber_t "1" *-- "2" urt_delay_t
438
  urt_subscriber_t ..> urt_status_t
439
  urt_subscriber_t ..> urt_topicid_t
440

  
441
  /' Publisher type. '/
442
  class urt_publisher_t <<(S,lightgrey)>> {
443
      'Pointer to the topic for publishing.
444
    + topic : urt_topic_t*
445
    -- evaluation data --
446
      'Counter of attempts to publish a message.
447
    + publishAttempts : unsigned int
448
      'Counter of failed attempts to publish a message.
449
    + publishFails : unsigned int
450
    __
451
      'Initializes a urt_publisher_t object and contributes an optional list of messages.
452
    + urtPublisherInit (publisher : urt_publisher_t*, topic : urt_topic_t*, messages : urt_message_t*) : urt_status_t
453
      'Publishes a message via the associated topic.
454
    + urtPublisherPublish (publisher : urt_publisher_t*, payload : void*, n : size_t, t : urt_osTime_t, timeout : urt_delay_t) : urt_status_t
455
  }
456
  urt_publisher_t "1" o-- "1" urt_topic_t
457
  urt_publisher_t ..> urt_message_t
458
  urt_publisher_t ..> urt_osTime_t
459
  urt_publisher_t ..> urt_delay_t
460
  urt_publisher_t ..> urt_status_t
461

  
462
  /' Topic type. '/
463
  class urt_topic_t <<(S,lightgrey)>> {
464
      'Pointer to the next topic in a list.
465
    + next : urt_topic_t*
466
      'Mutex lock for exclusive access.
467
    + mutex : urt_osMutex_t
468
      'Event source to inform all subscribers when a new message is published.
469
    + evtSource : urt_osEventSource_t
470
      'Number of HRT subscribers.
471
    + numHrtSubscribers : unsigned int
472
      'List of HRT subscribers, orderd by their expected rate (most critical first).
473
    + hrtSubscribers : urt_subscriber_t*
474
      'Timer to check for missed rates.
475
    + qosTimer : urt_osTimer_t
476
      'Mandatory message, each Topic holds.
477
    + mandatoryMessage : urt_message_t
478
      'Pointer to the latest message.
479
    + latestMessage : urt_message_t*
480
      'Identifier of the topic.
481
    + id : urt_topicid_t
482
    -- evaluation data --
483
      'Variable to count how many (non-hrt) subscribers did not fetch a message before it was reused.
484
    + numDiscardedMessages : unsigned int
485
      'Number of overall subscribers.
486
    + numSubscribers : unsigned int
487
    __
488
      'Initializes an urt_topic_t object.
489
    + urtTopicInit (topic : urt_topic_t*, id : urt_topicid_t) : urt_status_t
490
      'Appends the given list of messages to the topic's buffer.
491
    + urtTopicContributeMessages (topic : urt_topic_t*, messages : urt_message_t*) : void
492
  }
493
  urt_topic_t "1" o-- "0..1" urt_topic_t
494
  urt_topic_t "1" *-- "1" urt_osMutex_t
495
  urt_topic_t "1" *-- "1" urt_osEventSource_t
496
  urt_topic_t "1" o-- "0..*" urt_subscriber_t
497
  urt_topic_t "1" *-- "1" urt_osTimer_t
498
  urt_topic_t "1" o-- "1..*" urt_message_t
499
  urt_topic_t "1" *-- "1" urt_message_t
500
  urt_topic_t "1" *-- "1" urt_topicid_t
501
  urt_topic_t ..> urt_osTime_t
502
  urt_topic_t ..> urt_status_t
503

  
504
  /' uRtWare core type. '/
505
  class urt_core_t <<(S,lightgrey)>> {
506
      'List of nodes ordered by their (initial) priority.
507
    - {static} _nodes : urt_node_t*
508
      'List of topics ordered by their identifiers.
509
    - {static} _topics : urt_topic_t*
510
    __
511
      'Initializes the urt_core_t object.
512
    + urtCoreInit (void) : urt_status_t
513
      'Starts all nodes.
514
    + urtCoreStartAll (void) : urt_status_t
515
      'Stops all nodes.
516
    + urtCoreStopAll (void) : urt_status_t
517
      'Retrieves a topic given an identifier.
518
    + urtCoreRetrieveTopic (id : urt_topicid_t) : urt_topic_t*
519
  }
520
  urt_core_t "1" o-- "0..*" urt_topic_t
521
  urt_core_t "1" o-- "0..*" urt_node_t
522
  urt_core_t ..> urt_status_t
523
  urt_core_t ..> urt_topicid_t
524

  
525
  package "node" {
526

  
527
    /' Function type to be called during setup phase of node threads. '/
528
    class urt_nodeSetupCallback_t <<(T,lightblue)>> {
529
      'Takes the node and optional parameters as arguments.
530
      urt_nodeSetupCallback_t (node : urt_node_t*, arg : void*) : urt_status_t
531
    }
532
    urt_nodeSetupCallback_t ..> urt_node_t
533
    urt_nodeSetupCallback_t ..> urt_status_t
534

  
535
    /' Function type to be called during loop phase of node threads. '/
536
    class urt_nodeLoopCallback_t <<(T,lightblue)>> {
537
      'Takes the node, a mask of occurred events and optional parameters as arguments.
538
      urt_nodeLoopCallback_t (node : urt_node_t*, events : urt_osEventMask_t, arg : void*) : urt_status_t
539
    }
540
    urt_nodeLoopCallback_t ..> urt_node_t
541
    urt_nodeLoopCallback_t ..> urt_osEventMask_t
542
    urt_nodeLoopCallback_t ..> urt_status_t
543

  
544
    /' Node type. '/
545
    class urt_node_t <<(S,lightgrey)>> {
546
        'Pointer to the next node in a list.
547
      + next : urt_node_t*
548
        'Pointer to the nore thread.
549
      + thread : urt_osThread_t*
550
        'Callback function to be called during the setup phase.
551
      + setupcallback : urt_nodeSetupCallback_t*
552
        'Optional parameters for the setup callback function.
553
      + setupparams : void*
554
        'Callback function to be called in each loop iteration.
555
      + loopcallback : urt_nodeLoopCallback_t*
556
        'Optional parameters for the loop callback function.
557
      + loopparams : void*
558
        'A mask for which events to wait.
559
      + waitmask : urt_osEventMask_t
560
        'How the node will wait for events.
561
      + waittype : urt_osEventWaitType_t
562
      __
563
      'The main() function of the node thread.
564
      - {static} _main : urt_osThreadFunction_t
565
        'Initializes an urt_node_t object.
566
      + urtNodeInit (node : urt_node_t*, stacksize : size_t, setupcallback : urt_nodeSetupCallback_t*, setupparams : void*, loopcallback : urt_nodeLoopCallback_t*, loopparams : void*) : urt_status_t
567
        'Terminate a node thread and all its child threads (if any).
568
      + urtNodeTerminateRecusively (node : urt_node_t*, sig : urt_osThreadTerminateSignal_t) : void
569
        'Wait for a node thread an all its child threads (if any) to terminate.
570
      + urtNodeJoinRecursively (node : urt_node_t*) : void
571
    }
572
    urt_node_t "1" o-- "0..1" urt_node_t
573
    urt_node_t "1" o-- "1" urt_osThread_t
574
    urt_node_t "1" o-- "1" urt_nodeSetupCallback_t
575
    urt_node_t "1" o-- "1" urt_nodeLoopCallback_t
576
    urt_node_t "1" *-- "1" urt_osEventMask_t
577
    urt_node_t "1" *-- "1" urt_osEventWaitType_t
578
    urt_node_t ..> urt_osThreadTerminateSignal_t
579

  
580
  } /' package "node" '/
581

  
582
} /' package "middleware" '/
583

  
584
@enduml
585

  
doc/statediagrams/general/deinitialization.svg
1
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="528px" preserveAspectRatio="none" style="width:574px;height:528px;" version="1.1" viewBox="0 0 574 528" width="574px" zoomAndPan="magnify"><defs><filter height="300%" id="fxpz2tqgpdftz" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="89" x="241.5" y="26.708">µRtWare</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="131" x="220.5" y="47.6611">Deinitialization</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="289" y="68.6143"/><ellipse cx="339.5" cy="82.8594" fill="#000000" filter="url(#fxpz2tqgpdftz)" rx="10" ry="10" style="stroke: none; stroke-width: 1.0;"/><path d="M38,172.9878 L38,198.1206 A0,0 0 0 0 38,198.1206 L127,198.1206 A0,0 0 0 0 127,198.1206 L127,190.9878 L147,185.5542 L127,182.9878 L127,182.9878 L117,172.9878 L38,172.9878 A0,0 0 0 0 38,172.9878 " fill="#FBFB77" filter="url(#fxpz2tqgpdftz)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M117,172.9878 L117,182.9878 L127,182.9878 L117,172.9878 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="68" x="44" y="190.0547">recursively</text><rect fill="#FEFECE" filter="url(#fxpz2tqgpdftz)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="385" x="147" y="168.5698"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="365" x="157" y="189.7085">request current node and al its child threads to terminate</text><rect fill="#FEFECE" filter="url(#fxpz2tqgpdftz)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="146" x="266.5" y="231.6362"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="126" x="276.5" y="252.7749">iterate to next node</text><polygon fill="#FEFECE" filter="url(#fxpz2tqgpdftz)" points="266,112.8594,413,112.8594,425,124.8594,413,136.8594,266,136.8594,254,124.8594,266,112.8594" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="343.5" y="147.0698">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="147" x="266" y="128.6675">Nodes left to be stopped?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="240" y="122.2651">no</text><path d="M56,421.23 L56,446.3628 A0,0 0 0 0 56,446.3628 L145,446.3628 A0,0 0 0 0 145,446.3628 L145,439.23 L165,433.7964 L145,431.23 L145,431.23 L135,421.23 L56,421.23 A0,0 0 0 0 56,421.23 " fill="#FBFB77" filter="url(#fxpz2tqgpdftz)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M135,421.23 L135,431.23 L145,431.23 L135,421.23 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="68" x="62" y="438.2969">recursively</text><rect fill="#FEFECE" filter="url(#fxpz2tqgpdftz)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="349" x="165" y="416.812"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="329" x="175" y="437.9507">wait for current node and al its child threads to stop</text><polygon fill="#FEFECE" filter="url(#fxpz2tqgpdftz)" points="263.5,368.4097,415.5,368.4097,427.5,380.4097,415.5,392.4097,263.5,392.4097,251.5,380.4097,263.5,368.4097" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="343.5" y="402.6201">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="152" x="263.5" y="384.2178">Current node still running?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="427.5" y="377.8154">no</text><polygon fill="#FEFECE" filter="url(#fxpz2tqgpdftz)" points="339.5,470.7808,351.5,482.7808,339.5,494.7808,327.5,482.7808,339.5,470.7808" style="stroke: #A80036; stroke-width: 1.5;"/><polygon fill="#FEFECE" filter="url(#fxpz2tqgpdftz)" points="285.5,307.605,393.5,307.605,405.5,319.605,393.5,331.605,285.5,331.605,273.5,319.605,285.5,307.605" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="343.5" y="341.8154">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="108" x="285.5" y="323.4131">Nodes left to stop?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="259.5" y="317.0107">no</text><ellipse cx="24" cy="365.605" fill="none" filter="url(#fxpz2tqgpdftz)" rx="10" ry="10" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="24.5" cy="366.105" fill="#000000" filter="url(#fxpz2tqgpdftz)" rx="6" ry="6" style="stroke: none; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="339.5" x2="339.5" y1="202.5386" y2="231.6362"/><polygon fill="#A80036" points="335.5,221.6362,339.5,231.6362,343.5,221.6362,339.5,225.6362" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="339.5" x2="339.5" y1="136.8594" y2="168.5698"/><polygon fill="#A80036" points="335.5,158.5698,339.5,168.5698,343.5,158.5698,339.5,162.5698" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="339.5" x2="339.5" y1="265.605" y2="275.605"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="339.5" x2="544" y1="275.605" y2="275.605"/><polygon fill="#A80036" points="540,211.6362,544,201.6362,548,211.6362,544,207.6362" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="544" x2="544" y1="124.8594" y2="275.605"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="544" x2="425" y1="124.8594" y2="124.8594"/><polygon fill="#A80036" points="435,120.8594,425,124.8594,435,128.8594,431,124.8594" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="254" x2="26" y1="124.8594" y2="124.8594"/><polygon fill="#A80036" points="22,197.6362,26,207.6362,30,197.6362,26,201.6362" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="26" x2="26" y1="124.8594" y2="287.605"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="26" x2="339.5" y1="287.605" y2="287.605"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="339.5" x2="339.5" y1="287.605" y2="307.605"/><polygon fill="#A80036" points="335.5,297.605,339.5,307.605,343.5,297.605,339.5,301.605" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="339.5" x2="339.5" y1="92.8594" y2="112.8594"/><polygon fill="#A80036" points="335.5,102.8594,339.5,112.8594,343.5,102.8594,339.5,106.8594" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="339.5" x2="339.5" y1="392.4097" y2="416.812"/><polygon fill="#A80036" points="335.5,406.812,339.5,416.812,343.5,406.812,339.5,410.812" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="427.5" x2="524" y1="380.4097" y2="380.4097"/><polygon fill="#A80036" points="520,423.7964,524,433.7964,528,423.7964,524,427.7964" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="524" x2="524" y1="380.4097" y2="482.7808"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="524" x2="351.5" y1="482.7808" y2="482.7808"/><polygon fill="#A80036" points="361.5,478.7808,351.5,482.7808,361.5,486.7808,357.5,482.7808" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="339.5" x2="339.5" y1="450.7808" y2="470.7808"/><polygon fill="#A80036" points="335.5,460.7808,339.5,470.7808,343.5,460.7808,339.5,464.7808" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="339.5" x2="339.5" y1="331.605" y2="368.4097"/><polygon fill="#A80036" points="335.5,358.4097,339.5,368.4097,343.5,358.4097,339.5,362.4097" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="339.5" x2="339.5" y1="494.7808" y2="504.7808"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="339.5" x2="548" y1="504.7808" y2="504.7808"/><polygon fill="#A80036" points="544,425.394,548,415.394,552,425.394,548,421.394" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="548" x2="548" y1="319.605" y2="504.7808"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="548" x2="405.5" y1="319.605" y2="319.605"/><polygon fill="#A80036" points="415.5,315.605,405.5,319.605,415.5,323.605,411.5,319.605" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="273.5" x2="24" y1="319.605" y2="319.605"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="24" x2="24" y1="319.605" y2="355.605"/><polygon fill="#A80036" points="20,345.605,24,355.605,28,345.605,24,349.605" style="stroke: #A80036; stroke-width: 1.0;"/><!--
2
@startuml
3

  
4
title **µRtWare**\nDeinitialization\n
5

  
6

  
7

  
8
start
9
while (Nodes left to be stopped?) is (yes)
10
  :request current node and al its child threads to terminate;
11
  note
12
    recursively
13
  endnote
14
  :iterate to next node;
15
endwhile (no)
16
while (Nodes left to stop?) is (yes)
17
  if (Current node still running?) then (yes)
18
    :wait for current node and al its child threads to stop;
19
    note
20
      recursively
21
    endnote
22
  else (no)
23
  endif
24
endwhile (no)
25
stop
26

  
27
@enduml
28

  
29
PlantUML version 1.2018.11(Sat Sep 22 18:43:53 CEST 2018)
30
(GPL source distribution)
31
Java Runtime: OpenJDK Runtime Environment
32
JVM: OpenJDK 64-Bit Server VM
33
Java Version: 1.8.0_181-8u181-b13-0ubuntu0.16.04.1-b13
34
Operating System: Linux
35
OS Version: 4.15.0-36-generic
36
Default Encoding: UTF-8
37
Language: en
38
Country: US
39
--></g></svg>
doc/statediagrams/general/deinitialization.uml
1
/'
2
µRtWare is a lightweight publish/subscribe middleware for real-time
3
applications. It was developed as part of the software habitat for the
4
Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
5

  
6
Copyright (C) 2018..2018  Thomas Schöpping et al.
7

  
8
This program is free software: you can redistribute it and/or modify
9
it under the terms of the GNU General Public License as published by
10
the Free Software Foundation, either version 3 of the License, or
11
(at your option) any later version.
12

  
13
This program is distributed in the hope that it will be useful,
14
but WITHOUT ANY WARRANTY; without even the implied warranty of
15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
GNU General Public License for more details.
17

  
18
You should have received a copy of the GNU General Public License
19
along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
'/
21

  
22
@startuml
23

  
24
title **µRtWare**\nDeinitialization\n
25

  
26

  
27

  
28
start
29
while (Nodes left to be stopped?) is (yes)
30
  :request current node and al its child threads to terminate;
31
  note
32
    recursively
33
  endnote
34
  :iterate to next node;
35
endwhile (no)
36
while (Nodes left to stop?) is (yes)
37
  if (Current node still running?) then (yes)
38
    :wait for current node and al its child threads to stop;
39
    note
40
      recursively
41
    endnote
42
  else (no)
43
  endif
44
endwhile (no)
45
stop
46

  
47
@enduml
doc/statediagrams/general/emergency.svg
1
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="440px" preserveAspectRatio="none" style="width:446px;height:440px;" version="1.1" viewBox="0 0 446 440" width="446px" zoomAndPan="magnify"><defs><filter height="300%" id="f15t7xuxx0vrgq" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="89" x="177.5" y="26.708">µRtWare</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="179" x="132.5" y="47.6611">Emergency Callback</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="225" y="68.6143"/><ellipse cx="274" cy="82.8594" fill="#000000" filter="url(#f15t7xuxx0vrgq)" rx="10" ry="10" style="stroke: none; stroke-width: 1.0;"/><path d="M36,221.3901 L36,246.5229 A0,0 0 0 0 36,246.5229 L120,246.5229 A0,0 0 0 0 120,246.5229 L120,239.3901 L140,233.9565 L120,231.3901 L120,231.3901 L110,221.3901 L36,221.3901 A0,0 0 0 0 36,221.3901 " fill="#FBFB77" filter="url(#f15t7xuxx0vrgq)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M110,221.3901 L110,231.3901 L120,231.3901 L110,221.3901 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="63" x="42" y="238.457">recusively</text><rect fill="#FEFECE" filter="url(#f15t7xuxx0vrgq)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="268" x="140" y="216.9722"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="248" x="150" y="238.1108">terminate node and all its child threads</text><rect fill="#FEFECE" filter="url(#f15t7xuxx0vrgq)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="146" x="201" y="280.0386"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="126" x="211" y="301.1772">iterate to next node</text><polygon fill="#FEFECE" filter="url(#f15t7xuxx0vrgq)" points="205,161.2617,343,161.2617,355,173.2617,343,185.2617,205,185.2617,193,173.2617,205,161.2617" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="278" y="195.4722">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="138" x="205" y="177.0698">Nodes left to terminate?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="179" y="170.6675">no</text><rect fill="#FEFECE" filter="url(#f15t7xuxx0vrgq)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="176" x="186" y="356.0073"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="156" x="196" y="377.146">initiate system shutdown</text><ellipse cx="274" cy="419.9761" fill="none" filter="url(#f15t7xuxx0vrgq)" rx="10" ry="10" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="274.5" cy="420.4761" fill="#000000" filter="url(#f15t7xuxx0vrgq)" rx="6" ry="6" style="stroke: none; stroke-width: 1.0;"/><polygon fill="#FEFECE" filter="url(#f15t7xuxx0vrgq)" points="205,112.8594,343,112.8594,355,124.8594,343,136.8594,205,136.8594,193,124.8594,205,112.8594" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="278" y="147.0698">no</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="138" x="205" y="128.6675">Has been called before?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="355" y="122.2651">yes</text><ellipse cx="395" cy="124.8594" fill="none" filter="url(#f15t7xuxx0vrgq)" rx="10" ry="10" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="395.5" cy="125.3594" fill="#000000" filter="url(#f15t7xuxx0vrgq)" rx="6" ry="6" style="stroke: none; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="274" x2="274" y1="250.9409" y2="280.0386"/><polygon fill="#A80036" points="270,270.0386,274,280.0386,278,270.0386,274,274.0386" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="274" x2="274" y1="185.2617" y2="216.9722"/><polygon fill="#A80036" points="270,206.9722,274,216.9722,278,206.9722,274,210.9722" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="274" x2="274" y1="314.0073" y2="324.0073"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="274" x2="420" y1="324.0073" y2="324.0073"/><polygon fill="#A80036" points="416,260.0386,420,250.0386,424,260.0386,420,256.0386" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="420" x2="420" y1="173.2617" y2="324.0073"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="420" x2="355" y1="173.2617" y2="173.2617"/><polygon fill="#A80036" points="365,169.2617,355,173.2617,365,177.2617,361,173.2617" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="193" x2="24" y1="173.2617" y2="173.2617"/><polygon fill="#A80036" points="20,246.0386,24,256.0386,28,246.0386,24,250.0386" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="24" x2="24" y1="173.2617" y2="336.0073"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="24" x2="274" y1="336.0073" y2="336.0073"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="274" x2="274" y1="336.0073" y2="356.0073"/><polygon fill="#A80036" points="270,346.0073,274,356.0073,278,346.0073,274,350.0073" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="274" x2="274" y1="389.9761" y2="409.9761"/><polygon fill="#A80036" points="270,399.9761,274,409.9761,278,399.9761,274,403.9761" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="274" x2="274" y1="136.8594" y2="161.2617"/><polygon fill="#A80036" points="270,151.2617,274,161.2617,278,151.2617,274,155.2617" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="355" x2="385" y1="124.8594" y2="124.8594"/><polygon fill="#A80036" points="375,120.8594,385,124.8594,375,128.8594,379,124.8594" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="274" x2="274" y1="92.8594" y2="112.8594"/><polygon fill="#A80036" points="270,102.8594,274,112.8594,278,102.8594,274,106.8594" style="stroke: #A80036; stroke-width: 1.0;"/><!--
2
@startuml
3

  
4
title **µRtWare**\nEmergency Callback\n
5

  
6

  
7

  
8
start
9
if (Has been called before?) then (yes)
10
  stop
11
else (no)
12
  while (Nodes left to terminate?) is (yes)
13
    :terminate node and all its child threads;
14
    note
15
      recusively
16
    endnote
17
    :iterate to next node;
18
  endwhile (no)
19
  :initiate system shutdown;
20
  stop
21
endif
22

  
23

  
24
@enduml
25

  
26
PlantUML version 1.2018.11(Sat Sep 22 18:43:53 CEST 2018)
27
(GPL source distribution)
28
Java Runtime: OpenJDK Runtime Environment
29
JVM: OpenJDK 64-Bit Server VM
30
Java Version: 1.8.0_181-8u181-b13-0ubuntu0.16.04.1-b13
31
Operating System: Linux
32
OS Version: 4.15.0-36-generic
33
Default Encoding: UTF-8
34
Language: en
35
Country: US
36
--></g></svg>
doc/statediagrams/general/emergency.uml
1
/'
2
µRtWare is a lightweight publish/subscribe middleware for real-time
3
applications. It was developed as part of the software habitat for the
4
Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
5

  
6
Copyright (C) 2018..2018  Thomas Schöpping et al.
7

  
8
This program is free software: you can redistribute it and/or modify
9
it under the terms of the GNU General Public License as published by
10
the Free Software Foundation, either version 3 of the License, or
11
(at your option) any later version.
12

  
13
This program is distributed in the hope that it will be useful,
14
but WITHOUT ANY WARRANTY; without even the implied warranty of
15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
GNU General Public License for more details.
17

  
18
You should have received a copy of the GNU General Public License
19
along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
'/
21

  
22
@startuml
23

  
24
title **µRtWare**\nEmergency Callback\n
25

  
26

  
27

  
28
start
29
if (Has been called before?) then (yes)
30
  stop
31
else (no)
32
  while (Nodes left to terminate?) is (yes)
33
    :terminate node and all its child threads;
34
    note
35
      recusively
36
    endnote
37
    :iterate to next node;
38
  endwhile (no)
39
  :initiate system shutdown;
40
  stop
41
endif
42

  
43

  
44
@enduml
doc/statediagrams/general/initialization.svg
1
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="1070px" preserveAspectRatio="none" style="width:1283px;height:1070px;" version="1.1" viewBox="0 0 1283 1070" width="1283px" zoomAndPan="magnify"><defs><filter height="300%" id="f9p8gcqa4s02k" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="89" x="596" y="26.708">µRtWare</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="107" x="587" y="47.6611">Initialization</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="643.5" y="68.6143"/><ellipse cx="641" cy="82.8594" fill="#000000" filter="url(#f9p8gcqa4s02k)" rx="10" ry="10" style="stroke: none; stroke-width: 1.0;"/><rect fill="#000000" filter="url(#f9p8gcqa4s02k)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="1262" x="10" y="112.8594"/><rect fill="#000000" filter="url(#f9p8gcqa4s02k)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="876" x="24" y="138.8594"/><rect fill="#FFFFFF" filter="url(#f9p8gcqa4s02k)" height="116.5625" style="stroke: #000000; stroke-width: 2.0;" width="368" x="38" y="180.1455"/><path d="M117,181.1455 L117,189.4424 L107,199.4424 L38,199.4424 " fill="none" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="69" x="41" y="194.1406">urt_core_t</text><path d="M58,226.4424 L58,266.708 L255,266.708 L255,236.4424 L245,226.4424 L58,226.4424 " fill="#FBFB77" filter="url(#f9p8gcqa4s02k)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M245,226.4424 L245,236.4424 L255,236.4424 L245,226.4424 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="176" x="64" y="243.5093">must be initialized statically</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="117" x="64" y="258.6421">(in startup thread)</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="131" x="265" y="229.5908"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="111" x="275" y="250.7295">initialize members</text><rect fill="#FFFFFF" filter="url(#f9p8gcqa4s02k)" height="157.5313" style="stroke: #000000; stroke-width: 2.0;" width="452" x="434" y="155.6611"/><path d="M548,156.6611 L548,164.958 L538,174.958 L434,174.958 " fill="none" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="104" x="437" y="169.6563">urt_osThread_t</text><path d="M444,191.958 L444,232.2236 A0,0 0 0 0 444,232.2236 L721,232.2236 A0,0 0 0 0 721,232.2236 L721,216.0908 L741,212.0908 L721,208.0908 L721,201.958 L711,191.958 L444,191.958 A0,0 0 0 0 444,191.958 " fill="#FBFB77" filter="url(#f9p8gcqa4s02k)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M711,191.958 L711,201.958 L721,201.958 L711,191.958 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="176" x="450" y="209.0249">must be initialized statically</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="256" x="450" y="224.1577">(in preamble / static memory allocation)</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="135" x="741" y="195.1064"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="115" x="751" y="216.2451">initialize work area</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="131" x="743" y="267.2236"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="111" x="753" y="288.3623">initialize members</text><rect fill="#000000" filter="url(#f9p8gcqa4s02k)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="876" x="24" y="333.1924"/><rect fill="#000000" filter="url(#f9p8gcqa4s02k)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="464" x="230" y="359.1924"/><rect fill="#FFFFFF" filter="url(#f9p8gcqa4s02k)" height="137.0791" style="stroke: #000000; stroke-width: 2.0;" width="176" x="261" y="375.9941"/><path d="M343,376.9941 L343,385.291 L333,395.291 L261,395.291 " fill="none" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="72" x="264" y="389.9893">urt_topic_t</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="131" x="283.5" y="412.291"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="111" x="293.5" y="433.4297">initialize members</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="156" x="271" y="466.2598"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="136" x="281" y="487.3984">insert self to topic list</text><rect fill="#FFFFFF" filter="url(#f9p8gcqa4s02k)" height="419.7734" style="stroke: #000000; stroke-width: 2.0;" width="231" x="244" y="548.0732"/><path d="M356,549.0732 L356,557.3701 L346,567.3701 L244,567.3701 " fill="none" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="102" x="247" y="562.0684">urt_publisher_t</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="131" x="283.5" y="584.3701"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="111" x="293.5" y="605.5088">initialize members</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="150" x="274" y="653.3389"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="130" x="284" y="674.4775">find topic in topic list</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="80" x="309" y="769.9404"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="60" x="319" y="791.0791">lock topic</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="153" x="272.5" y="823.9092"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="133" x="282.5" y="845.0479">contribute messages</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="96" x="301" y="877.8779"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="76" x="311" y="899.0166">unlock topic</text><polygon fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" points="266,721.5381,432,721.5381,444,733.5381,432,745.5381,266,745.5381,254,733.5381,266,721.5381" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="353" y="755.7485">yes</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="166" x="266" y="737.3462">Any messages to contribute?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="444" y="730.9438">no</text><polygon fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" points="349,931.8467,361,943.8467,349,955.8467,337,943.8467,349,931.8467" style="stroke: #A80036; stroke-width: 1.5;"/><rect fill="#FFFFFF" filter="url(#f9p8gcqa4s02k)" height="158.4648" style="stroke: #000000; stroke-width: 2.0;" width="177" x="503" y="602.8115"/><path d="M587,603.8115 L587,612.1084 L577,622.1084 L503,622.1084 " fill="none" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="74" x="506" y="616.8066">urt_node_t</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="131" x="526" y="639.1084"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="111" x="536" y="660.2471">initialize members</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="157" x="513" y="707.3076"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="137" x="523" y="728.4463">insert self to node list</text><rect fill="#000000" filter="url(#f9p8gcqa4s02k)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="464" x="230" y="987.8467"/><rect fill="#FFFFFF" filter="url(#f9p8gcqa4s02k)" height="90.2656" style="stroke: #000000; stroke-width: 2.0;" width="151" x="928" y="511.0303"/><path d="M1049,512.0303 L1049,520.3271 L1039,530.3271 L928,530.3271 " fill="none" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="111" x="931" y="525.0254">urt_subscriber_t</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="131" x="938" y="547.3271"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="111" x="948" y="568.4658">initialize members</text><rect fill="#FFFFFF" filter="url(#f9p8gcqa4s02k)" height="90.2656" style="stroke: #000000; stroke-width: 2.0;" width="151" x="1107" y="511.0303"/><path d="M1219,512.0303 L1219,520.3271 L1209,530.3271 L1107,530.3271 " fill="none" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="102" x="1110" y="525.0254">urt_message_t</text><rect fill="#FEFECE" filter="url(#f9p8gcqa4s02k)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="131" x="1117" y="547.3271"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="111" x="1127" y="568.4658">initialize members</text><rect fill="#000000" filter="url(#f9p8gcqa4s02k)" height="6" rx="2.5" ry="2.5" style="stroke: #000000; stroke-width: 1.0;" width="1262" x="10" y="1013.8467"/><ellipse cx="641" cy="1049.8467" fill="none" filter="url(#f9p8gcqa4s02k)" rx="10" ry="10" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="641.5" cy="1050.3467" fill="#000000" filter="url(#f9p8gcqa4s02k)" rx="6" ry="6" style="stroke: none; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="808.5" x2="808.5" y1="229.0752" y2="267.2236"/><polygon fill="#A80036" points="804.5,257.2236,808.5,267.2236,812.5,257.2236,808.5,261.2236" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="330.5" x2="330.5" y1="144.8594" y2="229.5908"/><polygon fill="#A80036" points="326.5,219.5908,330.5,229.5908,334.5,219.5908,330.5,223.5908" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="808.5" x2="808.5" y1="144.8594" y2="195.1064"/><polygon fill="#A80036" points="804.5,185.1064,808.5,195.1064,812.5,185.1064,808.5,189.1064" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="330.5" x2="330.5" y1="263.5596" y2="333.1924"/><polygon fill="#A80036" points="326.5,323.1924,330.5,333.1924,334.5,323.1924,330.5,327.1924" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="808.5" x2="808.5" y1="301.1924" y2="333.1924"/><polygon fill="#A80036" points="804.5,323.1924,808.5,333.1924,812.5,323.1924,808.5,327.1924" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="349" x2="349" y1="446.2598" y2="466.2598"/><polygon fill="#A80036" points="345,456.2598,349,466.2598,353,456.2598,349,460.2598" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="349" x2="349" y1="618.3389" y2="653.3389"/><polygon fill="#A80036" points="345,643.3389,349,653.3389,353,643.3389,349,647.3389" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="349" x2="349" y1="803.9092" y2="823.9092"/><polygon fill="#A80036" points="345,813.9092,349,823.9092,353,813.9092,349,817.9092" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="349" x2="349" y1="857.8779" y2="877.8779"/><polygon fill="#A80036" points="345,867.8779,349,877.8779,353,867.8779,349,871.8779" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="349" x2="349" y1="745.5381" y2="769.9404"/><polygon fill="#A80036" points="345,759.9404,349,769.9404,353,759.9404,349,763.9404" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="444" x2="456" y1="733.5381" y2="733.5381"/><polygon fill="#A80036" points="452,830.8936,456,840.8936,460,830.8936,456,834.8936" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="456" x2="456" y1="733.5381" y2="943.8467"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="456" x2="361" y1="943.8467" y2="943.8467"/><polygon fill="#A80036" points="371,939.8467,361,943.8467,371,947.8467,367,943.8467" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="349" x2="349" y1="911.8467" y2="931.8467"/><polygon fill="#A80036" points="345,921.8467,349,931.8467,353,921.8467,349,925.8467" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="349" x2="349" y1="687.3076" y2="721.5381"/><polygon fill="#A80036" points="345,711.5381,349,721.5381,353,711.5381,349,715.5381" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="349" x2="349" y1="500.2285" y2="584.3701"/><polygon fill="#A80036" points="345,574.3701,349,584.3701,353,574.3701,349,578.3701" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="591.5" x2="591.5" y1="673.0771" y2="707.3076"/><polygon fill="#A80036" points="587.5,697.3076,591.5,707.3076,595.5,697.3076,591.5,701.3076" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="349" x2="349" y1="365.1924" y2="412.291"/><polygon fill="#A80036" points="345,402.291,349,412.291,353,402.291,349,406.291" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="591.5" x2="591.5" y1="365.1924" y2="639.1084"/><polygon fill="#A80036" points="587.5,629.1084,591.5,639.1084,595.5,629.1084,591.5,633.1084" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="349" x2="349" y1="955.8467" y2="987.8467"/><polygon fill="#A80036" points="345,977.8467,349,987.8467,353,977.8467,349,981.8467" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="591.5" x2="591.5" y1="741.2764" y2="987.8467"/><polygon fill="#A80036" points="587.5,977.8467,591.5,987.8467,595.5,977.8467,591.5,981.8467" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="462" x2="462" y1="339.1924" y2="359.1924"/><polygon fill="#A80036" points="458,349.1924,462,359.1924,466,349.1924,462,353.1924" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="462" x2="462" y1="118.8594" y2="138.8594"/><polygon fill="#A80036" points="458,128.8594,462,138.8594,466,128.8594,462,132.8594" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1003.5" x2="1003.5" y1="118.8594" y2="547.3271"/><polygon fill="#A80036" points="999.5,537.3271,1003.5,547.3271,1007.5,537.3271,1003.5,541.3271" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1182.5" x2="1182.5" y1="118.8594" y2="547.3271"/><polygon fill="#A80036" points="1178.5,537.3271,1182.5,547.3271,1186.5,537.3271,1182.5,541.3271" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="462" x2="462" y1="993.8467" y2="1013.8467"/><polygon fill="#A80036" points="458,1003.8467,462,1013.8467,466,1003.8467,462,1007.8467" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1003.5" x2="1003.5" y1="581.2959" y2="1013.8467"/><polygon fill="#A80036" points="999.5,1003.8467,1003.5,1013.8467,1007.5,1003.8467,1003.5,1007.8467" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1182.5" x2="1182.5" y1="581.2959" y2="1013.8467"/><polygon fill="#A80036" points="1178.5,1003.8467,1182.5,1013.8467,1186.5,1003.8467,1182.5,1007.8467" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="641" x2="641" y1="92.8594" y2="112.8594"/><polygon fill="#A80036" points="637,102.8594,641,112.8594,645,102.8594,641,106.8594" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="641" x2="641" y1="1019.8467" y2="1039.8467"/><polygon fill="#A80036" points="637,1029.8467,641,1039.8467,645,1029.8467,641,1033.8467" style="stroke: #A80036; stroke-width: 1.0;"/><!--
2
@startuml
3

  
4
title **µRtWare**\nInitialization\n
5

  
6

  
7

  
8
start
9
fork
10
  fork
11
    partition "urt_core_t" {
12
      note
13
        must be initialized statically
14
        (in startup thread)
15
      endnote
16
      :initialize members;
17
    }
18
  fork again
19
    partition "urt_osThread_t" {
20
      :initialize work area;
21
      note
22
        must be initialized statically
23
        (in preamble / static memory allocation)
24
      endnote
25
      :initialize members;
26
    }
27
  endfork
28
  fork
29
    partition "urt_topic_t" {
30
      :initialize members;
31
      :insert self to topic list;
32
    }
33
    partition "urt_publisher_t" {
34
      :initialize members;
35
      :find topic in topic list;
36
      if (Any messages to contribute?) then (yes)
37
        :lock topic;
38
        :contribute messages;
39
        :unlock topic;
40
      else (no)
41
      endif
42
    }
43
  fork again
44
    partition "urt_node_t" {
45
      :initialize members;
46
      :insert self to node list;
47
    }
48
  endfork
49
fork again
50
  partition "urt_subscriber_t" {
51
    :initialize members;
52
  }
53
fork again
54
  partition "urt_message_t" {
55
    :initialize members;
56
  }
57
endfork
58
stop
59

  
60
@enduml
61

  
62
PlantUML version 1.2018.11(Sat Sep 22 18:43:53 CEST 2018)
63
(GPL source distribution)
64
Java Runtime: OpenJDK Runtime Environment
65
JVM: OpenJDK 64-Bit Server VM
66
Java Version: 1.8.0_181-8u181-b13-0ubuntu0.16.04.1-b13
67
Operating System: Linux
68
OS Version: 4.15.0-36-generic
69
Default Encoding: UTF-8
70
Language: en
71
Country: US
72
--></g></svg>
doc/statediagrams/general/initialization.uml
1
/'
2
µRtWare is a lightweight publish/subscribe middleware for real-time
3
applications. It was developed as part of the software habitat for the
4
Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
5

  
6
Copyright (C) 2018..2018  Thomas Schöpping et al.
7

  
8
This program is free software: you can redistribute it and/or modify
9
it under the terms of the GNU General Public License as published by
10
the Free Software Foundation, either version 3 of the License, or
11
(at your option) any later version.
12

  
13
This program is distributed in the hope that it will be useful,
14
but WITHOUT ANY WARRANTY; without even the implied warranty of
15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
GNU General Public License for more details.
17

  
18
You should have received a copy of the GNU General Public License
19
along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
'/
21

  
22
@startuml
23

  
24
title **µRtWare**\nInitialization\n
25

  
26

  
27

  
28
start
29
fork
30
  fork
31
    partition "urt_core_t" {
32
      note
33
        must be initialized statically
34
        (in startup thread)
35
      endnote
36
      :initialize members;
37
    }
38
  fork again
39
    partition "urt_osThread_t" {
40
      :initialize work area;
41
      note
42
        must be initialized statically
43
        (in preamble / static memory allocation)
44
      endnote
45
      :initialize members;
46
    }
47
  endfork
48
  fork
49
    partition "urt_topic_t" {
50
      :initialize members;
51
      :insert self to topic list;
52
    }
53
    partition "urt_publisher_t" {
54
      :initialize members;
55
      :find topic in topic list;
56
      if (Any messages to contribute?) then (yes)
57
        :lock topic;
58
        :contribute messages;
59
        :unlock topic;
60
      else (no)
61
      endif
62
    }
63
  fork again
64
    partition "urt_node_t" {
65
      :initialize members;
66
      :insert self to node list;
67
    }
68
  endfork
69
fork again
70
  partition "urt_subscriber_t" {
71
    :initialize members;
72
  }
73
fork again
74
  partition "urt_message_t" {
75
    :initialize members;
76
  }
77
endfork
78
stop
79

  
80
@enduml
doc/statediagrams/node/nodethread.svg
1
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="500px" preserveAspectRatio="none" style="width:598px;height:500px;" version="1.1" viewBox="0 0 598 500" width="598px" zoomAndPan="magnify"><defs><filter height="300%" id="f2m2ok2ab1v62" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="89" x="253.5" y="26.708">µRtWare</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="116" x="240" y="47.6611">Node Thread</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="301" y="68.6143"/><ellipse cx="453.5" cy="82.8594" fill="#000000" filter="url(#f2m2ok2ab1v62)" rx="10" ry="10" style="stroke: none; stroke-width: 1.0;"/><path d="M236,117.2773 L236,142.4102 A0,0 0 0 0 236,142.4102 L351,142.4102 A0,0 0 0 0 351,142.4102 L351,135.2773 L371,129.8438 L351,127.2773 L351,127.2773 L341,117.2773 L236,117.2773 A0,0 0 0 0 236,117.2773 " fill="#FBFB77" filter="url(#f2m2ok2ab1v62)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M341,117.2773 L341,127.2773 L351,127.2773 L341,117.2773 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="94" x="242" y="134.3442">must not loop!</text><rect fill="#FEFECE" filter="url(#f2m2ok2ab1v62)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="165" x="371" y="112.8594"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="145" x="381" y="133.998">execute setup callback</text><path d="M10,171.2461 L10,196.3789 A0,0 0 0 0 10,196.3789 L300,196.3789 A0,0 0 0 0 300,196.3789 L300,189.2461 L320,183.8125 L300,181.2461 L300,181.2461 L290,171.2461 L10,171.2461 A0,0 0 0 0 10,171.2461 " fill="#FBFB77" filter="url(#f2m2ok2ab1v62)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M290,171.2461 L290,181.2461 L300,181.2461 L290,171.2461 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="269" x="16" y="188.313">threads are woken simultaneously by core</text><rect fill="#FEFECE" filter="url(#f2m2ok2ab1v62)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="267" x="320" y="166.8281"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="247" x="330" y="187.9668">suspend thread and all children (if any)</text><path d="M184,280.9253 L184,306.0581 A0,0 0 0 0 184,306.0581 L381,306.0581 A0,0 0 0 0 381,306.0581 L381,298.9253 L401,293.4917 L381,290.9253 L381,290.9253 L371,280.9253 L184,280.9253 A0,0 0 0 0 184,280.9253 " fill="#FBFB77" filter="url(#f2m2ok2ab1v62)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M371,280.9253 L371,290.9253 L381,290.9253 L371,280.9253 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="176" x="190" y="297.9922">maks specified by callbacks</text><rect fill="#FEFECE" filter="url(#f2m2ok2ab1v62)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="105" x="401" y="276.5073"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="85" x="411" y="297.646">wait for event</text><path d="M240.5,343.9917 L240.5,369.1245 A0,0 0 0 0 240.5,369.1245 L355.5,369.1245 A0,0 0 0 0 355.5,369.1245 L355.5,361.9917 L375.5,356.5581 L355.5,353.9917 L355.5,353.9917 L345.5,343.9917 L240.5,343.9917 A0,0 0 0 0 240.5,343.9917 " fill="#FBFB77" filter="url(#f2m2ok2ab1v62)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M345.5,343.9917 L345.5,353.9917 L355.5,353.9917 L345.5,343.9917 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="94" x="246.5" y="361.0586">must not loop!</text><rect fill="#FEFECE" filter="url(#f2m2ok2ab1v62)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="156" x="375.5" y="339.5737"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="136" x="385.5" y="360.7124">execute loop callback</text><polygon fill="#FEFECE" filter="url(#f2m2ok2ab1v62)" points="385.5,220.7969,521.5,220.7969,533.5,232.7969,521.5,244.7969,385.5,244.7969,373.5,232.7969,385.5,220.7969" style="stroke: #A80036; stroke-width: 1.5;"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="14" x="457.5" y="255.0073">no</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="136" x="385.5" y="236.605">Termination requested?</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="20" x="353.5" y="230.2026">yes</text><rect fill="#FEFECE" filter="url(#f2m2ok2ab1v62)" height="33.9688" rx="12.5" ry="12.5" style="stroke: #A80036; stroke-width: 1.5;" width="127" x="390" y="415.5425"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="107" x="400" y="436.6812">terminate thread</text><ellipse cx="453.5" cy="479.5112" fill="none" filter="url(#f2m2ok2ab1v62)" rx="10" ry="10" style="stroke: #000000; stroke-width: 1.0;"/><ellipse cx="454" cy="480.0112" fill="#000000" filter="url(#f2m2ok2ab1v62)" rx="6" ry="6" style="stroke: none; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="453.5" x2="453.5" y1="92.8594" y2="112.8594"/><polygon fill="#A80036" points="449.5,102.8594,453.5,112.8594,457.5,102.8594,453.5,106.8594" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="453.5" x2="453.5" y1="146.8281" y2="166.8281"/><polygon fill="#A80036" points="449.5,156.8281,453.5,166.8281,457.5,156.8281,453.5,160.8281" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="453.5" x2="453.5" y1="310.4761" y2="339.5737"/><polygon fill="#A80036" points="449.5,329.5737,453.5,339.5737,457.5,329.5737,453.5,333.5737" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="453.5" x2="453.5" y1="244.7969" y2="276.5073"/><polygon fill="#A80036" points="449.5,266.5073,453.5,276.5073,457.5,266.5073,453.5,270.5073" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="453.5" x2="453.5" y1="373.5425" y2="383.5425"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="453.5" x2="545.5" y1="383.5425" y2="383.5425"/><polygon fill="#A80036" points="541.5,319.5737,545.5,309.5737,549.5,319.5737,545.5,315.5737" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="545.5" x2="545.5" y1="232.7969" y2="383.5425"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="545.5" x2="533.5" y1="232.7969" y2="232.7969"/><polygon fill="#A80036" points="543.5,228.7969,533.5,232.7969,543.5,236.7969,539.5,232.7969" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="373.5" x2="172" y1="232.7969" y2="232.7969"/><polygon fill="#A80036" points="168,305.5737,172,315.5737,176,305.5737,172,309.5737" style="stroke: #A80036; stroke-width: 1.5;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="172" x2="172" y1="232.7969" y2="395.5425"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="172" x2="453.5" y1="395.5425" y2="395.5425"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="453.5" x2="453.5" y1="395.5425" y2="415.5425"/><polygon fill="#A80036" points="449.5,405.5425,453.5,415.5425,457.5,405.5425,453.5,409.5425" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="453.5" x2="453.5" y1="200.7969" y2="220.7969"/><polygon fill="#A80036" points="449.5,210.7969,453.5,220.7969,457.5,210.7969,453.5,214.7969" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="453.5" x2="453.5" y1="449.5112" y2="469.5112"/><polygon fill="#A80036" points="449.5,459.5112,453.5,469.5112,457.5,459.5112,453.5,463.5112" style="stroke: #A80036; stroke-width: 1.0;"/><!--
2
@startuml
3

  
4
title **µRtWare**\nNode Thread\n
5

  
6

  
7

  
8
start
9
:execute setup callback;
10
note
11
  must not loop!
12
endnote
13
:suspend thread and all children (if any);
14
note
15
  threads are woken simultaneously by core
16
endnote
17
while (Termination requested?) is (no)
18
  :wait for event;
19
  note
20
    maks specified by callbacks
21
  endnote
22
  :execute loop callback;
23
  note
24
    must not loop!
25
  endnote
26
endwhile (yes)
27
:terminate thread;
28
stop
29

  
30
@enduml
31

  
32
PlantUML version 1.2018.11(Sat Sep 22 18:43:53 CEST 2018)
33
(GPL source distribution)
34
Java Runtime: OpenJDK Runtime Environment
35
JVM: OpenJDK 64-Bit Server VM
36
Java Version: 1.8.0_181-8u181-b13-0ubuntu0.16.04.1-b13
37
Operating System: Linux
38
OS Version: 4.15.0-36-generic
39
Default Encoding: UTF-8
40
Language: en
41
Country: US
42
--></g></svg>
doc/statediagrams/node/nodethread.uml
1
/'
2
µRtWare is a lightweight publish/subscribe middleware for real-time
3
applications. It was developed as part of the software habitat for the
4
Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
5

  
6
Copyright (C) 2018..2018  Thomas Schöpping et al.
7

  
8
This program is free software: you can redistribute it and/or modify
9
it under the terms of the GNU General Public License as published by
10
the Free Software Foundation, either version 3 of the License, or
11
(at your option) any later version.
12

  
13
This program is distributed in the hope that it will be useful,
14
but WITHOUT ANY WARRANTY; without even the implied warranty of
15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
GNU General Public License for more details.
17

  
18
You should have received a copy of the GNU General Public License
19
along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
'/
21

  
22
@startuml
23

  
24
title **µRtWare**\nNode Thread\n
25

  
26

  
27

  
28
start
29
:execute setup callback;
30
note
31
  must not loop!
32
endnote
33
:suspend thread and all children (if any);
34
note
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff