Statistics
| Branch: | Revision:

urtware / doc / classdiagrams / pubsub.svg @ 77bd2c61

History | View | Annotate | Download (70.146 KB)

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="827px" preserveAspectRatio="none" style="width:5557px;height:827px;" version="1.1" viewBox="0 0 5557 827" width="5557px" zoomAndPan="magnify"><defs><filter height="300%" id="f11mdjur5d2uci" 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="2725.25" y="16.708">µRtWare</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="225" x="2657.25" y="37.6611">Publish-Subscribe System</text><!--MD5=[16a3bbbe805f94d6e6ce317c08ab945e]
2
cluster subscriber--><rect fill="#FFFFFF" filter="url(#f11mdjur5d2uci)" height="498" style="stroke: #000000; stroke-width: 1.5;" width="4063" x="1473.5" y="117.3228"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="85" x="3462.5" y="132.3179">subscriber</text><!--MD5=[50a042e24f957794dab9ba3ea8701c50]
3
class urt_basesubscriber_t--><rect fill="#FEFECE" filter="url(#f11mdjur5d2uci)" height="133.6328" id="urt_basesubscriber_t" style="stroke: #A80036; stroke-width: 1.5;" width="225" x="2900" y="473.3228"/><ellipse cx="2942.45" cy="489.3228" fill="#BFAFFF" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2941.9344,489.8853 Q2940.075,489.1821 2939.4188,488.4165 Q2938.7781,487.6353 2938.7781,486.3228 Q2938.7781,484.6353 2939.8563,483.6665 Q2940.9344,482.6978 2942.8094,482.6978 Q2943.6688,482.6978 2944.5125,482.9009 Q2945.3719,483.0884 2946.2156,483.479 L2946.2156,485.8696 Q2945.4344,485.3071 2944.6063,485.0259 Q2943.7938,484.729 2942.9969,484.729 Q2942.1219,484.729 2941.6375,485.0884 Q2941.1688,485.4478 2941.1688,486.104 Q2941.1688,486.6196 2941.5125,486.9634 Q2941.8563,487.2915 2942.95,487.6978 L2944.0125,488.104 Q2945.4969,488.6509 2946.2,489.5571 Q2946.9188,490.4634 2946.9188,491.8384 Q2946.9188,493.7134 2945.8094,494.6353 Q2944.7,495.5571 2942.45,495.5571 Q2941.5281,495.5571 2940.6063,495.3384 Q2939.6844,495.1196 2938.825,494.6978 L2938.825,492.1665 Q2939.7938,492.854 2940.7156,493.1978 Q2941.6375,493.5415 2942.5281,493.5415 Q2943.4344,493.5415 2943.9344,493.1353 Q2944.4344,492.7134 2944.4344,491.979 Q2944.4344,491.4165 2944.0906,491.0103 Q2943.7625,490.5884 2943.1375,490.3384 L2941.9344,489.8853 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="132" x="2962.55" y="493.477">urt_basesubscriber_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2901" x2="3124" y1="505.3228" y2="505.3228"/><ellipse cx="2911" cy="516.3228" 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="2920" y="519.5332">topic : urt_topic_t*</text><ellipse cx="2911" cy="529.1274" 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="2920" y="532.3379">evtListener : urt_osEventListener_t</text><ellipse cx="2911" cy="541.9321" 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="2920" y="545.1426">lastMessage : urt_message_t*</text><ellipse cx="2911" cy="554.7368" 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="2920" y="557.9473">lastMessageTime : urt_osTime_t</text><ellipse cx="2911" cy="584.3462" 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="2920" y="587.5566">sumLatencies : uint64_t</text><ellipse cx="2911" cy="597.1509" 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="190" x="2920" y="600.3613">numMessagesReceived : uint64_t</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="2901" x2="2904" y1="570.9438" y2="570.9438"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="217" x="2904" y="574.2519">URT_CFG_PUBSUB_PROFILING == true</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="3121" x2="3124" y1="570.9438" y2="570.9438"/><!--MD5=[9ff46073dd541e50679ef35e851c67d6]
4
class urt_nrtsubscriber_t--><rect fill="#FEFECE" filter="url(#f11mdjur5d2uci)" height="154.4375" id="urt_nrtsubscriber_t" style="stroke: #A80036; stroke-width: 1.5;" width="821" x="3570" y="201.8228"/><ellipse cx="3916.75" cy="217.8228" fill="#BFAFFF" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M3916.2344,218.3853 Q3914.375,217.6821 3913.7188,216.9165 Q3913.0781,216.1353 3913.0781,214.8228 Q3913.0781,213.1353 3914.1563,212.1665 Q3915.2344,211.1978 3917.1094,211.1978 Q3917.9688,211.1978 3918.8125,211.4009 Q3919.6719,211.5884 3920.5156,211.979 L3920.5156,214.3696 Q3919.7344,213.8071 3918.9063,213.5259 Q3918.0938,213.229 3917.2969,213.229 Q3916.4219,213.229 3915.9375,213.5884 Q3915.4688,213.9478 3915.4688,214.604 Q3915.4688,215.1196 3915.8125,215.4634 Q3916.1563,215.7915 3917.25,216.1978 L3918.3125,216.604 Q3919.7969,217.1509 3920.5,218.0571 Q3921.2188,218.9634 3921.2188,220.3384 Q3921.2188,222.2134 3920.1094,223.1353 Q3919,224.0571 3916.75,224.0571 Q3915.8281,224.0571 3914.9063,223.8384 Q3913.9844,223.6196 3913.125,223.1978 L3913.125,220.6665 Q3914.0938,221.354 3915.0156,221.6978 Q3915.9375,222.0415 3916.8281,222.0415 Q3917.7344,222.0415 3918.2344,221.6353 Q3918.7344,221.2134 3918.7344,220.479 Q3918.7344,219.9165 3918.3906,219.5103 Q3918.0625,219.0884 3917.4375,218.8384 L3916.2344,218.3853 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="119" x="3937.25" y="221.977">urt_nrtsubscriber_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="3571" x2="4390" y1="233.8228" y2="233.8228"/><ellipse cx="3581" cy="261.6274" 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="3590" y="264.8379">minLatency : urt_delay_t</text><ellipse cx="3581" cy="274.4321" 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="3590" y="277.6426">maxLatency : urt_delay_t</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="3571" x2="3872" y1="248.2251" y2="248.2251"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="217" x="3872" y="251.5332">URT_CFG_PUBSUB_PROFILING == true</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="4089" x2="4390" y1="248.2251" y2="248.2251"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="3571" x2="4390" y1="284.2368" y2="284.2368"/><ellipse cx="3581" cy="295.2368" 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="347" x="3590" y="298.4473">urtNrtSubscriberInit (subscriber : urt_nrtsubscriber_t*) : void</text><ellipse cx="3581" cy="308.0415" 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="715" x="3590" y="311.2519">urtNrtSubscriberSubscribe (subscriber : urt_nrtsubscriber_t*, topic : urt_topic_t*, messages : urt_message_t*) : urt_status_t</text><ellipse cx="3581" cy="320.8462" 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="785" x="3590" y="324.0566">urtNrtSubscriberFetchNextMessage (subscriber : urt_nrtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t</text><ellipse cx="3581" cy="333.6509" 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="795" x="3590" y="336.8613">urtNrtSubscriberFetchLatestMessage (subscriber : urt_nrtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t</text><ellipse cx="3581" cy="346.4556" 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="446" x="3590" y="349.666">urtNrtSubscriberUnsubscribe (subscriber : urt_nrtsubscriber_t*) : urt_status_t</text><!--MD5=[5c7929572d87ccc448d875bea5da0fb1]
5
class urt_srtsubscriber_t--><rect fill="#FEFECE" filter="url(#f11mdjur5d2uci)" height="192.8516" id="urt_srtsubscriber_t" style="stroke: #A80036; stroke-width: 1.5;" width="1044" x="2490.5" y="182.3228"/><ellipse cx="2949.25" cy="198.3228" fill="#BFAFFF" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2948.7344,198.8853 Q2946.875,198.1821 2946.2188,197.4165 Q2945.5781,196.6353 2945.5781,195.3228 Q2945.5781,193.6353 2946.6563,192.6665 Q2947.7344,191.6978 2949.6094,191.6978 Q2950.4688,191.6978 2951.3125,191.9009 Q2952.1719,192.0884 2953.0156,192.479 L2953.0156,194.8696 Q2952.2344,194.3071 2951.4063,194.0259 Q2950.5938,193.729 2949.7969,193.729 Q2948.9219,193.729 2948.4375,194.0884 Q2947.9688,194.4478 2947.9688,195.104 Q2947.9688,195.6196 2948.3125,195.9634 Q2948.6563,196.2915 2949.75,196.6978 L2950.8125,197.104 Q2952.2969,197.6509 2953,198.5571 Q2953.7188,199.4634 2953.7188,200.8384 Q2953.7188,202.7134 2952.6094,203.6353 Q2951.5,204.5571 2949.25,204.5571 Q2948.3281,204.5571 2947.4063,204.3384 Q2946.4844,204.1196 2945.625,203.6978 L2945.625,201.1665 Q2946.5938,201.854 2947.5156,202.1978 Q2948.4375,202.5415 2949.3281,202.5415 Q2950.2344,202.5415 2950.7344,202.1353 Q2951.2344,201.7134 2951.2344,200.979 Q2951.2344,200.4165 2950.8906,200.0103 Q2950.5625,199.5884 2949.9375,199.3384 L2948.7344,198.8853 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="2969.75" y="202.477">urt_srtsubscriber_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2491.5" x2="3533.5" y1="214.3228" y2="214.3228"/><ellipse cx="2501.5" cy="225.3228" 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="189" x="2510.5" y="228.5332">usefulnesscb : urt_usefulness_f*</text><ellipse cx="2501.5" cy="238.1274" 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="2510.5" y="241.3379">cbparams : void*</text><ellipse cx="2501.5" cy="267.7368" 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="2510.5" y="270.9473">minLatency : urt_delay_t</text><ellipse cx="2501.5" cy="280.5415" 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="2510.5" y="283.7519">maxLatency : urt_delay_t</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="2491.5" x2="2904" y1="254.3345" y2="254.3345"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="217" x="2904" y="257.6426">URT_CFG_PUBSUB_PROFILING == true</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="3121" x2="3533.5" y1="254.3345" y2="254.3345"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2491.5" x2="3533.5" y1="290.3462" y2="290.3462"/><ellipse cx="2501.5" cy="301.3462" 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="347" x="2510.5" y="304.5566">urtSrtSubscriberInit (subscriber : urt_srtsubscriber_t*) : void</text><ellipse cx="2501.5" cy="314.1509" 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="1018" x="2510.5" y="317.3613">urtSrtSubscriberSubscribe (subscriber : urt_srtsubscriber_t*, topic : urt_topic_t*, messages : urt_message_t*, usefulnesscb : urt_usefulness_f*, cbparams : void*) : urt_status_t</text><ellipse cx="2501.5" cy="326.9556" 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="785" x="2510.5" y="330.166">urtSrtSubscriberFetchNextMessage (subscriber : urt_srtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t</text><ellipse cx="2501.5" cy="339.7603" 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="795" x="2510.5" y="342.9707">urtSrtSubscriberFetchLatestMessage (subscriber : urt_srtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t</text><ellipse cx="2501.5" cy="352.5649" 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="570" x="2510.5" y="355.7754">urtSrtSubscriberCalculateUsefulness (subscriber : urt_srtsubscriber_t*, latency : urt_delay_t) : float</text><ellipse cx="2501.5" cy="365.3696" 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="446" x="2510.5" y="368.5801">urtSrtSubscriberUnsubscribe (subscriber : urt_srtsubscriber_t*) : urt_status_t</text><!--MD5=[17838fb05fe219fd399839979ec8a4a4]
6
class urt_frtsubscriber_t--><rect fill="#FEFECE" filter="url(#f11mdjur5d2uci)" height="226.4609" id="urt_frtsubscriber_t" style="stroke: #A80036; stroke-width: 1.5;" width="974" x="1481.5" y="165.8228"/><ellipse cx="1906.75" cy="181.8228" fill="#BFAFFF" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1906.2344,182.3853 Q1904.375,181.6821 1903.7188,180.9165 Q1903.0781,180.1353 1903.0781,178.8228 Q1903.0781,177.1353 1904.1563,176.1665 Q1905.2344,175.1978 1907.1094,175.1978 Q1907.9688,175.1978 1908.8125,175.4009 Q1909.6719,175.5884 1910.5156,175.979 L1910.5156,178.3696 Q1909.7344,177.8071 1908.9063,177.5259 Q1908.0938,177.229 1907.2969,177.229 Q1906.4219,177.229 1905.9375,177.5884 Q1905.4688,177.9478 1905.4688,178.604 Q1905.4688,179.1196 1905.8125,179.4634 Q1906.1563,179.7915 1907.25,180.1978 L1908.3125,180.604 Q1909.7969,181.1509 1910.5,182.0571 Q1911.2188,182.9634 1911.2188,184.3384 Q1911.2188,186.2134 1910.1094,187.1353 Q1909,188.0571 1906.75,188.0571 Q1905.8281,188.0571 1904.9063,187.8384 Q1903.9844,187.6196 1903.125,187.1978 L1903.125,184.6665 Q1904.0938,185.354 1905.0156,185.6978 Q1905.9375,186.0415 1906.8281,186.0415 Q1907.7344,186.0415 1908.2344,185.6353 Q1908.7344,185.2134 1908.7344,184.479 Q1908.7344,183.9165 1908.3906,183.5103 Q1908.0625,183.0884 1907.4375,182.8384 L1906.2344,182.3853 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="115" x="1927.25" y="185.977">urt_frtsubscriber_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1482.5" x2="2454.5" y1="197.8228" y2="197.8228"/><ellipse cx="1492.5" cy="225.6274" 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="1501.5" y="228.8379">deadlineOffset : urt_delay_t</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="1482.5" x2="1823" y1="212.2251" y2="212.2251"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="291" x="1823" y="215.5332">URT_CFG_PUBSUB_QOS_DEADLINECHECKS == true</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="2114" x2="2454.5" y1="212.2251" y2="212.2251"/><ellipse cx="1492.5" cy="255.2368" 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="124" x="1501.5" y="258.4473">maxJitter : urt_delay_t</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="1482.5" x2="1833" y1="241.8345" y2="241.8345"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="271" x="1833" y="245.1426">URT_CFG_PUBSUB_QOS_JITTERCHECKS == true</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="2104" x2="2454.5" y1="241.8345" y2="241.8345"/><ellipse cx="1492.5" cy="284.8462" 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="1501.5" y="288.0566">minLatency : urt_delay_t</text><ellipse cx="1492.5" cy="297.6509" 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="1501.5" y="300.8613">maxLatency : urt_delay_t</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="1482.5" x2="1714.5" y1="271.4438" y2="271.4438"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="508" x="1714.5" y="274.7519">URT_CFG_PUBSUB_QOS_JITTERCHECKS == true ||  URT_CFG_PUBSUB_PROFILING == true</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="2222.5" x2="2454.5" y1="271.4438" y2="271.4438"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1482.5" x2="2454.5" y1="307.4556" y2="307.4556"/><ellipse cx="1492.5" cy="318.4556" 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="342" x="1501.5" y="321.666">urtFrtSubscriberInit (subscriber : urt_frtsubscriber_t*) : void</text><ellipse cx="1492.5" cy="331.2603" 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="948" x="1501.5" y="334.4707">urtFrtSubscriberSubscribe (subscriber : urt_frtsubscriber_t*, topic : urt_topic_t*, messages : urt_message_t*, deadline : urt_delay_t, jitter : urt_delay_t) : urt_status_t</text><ellipse cx="1492.5" cy="344.0649" 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="780" x="1501.5" y="347.2754">urtFrtSubscriberFetchNextMessage (subscriber : urt_frtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t</text><ellipse cx="1492.5" cy="356.8696" 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="790" x="1501.5" y="360.0801">urtFrtSubscriberFetchLatestMessage (subscriber : urt_frtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t</text><ellipse cx="1492.5" cy="369.6743" 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="540" x="1501.5" y="372.8848">urtFrtSubscriberCalculateValidity (subscriber : urt_frtsubscriber_t*, latency : urt_delay_t) : bool</text><ellipse cx="1492.5" cy="382.479" 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="441" x="1501.5" y="385.6894">urtFrtSubscriberUnsubscribe (subscriber : urt_frtsubscriber_t*) : urt_status_t</text><!--MD5=[104dc879e5721421b987fcc467bc3a1d]
7
class urt_hrtsubscriber_t--><rect fill="#FEFECE" filter="url(#f11mdjur5d2uci)" height="268.875" id="urt_hrtsubscriber_t" style="stroke: #A80036; stroke-width: 1.5;" width="1084" x="4426.5" y="144.3228"/><ellipse cx="4904.75" cy="160.3228" fill="#BFAFFF" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M4904.2344,160.8853 Q4902.375,160.1821 4901.7188,159.4165 Q4901.0781,158.6353 4901.0781,157.3228 Q4901.0781,155.6353 4902.1563,154.6665 Q4903.2344,153.6978 4905.1094,153.6978 Q4905.9688,153.6978 4906.8125,153.9009 Q4907.6719,154.0884 4908.5156,154.479 L4908.5156,156.8696 Q4907.7344,156.3071 4906.9063,156.0259 Q4906.0938,155.729 4905.2969,155.729 Q4904.4219,155.729 4903.9375,156.0884 Q4903.4688,156.4478 4903.4688,157.104 Q4903.4688,157.6196 4903.8125,157.9634 Q4904.1563,158.2915 4905.25,158.6978 L4906.3125,159.104 Q4907.7969,159.6509 4908.5,160.5571 Q4909.2188,161.4634 4909.2188,162.8384 Q4909.2188,164.7134 4908.1094,165.6353 Q4907,166.5571 4904.75,166.5571 Q4903.8281,166.5571 4902.9063,166.3384 Q4901.9844,166.1196 4901.125,165.6978 L4901.125,163.1665 Q4902.0938,163.854 4903.0156,164.1978 Q4903.9375,164.5415 4904.8281,164.5415 Q4905.7344,164.5415 4906.2344,164.1353 Q4906.7344,163.7134 4906.7344,162.979 Q4906.7344,162.4165 4906.3906,162.0103 Q4906.0625,161.5884 4905.4375,161.3384 L4904.2344,160.8853 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="119" x="4925.25" y="164.477">urt_hrtsubscriber_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="4427.5" x2="5509.5" y1="176.3228" y2="176.3228"/><ellipse cx="4437.5" cy="187.3228" 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="151" x="4446.5" y="190.5332">next : urt_hrtsubscriber_t*</text><ellipse cx="4437.5" cy="216.9321" 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="4446.5" y="220.1426">deadlineOffset : urt_delay_t</text><ellipse cx="4437.5" cy="229.7368" 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="4446.5" y="232.9473">qosDeadlineTimer : urt_osTimer_t</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="4427.5" x2="4823" y1="203.5298" y2="203.5298"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="291" x="4823" y="206.8379">URT_CFG_PUBSUB_QOS_DEADLINECHECKS == true</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="5114" x2="5509.5" y1="203.5298" y2="203.5298"/><ellipse cx="4437.5" cy="259.3462" 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="124" x="4446.5" y="262.5566">maxJitter : urt_delay_t</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="4427.5" x2="4833" y1="245.9438" y2="245.9438"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="271" x="4833" y="249.2519">URT_CFG_PUBSUB_QOS_JITTERCHECKS == true</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="5104" x2="5509.5" y1="245.9438" y2="245.9438"/><ellipse cx="4437.5" cy="288.9556" 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="4446.5" y="292.166">minLatency : urt_delay_t</text><ellipse cx="4437.5" cy="301.7603" 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="4446.5" y="304.9707">maxLatency : urt_delay_t</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="4427.5" x2="4716.5" y1="275.5532" y2="275.5532"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="504" x="4716.5" y="278.8613">URT_CFG_PUBSUB_QOS_JITTERCHECKS == true || URT_CFG_PUBSUB_PROFILING == true</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="5220.5" x2="5509.5" y1="275.5532" y2="275.5532"/><ellipse cx="4437.5" cy="331.3696" 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="4446.5" y="334.5801">expectedRate : urt_delay_t</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="4427.5" x2="4836" y1="317.9673" y2="317.9673"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="265" x="4836" y="321.2754">URT_CFG_PUBSUB_QOS_RATECHECKS == true</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="5101" x2="5509.5" y1="317.9673" y2="317.9673"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="4427.5" x2="5509.5" y1="341.1743" y2="341.1743"/><ellipse cx="4437.5" cy="352.1743" 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="347" x="4446.5" y="355.3848">urtHrtSubscriberInit (subscriber : urt_hrtsubscriber_t*) : void</text><ellipse cx="4437.5" cy="364.979" 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="1058" x="4446.5" y="368.1894">urtHrtSubscriberSubscribe (subscriber : urt_hrtsubscriber_t*, topic : urt_topic_t*, messages : urt_message_t*, deadline : urt_delay_t, rate : urt_delay_t, jitter : urt_delay_t) : urt_status_t</text><ellipse cx="4437.5" cy="377.7837" 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="785" x="4446.5" y="380.9941">urtHrtSubscriberFetchNextMessage (subscriber : urt_hrtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t</text><ellipse cx="4437.5" cy="390.5884" 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="795" x="4446.5" y="393.7988">urtHrtSubscriberFetchLatestMessage (subscriber : urt_hrtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t</text><ellipse cx="4437.5" cy="403.3931" 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="446" x="4446.5" y="406.6035">urtHrtSubscriberUnsubscribe (subscriber : urt_hrtsubscriber_t*) : urt_status_t</text><!--MD5=[e602aa6d45f270ad04f88c9ca5352b33]
8
class urt_message_t--><rect fill="#FEFECE" filter="url(#f11mdjur5d2uci)" height="141.6328" id="urt_message_t" style="stroke: #A80036; stroke-width: 1.5;" width="406" x="923.5" y="667.3228"/><ellipse cx="1076.25" cy="683.3228" fill="#BFAFFF" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1075.7344,683.8853 Q1073.875,683.1821 1073.2188,682.4165 Q1072.5781,681.6353 1072.5781,680.3228 Q1072.5781,678.6353 1073.6563,677.6665 Q1074.7344,676.6978 1076.6094,676.6978 Q1077.4688,676.6978 1078.3125,676.9009 Q1079.1719,677.0884 1080.0156,677.479 L1080.0156,679.8696 Q1079.2344,679.3071 1078.4063,679.0259 Q1077.5938,678.729 1076.7969,678.729 Q1075.9219,678.729 1075.4375,679.0884 Q1074.9688,679.4478 1074.9688,680.104 Q1074.9688,680.6196 1075.3125,680.9634 Q1075.6563,681.2915 1076.75,681.6978 L1077.8125,682.104 Q1079.2969,682.6509 1080,683.5571 Q1080.7188,684.4634 1080.7188,685.8384 Q1080.7188,687.7134 1079.6094,688.6353 Q1078.5,689.5571 1076.25,689.5571 Q1075.3281,689.5571 1074.4063,689.3384 Q1073.4844,689.1196 1072.625,688.6978 L1072.625,686.1665 Q1073.5938,686.854 1074.5156,687.1978 Q1075.4375,687.5415 1076.3281,687.5415 Q1077.2344,687.5415 1077.7344,687.1353 Q1078.2344,686.7134 1078.2344,685.979 Q1078.2344,685.4165 1077.8906,685.0103 Q1077.5625,684.5884 1076.9375,684.3384 L1075.7344,683.8853 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="92" x="1096.75" y="687.477">urt_message_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="924.5" x2="1328.5" y1="699.3228" y2="699.3228"/><ellipse cx="934.5" cy="710.3228" 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="943.5" y="713.5332">next : urt_message_t*</text><ellipse cx="934.5" cy="723.1274" 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="943.5" y="726.3379">payload : void*</text><ellipse cx="934.5" cy="735.9321" 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="943.5" y="739.1426">originTime : urt_osTime_t</text><ellipse cx="934.5" cy="748.7368" 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="943.5" y="751.9473">numHrtConsumersLeft : unsigned int</text><ellipse cx="934.5" cy="778.3462" 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="943.5" y="781.5566">numConsumersLeft : unsigned int</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="924.5" x2="1018" y1="764.9438" y2="764.9438"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="217" x="1018" y="768.2519">URT_CFG_PUBSUB_PROFILING == true</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="1235" x2="1328.5" y1="764.9438" y2="764.9438"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="924.5" x2="1328.5" y1="788.1509" y2="788.1509"/><ellipse cx="934.5" cy="799.1509" 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="943.5" y="802.3613">urtMessageInit (message : urt_message_t*, payload : void*) : void</text><!--MD5=[2ac85a9c1cceb8bb0c9045edc105e6e3]
9
class urt_publisher_t--><rect fill="#FEFECE" filter="url(#f11mdjur5d2uci)" height="196.0469" id="urt_publisher_t" style="stroke: #A80036; stroke-width: 1.5;" width="783" x="7" y="180.8228"/><ellipse cx="347.75" cy="196.8228" fill="#BFAFFF" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M347.2344,197.3853 Q345.375,196.6821 344.7188,195.9165 Q344.0781,195.1353 344.0781,193.8228 Q344.0781,192.1353 345.1563,191.1665 Q346.2344,190.1978 348.1094,190.1978 Q348.9688,190.1978 349.8125,190.4009 Q350.6719,190.5884 351.5156,190.979 L351.5156,193.3696 Q350.7344,192.8071 349.9063,192.5259 Q349.0938,192.229 348.2969,192.229 Q347.4219,192.229 346.9375,192.5884 Q346.4688,192.9478 346.4688,193.604 Q346.4688,194.1196 346.8125,194.4634 Q347.1563,194.7915 348.25,195.1978 L349.3125,195.604 Q350.7969,196.1509 351.5,197.0571 Q352.2188,197.9634 352.2188,199.3384 Q352.2188,201.2134 351.1094,202.1353 Q350,203.0571 347.75,203.0571 Q346.8281,203.0571 345.9063,202.8384 Q344.9844,202.6196 344.125,202.1978 L344.125,199.6665 Q345.0938,200.354 346.0156,200.6978 Q346.9375,201.0415 347.8281,201.0415 Q348.7344,201.0415 349.2344,200.6353 Q349.7344,200.2134 349.7344,199.479 Q349.7344,198.9165 349.3906,198.5103 Q349.0625,198.0884 348.4375,197.8384 L347.2344,197.3853 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="93" x="368.25" y="200.977">urt_publisher_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="8" x2="789" y1="212.8228" y2="212.8228"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="289" x="13" y="227.0332">URT_PUBSUB_PUBLISHER_PUBLISH_TIMEOUT : bool</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="8" x2="789" y1="233.6274" y2="233.6274"/><ellipse cx="18" cy="244.6274" 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="27" y="247.8379">topic : urt_topic_t*</text><ellipse cx="18" cy="274.2368" 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="27" y="277.4473">publishAttempts : uint64_t</text><ellipse cx="18" cy="287.0415" 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="124" x="27" y="290.2519">publishFails : uint64_t</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="8" x2="290" y1="260.8345" y2="260.8345"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="217" x="290" y="264.1426">URT_CFG_PUBSUB_PROFILING == true</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="507" x2="789" y1="260.8345" y2="260.8345"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="8" x2="789" y1="296.8462" y2="296.8462"/><ellipse cx="18" cy="307.8462" 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="572" x="27" y="311.0566">urtPublisherInit (publisher : urt_publisher_t*, topic : urt_topic_t*, messages : urt_message_t*) : void</text><ellipse cx="18" cy="337.4556" 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="632" x="27" y="340.666">urtPublisherPublish (publisher : urt_publisher_t*, payload : void*, bytes : size_t, t : urt_osTime_t) : urt_status_t</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="8" x2="245" y1="324.0532" y2="324.0532"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="307" x="245" y="327.3613">URT_PUBSUB_PUBLISHER_PUBLISH_TIMEOUT == false</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="552" x2="789" y1="324.0532" y2="324.0532"/><ellipse cx="18" cy="367.0649" 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="757" x="27" y="370.2754">urtPublisherPublish (publisher : urt_publisher_t*, payload : void*, bytes : size_t, t : urt_osTime_t, timeout : urt_delay_t) : urt_status_t</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="8" x2="247.5" y1="353.6626" y2="353.6626"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="302" x="247.5" y="356.9707">URT_PUBSUB_PUBLISHER_PUBLISH_TIMEOUT == true</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="549.5" x2="789" y1="353.6626" y2="353.6626"/><!--MD5=[a1b1e66ec52c209a9fa2dab315cd7630]
10
class urt_topic_t--><rect fill="#FEFECE" filter="url(#f11mdjur5d2uci)" height="260.875" id="urt_topic_t" style="stroke: #A80036; stroke-width: 1.5;" width="603" x="825" y="148.3228"/><ellipse cx="1089.25" cy="164.3228" fill="#BFAFFF" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1088.7344,164.8853 Q1086.875,164.1821 1086.2188,163.4165 Q1085.5781,162.6353 1085.5781,161.3228 Q1085.5781,159.6353 1086.6563,158.6665 Q1087.7344,157.6978 1089.6094,157.6978 Q1090.4688,157.6978 1091.3125,157.9009 Q1092.1719,158.0884 1093.0156,158.479 L1093.0156,160.8696 Q1092.2344,160.3071 1091.4063,160.0259 Q1090.5938,159.729 1089.7969,159.729 Q1088.9219,159.729 1088.4375,160.0884 Q1087.9688,160.4478 1087.9688,161.104 Q1087.9688,161.6196 1088.3125,161.9634 Q1088.6563,162.2915 1089.75,162.6978 L1090.8125,163.104 Q1092.2969,163.6509 1093,164.5571 Q1093.7188,165.4634 1093.7188,166.8384 Q1093.7188,168.7134 1092.6094,169.6353 Q1091.5,170.5571 1089.25,170.5571 Q1088.3281,170.5571 1087.4063,170.3384 Q1086.4844,170.1196 1085.625,169.6978 L1085.625,167.1665 Q1086.5938,167.854 1087.5156,168.1978 Q1088.4375,168.5415 1089.3281,168.5415 Q1090.2344,168.5415 1090.7344,168.1353 Q1091.2344,167.7134 1091.2344,166.979 Q1091.2344,166.4165 1090.8906,166.0103 Q1090.5625,165.5884 1089.9375,165.3384 L1088.7344,164.8853 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="66" x="1109.75" y="168.477">urt_topic_t</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="826" x2="1427" y1="180.3228" y2="180.3228"/><ellipse cx="836" cy="191.3228" 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="845" y="194.5332">next : urt_topic_t*</text><ellipse cx="836" cy="204.1274" 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="845" y="207.3379">id : urt_topicid_t</text><ellipse cx="836" cy="216.9321" 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="845" y="220.1426">lock : urt_osMutex_t</text><ellipse cx="836" cy="229.7368" 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="845" y="232.9473">evtSource : urt_osEventSource_t</text><ellipse cx="836" cy="242.5415" 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="845" y="245.7519">numHrtSubscribers : unsigned int</text><ellipse cx="836" cy="255.3462" 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="173" x="845" y="258.5566">hrtReleased : urt_osCondvar_t</text><ellipse cx="836" cy="268.1509" 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="845" y="271.3613">mandatoryMessage : urt_message_t</text><ellipse cx="836" cy="280.9556" 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="845" y="284.166">latestMessage : urt_message_t*</text><ellipse cx="836" cy="310.5649" 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="212" x="845" y="313.7754">hrtSubscribers : urt_hrtsubscriber_t*</text><ellipse cx="836" cy="323.3696" 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="170" x="845" y="326.5801">qosRateTimer : urt_osTimer_t</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="826" x2="994" y1="297.1626" y2="297.1626"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="265" x="994" y="300.4707">URT_CFG_PUBSUB_QOS_RATECHECKS == true</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="1259" x2="1427" y1="297.1626" y2="297.1626"/><ellipse cx="836" cy="352.979" 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="195" x="845" y="356.1894">numMessagesPublished : uint64_t</text><ellipse cx="836" cy="365.7837" 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="197" x="845" y="368.9941">numMessagesDiscarded : uint64_t</text><ellipse cx="836" cy="378.5884" 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="845" y="381.7988">numSubscribers : unsigned int</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="826" x2="1018" y1="339.5767" y2="339.5767"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="217" x="1018" y="342.8848">URT_CFG_PUBSUB_PROFILING == true</text><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 1.0,2.0;" x1="1235" x2="1427" y1="339.5767" y2="339.5767"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="826" x2="1427" y1="388.3931" y2="388.3931"/><ellipse cx="836" cy="399.3931" 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="577" x="845" y="402.6035">urtTopicInit (topic : urt_topic_t*, id : urt_topicid_t, mandatoryMessage: urt_message_t*) : urt_status_t</text><!--MD5=[536025241394544a90bc53fb552f3a08]
11
reverse link urt_message_t to urt_message_t--><path d="M1342.0028,711.9298 C1356.0209,718.0822 1364.5,726.8799 1364.5,738.3228 C1364.5,752.8248 1350.8815,763.0781 1329.6293,769.0828 " fill="none" id="urt_message_t&lt;-urt_message_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="1329.6293,707.5628,1333.956,713.3316,1340.9452,711.5565,1336.6185,705.7877,1329.6293,707.5628" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1337.7203" y="703.1449">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="20" x="1337.2886" y="766.9945">0,1</text><!--MD5=[aa8990705afdbad14c7f998fe04b6f05]
12
reverse link urt_basesubscriber_t to urt_message_t--><path d="M2886.8336,553.5158 C2567.1591,587.0765 1720.724,675.9387 1329.7427,716.9856 " fill="none" id="urt_basesubscriber_t&lt;-urt_message_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="2899.8207,552.1523,2893.4358,548.8006,2887.8863,553.4053,2894.2712,556.7569,2899.8207,552.1523" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="2883.9813" y="549.5268">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="20" x="1337.4061" y="728.5642">0,1</text><!--MD5=[0585cd4928de92ce6927d9c389eadd29]
13
link urt_nrtsubscriber_t to urt_basesubscriber_t--><path d="M3746.2283,355.8554 C3683.5669,375.5229 3615.689,395.9888 3552.5,413.3228 C3414.3193,451.2285 3254.3631,487.97 3144.6129,512.0977 " fill="none" id="urt_nrtsubscriber_t-&gt;urt_basesubscriber_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="3146.0966,518.9386,3125.0621,516.3791,3143.1016,505.2627,3146.0966,518.9386" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[6d81edfa5aa102b898ad487ae19b49f9]
14
link urt_srtsubscriber_t to urt_basesubscriber_t--><path d="M3012.5,375.4528 C3012.5,400.8001 3012.5,427.9869 3012.5,452.8265 " fill="none" id="urt_srtsubscriber_t-&gt;urt_basesubscriber_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="3019.5001,453.0478,3012.5,473.0477,3005.5001,453.0477,3019.5001,453.0478" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[f626d284cba98e1d5d5fe914b1fa4188]
15
link urt_frtsubscriber_t to urt_basesubscriber_t--><path d="M2389.1729,391.8435 C2417.6878,399.2022 2445.9994,406.4223 2473.5,413.3228 C2611.7604,448.0156 2770.6746,485.1241 2879.9377,510.2122 " fill="none" id="urt_frtsubscriber_t-&gt;urt_basesubscriber_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="2881.8156,503.4611,2899.7455,514.7535,2878.687,517.107,2881.8156,503.4611" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[1ea71f2b33e56ab0ac5545988c1af396]
16
link urt_hrtsubscriber_t to urt_basesubscriber_t--><path d="M4426.3442,410.3156 C4420.3691,411.3449 4414.4195,412.348 4408.5,413.3228 C3948.3838,489.0967 3394.9618,522.5887 3145.6847,534.6426 " fill="none" id="urt_hrtsubscriber_t-&gt;urt_basesubscriber_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="3145.7015,541.6496,3125.3912,535.6088,3145.0356,527.6655,3145.7015,541.6496" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[ea2ec5c5272e65289dabade75a749f58]
17
reverse link urt_hrtsubscriber_t to urt_hrtsubscriber_t--><path d="M5522.8399,254.5753 C5537.3539,261.2813 5545.5,269.3638 5545.5,278.8228 C5545.5,290.6929 5532.6717,300.3953 5510.5292,307.9301 " fill="none" id="urt_hrtsubscriber_t&lt;-urt_hrtsubscriber_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="5510.5292,249.7155,5514.6414,255.6391,5521.691,254.1217,5517.5788,248.198,5510.5292,249.7155" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="5518.2077" y="246.2694">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="20" x="5518.2921" y="305.3026">0,1</text><!--MD5=[54fcf25ad8c5f1d36e678e42d5bfd4cc]
18
reverse link urt_publisher_t to urt_topic_t--><path d="M803.4264,278.8228 C810.5202,278.8228 817.6139,278.8228 824.7077,278.8228 " fill="none" id="urt_publisher_t&lt;-urt_topic_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="790.2266,278.8228,796.2266,282.8228,802.2266,278.8228,796.2266,274.8228,790.2266,278.8228" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="798.2648" y="275.7382">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="808.5851" y="275.6938">1</text><!--MD5=[5025b4c4053b8e7c7ca8a657f09f21c0]
19
link urt_publisher_t to urt_message_t--><path d="M553.7813,376.8335 C690.2804,462.9891 885.9234,586.4753 1009.557,664.5105 " fill="none" id="urt_publisher_t-&gt;urt_message_t" style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 7.0,7.0;"/><polygon fill="#A80036" points="1013.9244,667.2672,1008.4487,659.0808,1009.6962,664.5984,1004.1786,665.8459,1013.9244,667.2672" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[6b2afc1defaa6ed5a86f99c07f8466dd]
20
reverse link urt_topic_t to urt_topic_t--><path d="M1440.1789,248.3591 C1454.5769,256.0731 1463,266.2277 1463,278.8228 C1463,294.6285 1449.7354,306.5908 1428.0445,314.7097 " fill="none" id="urt_topic_t&lt;-urt_topic_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="1428.0445,242.9359,1431.8902,249.0359,1439.0001,247.8322,1435.1544,241.7322,1428.0445,242.9359" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1436.1605" y="238.8537">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="20" x="1436.3199" y="312.534">0,1</text><!--MD5=[ed3fb6de0913094c41bd74c175d366df]
21
reverse link urt_topic_t to urt_hrtsubscriber_t--><path d="M1340.4758,142.25 C1385.8905,119.5486 1434.7383,99.4646 1483,87.3228 C1639.6734,47.9063 4231.5104,61.5688 4391,87.3228 C4467.3838,99.6571 4547.3368,120.6113 4622.5629,144.2429 " fill="none" id="urt_topic_t&lt;-urt_hrtsubscriber_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#FFFFFF" points="1328.6966,148.2344,1335.8576,149.0829,1339.3951,142.7991,1332.2341,141.9505,1328.6966,148.2344" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1332.1548" y="137.3255">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="20" x="4581.9853" y="133.1032">0,1</text><!--MD5=[0b5167e958c0ed93ffc0c98ce399b54d]
22
reverse link urt_topic_t to urt_message_t--><path d="M1126.5,422.7376 C1126.5,504.0857 1126.5,602.2013 1126.5,667.2092 " fill="none" id="urt_topic_t&lt;-urt_message_t" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="#A80036" points="1126.5,409.5749,1122.5,415.5749,1126.5,421.5749,1130.5,415.5749,1126.5,409.5749" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1118.2813" y="429.2095">1</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="1118.0875" y="656.1948">1</text><!--MD5=[ee7ff9c6693c901f37603259b2a8871e]
23
@startuml
24

    
25
title **µRtWare**\nPublish-Subscribe System
26

    
27
!include ./functions.iuml
28

    
29
/'### ENTITIES ###############################################################'/
30

    
31
!startsub ENTITIES
32

    
33
/' Message type. '/
34
$structure("urt_message_t") {
35
    'Pointer to the next message in a list.
36
  + {field} next : urt_message_t*
37
    'Pointer to some arbitrary (reusable) payload object.
38
  + {field} payload : void*
39
    'Origin time of the message.
40
  + {field} originTime : urt_osTime_t
41
    'Counter of HRT subscribers that did not consume the message yet.
42
  + {field} numHrtConsumersLeft : unsigned int
43
  .. URT_CFG_PUBSUB_PROFILING == true ..
44
    'Counter of overall subscribers that did not consume the message yet.
45
  + {field} numConsumersLeft : unsigned int
46
  __
47
    'Initializes a urt_message_t object.
48
  + {method} urtMessageInit (message : urt_message_t*, payload : void*) : void
49
}
50

    
51
$group("subscriber") {
52
  /' Base subscriber type. '/
53
  $structure("urt_basesubscriber_t") {
54
      'Pointer to the topic, this subscriber subscribed to.
55
    + {field} topic : urt_topic_t*
56
      'Event listener to notify the node about new messages.
57
    + {field} evtListener : urt_osEventListener_t
58
      'Pointer to the message consumed most recently.
59
    + {field} lastMessage : urt_message_t*
60
      'Copy of the origin time of the message consumed most recently.
61
    + {field} lastMessageTime : urt_osTime_t
62
    .. URT_CFG_PUBSUB_PROFILING == true ..
63
      'Sum of all latencies.
64
    + {field} sumLatencies : uint64_t
65
      'Number of messages received.
66
    + {field} numMessagesReceived : uint64_t
67
  }
68

    
69
  /' NRT subscriber type. '/
70
  $structure("urt_nrtsubscriber_t") {
71
    .. URT_CFG_PUBSUB_PROFILING == true ..
72
      'Minimum latency ever detected.
73
    + {field} minLatency : urt_delay_t
74
      'Maximum latency ever detected.
75
    + {field} maxLatency : urt_delay_t
76
    __
77
      'Initializes a urt_nrtsubscriber_t object.
78
    + {method} urtNrtSubscriberInit (subscriber : urt_nrtsubscriber_t*) : void
79
      'Tries to subscribe to a topic and optionally contributes a list of messages to the topic.
80
    + {method} urtNrtSubscriberSubscribe (subscriber : urt_nrtsubscriber_t*, topic : urt_topic_t*, messages : urt_message_t*) : urt_status_t
81
      'Fetches the next message in the buffer, optionally copies the payload and optionally returns the latency.
82
    + {method} urtNrtSubscriberFetchNextMessage (subscriber : urt_nrtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t
83
      'Fetches the latest message, optionally copies the payload and optionally returns the latency.
84
    + {method} urtNrtSubscriberFetchLatestMessage (subscriber : urt_nrtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t
85
      'Unsubscribes from a topic.
86
    + {method} urtNrtSubscriberUnsubscribe (subscriber : urt_nrtsubscriber_t*) : urt_status_t
87
  }
88

    
89
  /' SRT subscriber type. '/
90
  $structure("urt_srtsubscriber_t") {
91
      'Callback to calculate usefulness of a message
92
    + {field} usefulnesscb : urt_usefulness_f*
93
      'Optional parameters for the usefulness callback function.
94
    + {field} cbparams : void*
95
    .. URT_CFG_PUBSUB_PROFILING == true ..
96
      'Minimum latency ever detected.
97
    + {field} minLatency : urt_delay_t
98
      'Maximum latency ever detected.
99
    + {field} maxLatency : urt_delay_t
100
    __
101
      'Initializes a urt_srtsubscriber_t object.
102
    + {method} urtSrtSubscriberInit (subscriber : urt_srtsubscriber_t*) : void
103
      'Tries to subscribe to a topic, sets all parameters and optionally contributes a list of messages to the topic.
104
    + {method} urtSrtSubscriberSubscribe (subscriber : urt_srtsubscriber_t*, topic : urt_topic_t*, messages : urt_message_t*, usefulnesscb : urt_usefulness_f*, cbparams : void*) : urt_status_t
105
      'Fetches the next message in the buffer, optionally copies the payload and optionally returns the latency.
106
    + {method} urtSrtSubscriberFetchNextMessage (subscriber : urt_srtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t
107
      'Fetches the latest message, optionally copies the payload and optionally returns the latency.
108
    + {method} urtSrtSubscriberFetchLatestMessage (subscriber : urt_srtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t
109
      'Calculates the usefulness of a message after the specified delay.
110
    + {method} urtSrtSubscriberCalculateUsefulness (subscriber : urt_srtsubscriber_t*, latency : urt_delay_t) : float
111
      'Unsubscribes from a topic.
112
    + {method} urtSrtSubscriberUnsubscribe (subscriber : urt_srtsubscriber_t*) : urt_status_t
113
  }
114

    
115
  /' FRT subscriber type. '/
116
  $structure("urt_frtsubscriber_t") {
117
    .. URT_CFG_PUBSUB_QOS_DEADLINECHECKS == true ..
118
      'Maximum temporal offset between creation and consumption of messages.
119
    + {field} deadlineOffset : urt_delay_t
120
    .. URT_CFG_PUBSUB_QOS_JITTERCHECKS == true ..
121
      'Maximum expected jitter.
122
    + {field} maxJitter : urt_delay_t
123
    .. URT_CFG_PUBSUB_QOS_JITTERCHECKS == true ||  URT_CFG_PUBSUB_PROFILING == true ..
124
      'Minimum latency ever detected (to calculate jitter).
125
    + {field} minLatency : urt_delay_t
126
      'Maximum latency ever detected (to calculate jitter).
127
    + {field} maxLatency : urt_delay_t
128
    __
129
      'Initializes a urt_frtsubscriber_t object.
130
    + {method} urtFrtSubscriberInit (subscriber : urt_frtsubscriber_t*) : void
131
      'Tries to subscribe to a topic, sets all parameters and optionally contributes a list of messages to the topic.
132
    + {method} urtFrtSubscriberSubscribe (subscriber : urt_frtsubscriber_t*, topic : urt_topic_t*, messages : urt_message_t*, deadline : urt_delay_t, jitter : urt_delay_t) : urt_status_t
133
      'Fetches the next message in the buffer, optionally copies the payload and optionally returns the latency.
134
    + {method} urtFrtSubscriberFetchNextMessage (subscriber : urt_frtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t
135
      'Fetches the latest message, optionally copies the payload and optionally returns the latency.
136
    + {method} urtFrtSubscriberFetchLatestMessage (subscriber : urt_frtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t
137
      'Checks whether a message is valid after the specified delay.
138
    + {method} urtFrtSubscriberCalculateValidity (subscriber : urt_frtsubscriber_t*, latency : urt_delay_t) : bool
139
      'Unsubscribes from a topic.
140
    + {method} urtFrtSubscriberUnsubscribe (subscriber : urt_frtsubscriber_t*) : urt_status_t
141
  }
142

    
143
  /' HRT subscriber type. '/
144
  $structure("urt_hrtsubscriber_t") {
145
      'Pointer to the next HRT subscriber in a list.
146
    + {field} next : urt_hrtsubscriber_t*
147
    .. URT_CFG_PUBSUB_QOS_DEADLINECHECKS == true ..
148
      'Maximum temporal offset between creation and consumption of messages.
149
    + {field} deadlineOffset : urt_delay_t
150
      'QoS Timer to detect missed deadlines.
151
    + {field} qosDeadlineTimer : urt_osTimer_t
152
    .. URT_CFG_PUBSUB_QOS_JITTERCHECKS == true ..
153
      'Maximum expected jitter.
154
    + {field} maxJitter : urt_delay_t
155
    .. URT_CFG_PUBSUB_QOS_JITTERCHECKS == true || URT_CFG_PUBSUB_PROFILING == true..
156
      'Minimum latency ever detected (to calculate jitter).
157
    + {field} minLatency : urt_delay_t
158
      'Maximum latency ever detected (to calculate jitter).
159
    + {field} maxLatency : urt_delay_t
160
    .. URT_CFG_PUBSUB_QOS_RATECHECKS == true ..
161
      'Expected rate at which data is published.
162
    + {field} expectedRate : urt_delay_t
163
    __
164
      'Initializes a urt_hrtsubscriber_t object.
165
    + {method} urtHrtSubscriberInit (subscriber : urt_hrtsubscriber_t*) : void
166
      'Tries to subscribe to a topic, sets all parameters and optionally contributes a list of messages to the topic.
167
    + {method} urtHrtSubscriberSubscribe (subscriber : urt_hrtsubscriber_t*, topic : urt_topic_t*, messages : urt_message_t*, deadline : urt_delay_t, rate : urt_delay_t, jitter : urt_delay_t) : urt_status_t
168
      'Fetches the next message in the buffer, optionally copies the payload and optionally returns the latency.
169
    + {method} urtHrtSubscriberFetchNextMessage (subscriber : urt_hrtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t
170
      'Fetches the latest message, optionally copies the payload and optionally returns the latency.
171
    + {method} urtHrtSubscriberFetchLatestMessage (subscriber : urt_hrtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t
172
      'Unsubscribes from a topic.
173
    + {method} urtHrtSubscriberUnsubscribe (subscriber : urt_hrtsubscriber_t*) : urt_status_t
174
  }
175
} /'subscriber'/
176

    
177
/' Publisher type. '/
178
$structure("urt_publisher_t") {
179
  'Flag, whether the publish() method supports timeout.
180
  URT_PUBSUB_PUBLISHER_PUBLISH_TIMEOUT : bool
181
  __
182
    'Pointer to the topic for publishing.
183
  + {field} topic : urt_topic_t*
184
  .. URT_CFG_PUBSUB_PROFILING == true ..
185
    'Counter of attempts to publish a message.
186
  + {field} publishAttempts : uint64_t
187
    'Counter of failed attempts to publish a message.
188
  + {field} publishFails : uint64_t
189
  __
190
    'Initializes a urt_publisher_t object and contributes an optional list of messages.
191
  + {method} urtPublisherInit (publisher : urt_publisher_t*, topic : urt_topic_t*, messages : urt_message_t*) : void
192
  .. URT_PUBSUB_PUBLISHER_PUBLISH_TIMEOUT == false ..
193
    'Publishes a message via the associated topic.
194
  + {method} urtPublisherPublish (publisher : urt_publisher_t*, payload : void*, bytes : size_t, t : urt_osTime_t) : urt_status_t
195
  .. URT_PUBSUB_PUBLISHER_PUBLISH_TIMEOUT == true ..
196
    'Publishes a message via the associated topic with timeout.
197
  + {method} urtPublisherPublish (publisher : urt_publisher_t*, payload : void*, bytes : size_t, t : urt_osTime_t, timeout : urt_delay_t) : urt_status_t
198
}
199

    
200
/' Topic type. '/
201
$structure("urt_topic_t") {
202
    'Pointer to the next topic in a list.
203
  + {field} next : urt_topic_t*
204
    'Identifier of the topic.
205
  + {field} id : urt_topicid_t
206
    'Mutex lock for exclusive access.
207
  + {field} lock : urt_osMutex_t
208
    'Event source to inform all subscribers when a new message is published.
209
  + {field} evtSource : urt_osEventSource_t
210
    'Number of HRT subscribers.
211
  + {field} numHrtSubscribers : unsigned int
212
    'Condition variable to inform waiting publishers when a blocked message becomes available.
213
  + {field} hrtReleased : urt_osCondvar_t
214
    'Mandatory message, each Topic holds.
215
  + {field} mandatoryMessage : urt_message_t
216
    'Pointer to the latest message.
217
  + {field} latestMessage : urt_message_t*
218
  .. URT_CFG_PUBSUB_QOS_RATECHECKS == true ..
219
    'List of HRT subscribers, orderd by their expected rate (most critical first).
220
  + {field} hrtSubscribers : urt_hrtsubscriber_t*
221
    'Timer to check for missed rates.
222
  + {field} qosRateTimer : urt_osTimer_t
223
  .. URT_CFG_PUBSUB_PROFILING == true ..
224
    'Number of overall published messages on this topic.
225
  + {field} numMessagesPublished : uint64_t
226
    'Variable to count how often (non-hrt) subscribers did not fetch a message before it was reused.
227
  + {field} numMessagesDiscarded : uint64_t
228
    'Number of overall subscribers.
229
  + {field} numSubscribers : unsigned int
230
  __
231
    'Initializes an urt_topic_t object.
232
  + {method} urtTopicInit (topic : urt_topic_t*, id : urt_topicid_t, mandatoryMessage: urt_message_t*) : urt_status_t
233
}
234

    
235
!endsub
236

    
237
/'### DEPENDENCIES & LAYOUT ##################################################'/
238

    
239
!startsub DEPENDENCIES
240

    
241
urt_message_t "1" o- "0,1" urt_message_t
242

    
243
urt_basesubscriber_t "1" o- - "0,1" urt_message_t
244

    
245
urt_nrtsubscriber_t - -|> urt_basesubscriber_t
246

    
247
urt_srtsubscriber_t - -|> urt_basesubscriber_t
248

    
249
urt_frtsubscriber_t - -|> urt_basesubscriber_t
250

    
251
urt_hrtsubscriber_t - -|> urt_basesubscriber_t
252
urt_hrtsubscriber_t "1" o- "0,1" urt_hrtsubscriber_t
253

    
254
urt_publisher_t "1" o- "1" urt_topic_t
255
urt_publisher_t ..> urt_message_t
256

    
257
urt_topic_t "1" o- "0,1" urt_topic_t
258
urt_topic_t "1" o- "0,1" urt_hrtsubscriber_t
259
urt_topic_t "1" *- - "1" urt_message_t
260

    
261
!endsub
262

    
263
/'### OUTRO ##################################################################'/
264

    
265
@enduml
266

    
267
@startuml
268

    
269
title **µRtWare**\nPublish-Subscribe System
270

    
271

    
272

    
273

    
274

    
275

    
276

    
277

    
278

    
279

    
280

    
281

    
282
  class urt_message_t <<S,BFAFFF>> {
283
  + {field} next : urt_message_t*
284
  + {field} payload : void*
285
  + {field} originTime : urt_osTime_t
286
  + {field} numHrtConsumersLeft : unsigned int
287
  .. URT_CFG_PUBSUB_PROFILING == true ..
288
  + {field} numConsumersLeft : unsigned int
289
  __
290
  + {method} urtMessageInit (message : urt_message_t*, payload : void*) : void
291
}
292

    
293
  package "subscriber" <<Rectangle>> {
294
    class urt_basesubscriber_t <<S,BFAFFF>> {
295
    + {field} topic : urt_topic_t*
296
    + {field} evtListener : urt_osEventListener_t
297
    + {field} lastMessage : urt_message_t*
298
    + {field} lastMessageTime : urt_osTime_t
299
    .. URT_CFG_PUBSUB_PROFILING == true ..
300
    + {field} sumLatencies : uint64_t
301
    + {field} numMessagesReceived : uint64_t
302
  }
303

    
304
    class urt_nrtsubscriber_t <<S,BFAFFF>> {
305
    .. URT_CFG_PUBSUB_PROFILING == true ..
306
    + {field} minLatency : urt_delay_t
307
    + {field} maxLatency : urt_delay_t
308
    __
309
    + {method} urtNrtSubscriberInit (subscriber : urt_nrtsubscriber_t*) : void
310
    + {method} urtNrtSubscriberSubscribe (subscriber : urt_nrtsubscriber_t*, topic : urt_topic_t*, messages : urt_message_t*) : urt_status_t
311
    + {method} urtNrtSubscriberFetchNextMessage (subscriber : urt_nrtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t
312
    + {method} urtNrtSubscriberFetchLatestMessage (subscriber : urt_nrtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t
313
    + {method} urtNrtSubscriberUnsubscribe (subscriber : urt_nrtsubscriber_t*) : urt_status_t
314
  }
315

    
316
    class urt_srtsubscriber_t <<S,BFAFFF>> {
317
    + {field} usefulnesscb : urt_usefulness_f*
318
    + {field} cbparams : void*
319
    .. URT_CFG_PUBSUB_PROFILING == true ..
320
    + {field} minLatency : urt_delay_t
321
    + {field} maxLatency : urt_delay_t
322
    __
323
    + {method} urtSrtSubscriberInit (subscriber : urt_srtsubscriber_t*) : void
324
    + {method} urtSrtSubscriberSubscribe (subscriber : urt_srtsubscriber_t*, topic : urt_topic_t*, messages : urt_message_t*, usefulnesscb : urt_usefulness_f*, cbparams : void*) : urt_status_t
325
    + {method} urtSrtSubscriberFetchNextMessage (subscriber : urt_srtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t
326
    + {method} urtSrtSubscriberFetchLatestMessage (subscriber : urt_srtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t
327
    + {method} urtSrtSubscriberCalculateUsefulness (subscriber : urt_srtsubscriber_t*, latency : urt_delay_t) : float
328
    + {method} urtSrtSubscriberUnsubscribe (subscriber : urt_srtsubscriber_t*) : urt_status_t
329
  }
330

    
331
    class urt_frtsubscriber_t <<S,BFAFFF>> {
332
    .. URT_CFG_PUBSUB_QOS_DEADLINECHECKS == true ..
333
    + {field} deadlineOffset : urt_delay_t
334
    .. URT_CFG_PUBSUB_QOS_JITTERCHECKS == true ..
335
    + {field} maxJitter : urt_delay_t
336
    .. URT_CFG_PUBSUB_QOS_JITTERCHECKS == true ||  URT_CFG_PUBSUB_PROFILING == true ..
337
    + {field} minLatency : urt_delay_t
338
    + {field} maxLatency : urt_delay_t
339
    __
340
    + {method} urtFrtSubscriberInit (subscriber : urt_frtsubscriber_t*) : void
341
    + {method} urtFrtSubscriberSubscribe (subscriber : urt_frtsubscriber_t*, topic : urt_topic_t*, messages : urt_message_t*, deadline : urt_delay_t, jitter : urt_delay_t) : urt_status_t
342
    + {method} urtFrtSubscriberFetchNextMessage (subscriber : urt_frtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t
343
    + {method} urtFrtSubscriberFetchLatestMessage (subscriber : urt_frtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t
344
    + {method} urtFrtSubscriberCalculateValidity (subscriber : urt_frtsubscriber_t*, latency : urt_delay_t) : bool
345
    + {method} urtFrtSubscriberUnsubscribe (subscriber : urt_frtsubscriber_t*) : urt_status_t
346
  }
347

    
348
    class urt_hrtsubscriber_t <<S,BFAFFF>> {
349
    + {field} next : urt_hrtsubscriber_t*
350
    .. URT_CFG_PUBSUB_QOS_DEADLINECHECKS == true ..
351
    + {field} deadlineOffset : urt_delay_t
352
    + {field} qosDeadlineTimer : urt_osTimer_t
353
    .. URT_CFG_PUBSUB_QOS_JITTERCHECKS == true ..
354
    + {field} maxJitter : urt_delay_t
355
    .. URT_CFG_PUBSUB_QOS_JITTERCHECKS == true || URT_CFG_PUBSUB_PROFILING == true..
356
    + {field} minLatency : urt_delay_t
357
    + {field} maxLatency : urt_delay_t
358
    .. URT_CFG_PUBSUB_QOS_RATECHECKS == true ..
359
    + {field} expectedRate : urt_delay_t
360
    __
361
    + {method} urtHrtSubscriberInit (subscriber : urt_hrtsubscriber_t*) : void
362
    + {method} urtHrtSubscriberSubscribe (subscriber : urt_hrtsubscriber_t*, topic : urt_topic_t*, messages : urt_message_t*, deadline : urt_delay_t, rate : urt_delay_t, jitter : urt_delay_t) : urt_status_t
363
    + {method} urtHrtSubscriberFetchNextMessage (subscriber : urt_hrtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t
364
    + {method} urtHrtSubscriberFetchLatestMessage (subscriber : urt_hrtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t
365
    + {method} urtHrtSubscriberUnsubscribe (subscriber : urt_hrtsubscriber_t*) : urt_status_t
366
  }
367
} 
368

    
369
  class urt_publisher_t <<S,BFAFFF>> {
370
  URT_PUBSUB_PUBLISHER_PUBLISH_TIMEOUT : bool
371
  __
372
  + {field} topic : urt_topic_t*
373
  .. URT_CFG_PUBSUB_PROFILING == true ..
374
  + {field} publishAttempts : uint64_t
375
  + {field} publishFails : uint64_t
376
  __
377
  + {method} urtPublisherInit (publisher : urt_publisher_t*, topic : urt_topic_t*, messages : urt_message_t*) : void
378
  .. URT_PUBSUB_PUBLISHER_PUBLISH_TIMEOUT == false ..
379
  + {method} urtPublisherPublish (publisher : urt_publisher_t*, payload : void*, bytes : size_t, t : urt_osTime_t) : urt_status_t
380
  .. URT_PUBSUB_PUBLISHER_PUBLISH_TIMEOUT == true ..
381
  + {method} urtPublisherPublish (publisher : urt_publisher_t*, payload : void*, bytes : size_t, t : urt_osTime_t, timeout : urt_delay_t) : urt_status_t
382
}
383

    
384
  class urt_topic_t <<S,BFAFFF>> {
385
  + {field} next : urt_topic_t*
386
  + {field} id : urt_topicid_t
387
  + {field} lock : urt_osMutex_t
388
  + {field} evtSource : urt_osEventSource_t
389
  + {field} numHrtSubscribers : unsigned int
390
  + {field} hrtReleased : urt_osCondvar_t
391
  + {field} mandatoryMessage : urt_message_t
392
  + {field} latestMessage : urt_message_t*
393
  .. URT_CFG_PUBSUB_QOS_RATECHECKS == true ..
394
  + {field} hrtSubscribers : urt_hrtsubscriber_t*
395
  + {field} qosRateTimer : urt_osTimer_t
396
  .. URT_CFG_PUBSUB_PROFILING == true ..
397
  + {field} numMessagesPublished : uint64_t
398
  + {field} numMessagesDiscarded : uint64_t
399
  + {field} numSubscribers : unsigned int
400
  __
401
  + {method} urtTopicInit (topic : urt_topic_t*, id : urt_topicid_t, mandatoryMessage: urt_message_t*) : urt_status_t
402
}
403

    
404

    
405

    
406

    
407
urt_message_t "1" o- "0,1" urt_message_t
408

    
409
urt_basesubscriber_t "1" o- - "0,1" urt_message_t
410

    
411
urt_nrtsubscriber_t - -|> urt_basesubscriber_t
412

    
413
urt_srtsubscriber_t - -|> urt_basesubscriber_t
414

    
415
urt_frtsubscriber_t - -|> urt_basesubscriber_t
416

    
417
urt_hrtsubscriber_t - -|> urt_basesubscriber_t
418
urt_hrtsubscriber_t "1" o- "0,1" urt_hrtsubscriber_t
419

    
420
urt_publisher_t "1" o- "1" urt_topic_t
421
urt_publisher_t ..> urt_message_t
422

    
423
urt_topic_t "1" o- "0,1" urt_topic_t
424
urt_topic_t "1" o- "0,1" urt_hrtsubscriber_t
425
urt_topic_t "1" *- - "1" urt_message_t
426

    
427

    
428

    
429
@enduml
430

    
431
PlantUML version 1.2020.15(Sun Jun 28 13:39:45 CEST 2020)
432
(GPL source distribution)
433
Java Runtime: OpenJDK Runtime Environment
434
JVM: OpenJDK 64-Bit Server VM
435
Default Encoding: UTF-8
436
Language: de
437
Country: DE
438
--></g></svg>