Revision ee83a495 doc/classdiagrams/pubsub.uml

View differences:

doc/classdiagrams/pubsub.uml
50 50
}
51 51

  
52 52
$group("subscriber") {
53
  $group("real-time constraint data") {
54
    /' The top level RT constraints structure. '/
55
    $structure("urt_rtdata_t") {
56
        'The actual RT constraint class.
57
      + {field} class : urt_rtconstraintclass_t
58
        'Parameters of the RT constraints.
59
      + {field} params : urt_rtconstraintsparams_t
60
    }
61

  
62
    /' Descriptor to distinguish the four RT classes. '/
63
    $enumeration("urt_rtclass_t") {
64
        'Hard real-time.
65
      URT_RTCLASS_HARD = 0
66
        'Firm real-time.
67
      URT_RTCLASS_FIRM = 1
68
        'Soft real-time.
69
      URT_RTCLASS_SOFT = 2
70
        'No real-time at all.
71
      URT_RTCLASS_NONE = 3
72
    }
73

  
74
    /' Union structure, holding RT constraints parameters. '/
75
    $union("urt_rtclassdata_t") {
76
        'Parameters for hard real-time.
77
      + {field} hrt : urt_hrtparams_t
78
        'Parameters for firm real-time.
79
      + {field} frt : urt_frtparams_t
80
        'Parameters for soft real-time.
81
      + {field} srt : urt_srtparans_t
82
        'Parameters for non-real-time.
83
      + {field} nrt : urt_nrtparams_t
84
    }
85

  
86
    /' Parameters for hard real-time. '/
87
    $structure("urt_hrtdata_t") {
88
        'Pointer to the next HRT subscriber in a list.
89
      + {field} next : urt_subscriber_t*
90
      .. URT_CFG_PUBSUB_QOS_DEADLINECHECKS == true ..
91
        'QoS Timer to detect missed deadlines.
92
      + {field} qosDeadlineTimer : urt_osTimer_t
93
        'Maximum temporal offset between creation and consumption of messages.
94
      + {field} deadlineOffset : urt_delay_t
95
      .. URT_CFG_PUBSUB_QOS_RATECHECKS == true ..
96
        'Expected rate at which data is published.
97
      + {field} expectedRate : urt_delay_t
98
      .. URT_CFG_PUBSUB_PROFILING == true || URT_CFG_PUBSUB_QOS_JITTERCHECKS == true ..
99
        'Maximum expected jitter.
100
      + {field} maxJitter : urt_delay_t
101
        'Minimum latency ever detected (to calculate jitter).
102
      + {field} minLatency : urt_delay_t
103
        'Maximum latency ever detected (to calculate jitter).
104
      + {field} maxLatency : urt_delay_t
105
    }
106

  
107
    /' Parameters for firm real-time. '/
108
    $structure("urt_frtdata_t") {
109
      .. URT_CFG_PUBSUB_QOS_DEADLINECHECKS == true ..
110
        'Maximum temporal offset between creation and consumption of messages.
111
      + {field} deadlineOffset : urt_delay_t
112
      .. URT_CFG_PUBSUB_QOS_RATECHECKS == true ..
113
        'Expected rate at which data is published.
114
      + {field} expectedRate : urt_delay_t
115
      .. URT_CFG_PUBSUB_PROFILING == true || URT_CFG_PUBSUB_QOS_JITTERCHECKS == true ..
116
        'Maximum expected jitter.
117
      + {field} maxJitter : urt_delay_t
118
        'Minimum latency ever detected (to calculate jitter).
119
      + {field} minLatency : urt_delay_t
120
        'Maximum latency ever detected (to calculate jitter).
121
      + {field} maxLatency : urt_delay_t
122
    }
123

  
124
    $group("SRT data") {
125
      /' Function type to be called when calculating the usefulness of a message. '/
126
      $function("urt_srtusefulnessfunc_t") {
127
          'Takes a delay and optionally parameters as arguments and returns a float in [0, 1].
128
        urt_srtusefulnessfunc_t (dt : urt_delay_t, params : void*) : float
129
      }
130

  
131
      /' Parameters for soft real-time. '/
132
      $structure("urt_srtdata_t") {
133
          'Callback to calculate usefulness of a message
134
        + {field} usefullnesscb : urt_srtusefulnessfunc_t*
135
          'Optional parameters for the callback function.
136
        + {field} cbparams : void*
137
      }
138
    } /'SRT data'/
139

  
140
    /' Parameters for non-real-time. '/
141
    $structure("urt_nrtdata_t") {
142
      'There are nor parameters in this case.
143
    }
144
  } /'real-time constraint data'/
145

  
146
  /' Subscriber type. '/
147
  $structure("urt_subscriber_t") {
53
  /' Base subscriber type. '/
54
  $structure("urt_basesubscriber_t") {
148 55
      'Pointer to the topic, this subscriber subscribed to.
149 56
    + {field} topic : urt_topic_t*
150 57
      'Event listener to notify the node about new messages.
151 58
    + {field} evtListener : urt_osEventListener_t
152
      'Real-time class descriptor.
153
    + {field} rtdata : urt_rtdata_t
154 59
      'Pointer to the message consumed most recently.
155 60
    + {field} lastMessage : urt_message_t*
156 61
      'Copy of the origin time of the message consumed most recently.
......
160 65
    + {field} sumLatencies : uint64_t
161 66
      'Number of messages received.
162 67
    + {field} numMessagesReceived : uint64_t
68
  }
69

  
70
  /' Function type to be called when calculating the usefulness of a message. '/
71
  $function("urt_srtusefulnessfunc_t") {
72
    'Takes a delay and optionally parameters as arguments and returns a float in [0, 1].
73
    urt_srtusefulnessfunc_t (dt : urt_delay_t, params : void*) : float
74
  }
75

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

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

  
122
  /' FRT subscriber type. '/
123
  $structure("urt_frtsubscriber_t") {
124
    .. URT_CFG_PUBSUB_QOS_DEADLINECHECKS == true ..
125
      'Maximum temporal offset between creation and consumption of messages.
126
    + {field} deadlineOffset : urt_delay_t
127
    .. URT_CFG_PUBSUB_QOS_JITTERCHECKS == true ..
128
      'Maximum expected jitter.
129
    + {field} maxJitter : urt_delay_t
130
    .. URT_CFG_PUBSUB_QOS_JITTERCHECKS == true ||  URT_CFG_PUBSUB_PROFILING == true ..
164 131
      'Minimum latency ever detected (to calculate jitter).
165 132
    + {field} minLatency : urt_delay_t
166 133
      'Maximum latency ever detected (to calculate jitter).
167 134
    + {field} maxLatency : urt_delay_t
168 135
    __
169
      'Initializes a urt_subscriber_t object.
170
    + {method} urtSubscriberInit (subscriber : urt_subscriber_t*) : urt_status_t
171
      'Tries to subscribe to a topic as HRT subscriber, sets all according parameters and optionally contributes a list of messages to the topic.
172
    + {method} urtSubscriberSubscribeHrt (subscriber : urt_subscriber_t*, topic : urt_topic_t*, messages : urt_message_t*, deadline : urt_delay_t, rate : urt_delay_t, jitter : urt_delay_t) : urt_status_t
173
      'Tries to subscribe to a topic as FRT subscriber, sets all according parameters and optionally contributes a list of messages to the topic.
174
    + {method} urtSubscriberSubscribeFrt (subscriber : urt_subscriber_t*, topic : urt_topic_t*, messages : urt_message_t*, deadline : urt_delay_t, rate : urt_delay_t, jitter : urt_delay_t) : urt_status_t
175
      'Tries to subscribe to a topic as SRT subscriber, sets all according parameters and optionally contributes a list of messages to the topic.
176
    + {method} urtSubscriberSubscribeSrt (subscriber : urt_subscriber_t*, topic : urt_topic_t*, messages : urt_message_t*, usefulnesscb : urt_srtusefulnessfunc_t*, cbparams : void*) : urt_status_t
177
      'Tries to subscribe to a topic as NRT subscriber and optionally contributes a list of messages to the topic.
178
    + {method} urtSubscriberSubscribeNrt (subscriber : urt_subscriber_t*, topic : urt_topic_t*, messages : urt_message_t*) : urt_status_t
136
      'Initializes a urt_frtsubscriber_t object.
137
    + {method} urtFrtSubscriberInit (subscriber : urt_frtsubscriber_t*) : urt_status_t
138
      'Tries to subscribe to a topic, sets all parameters and optionally contributes a list of messages to the topic.
139
    + {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
140
      'Fetches the next message in the buffer, optionally copies the payload and optionally returns the latency.
141
    + {method} urtFrtSubscriberFetchNextMessage (subscriber : urt_frtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t
142
      'Fetches the latest message, optionally copies the payload and optionally returns the latency.
143
    + {method} urtFrtSubscriberFetchLatestMessage (subscriber : urt_frtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t
144
      'Checks whether a message is valid after the specified delay.
145
    + {method} urtFrtSubscriberCalculateValidity (subscriber : urt_frtsubscriber_t*, latency : urt_delay_t) : bool
179 146
      'Unsubscribes from a topic.
180
    + {method} urtSubscriberUnsubscribe (subscriber : urt_subscriber_t*) : urt_status_t
147
    + {method} urtFrtSubscriberUnsubscribe (subscriber : urt_frtsubscriber_t*) : urt_status_t
148
  }
149

  
150
  /' HRT subscriber type. '/
151
  $structure("urt_hrtsubscriber_t") {
152
      'Pointer to the next HRT subscriber in a list.
153
    + {field} next : urt_hrtsubscriber_t*
154
    .. URT_CFG_PUBSUB_QOS_DEADLINECHECKS == true ..
155
      'Maximum temporal offset between creation and consumption of messages.
156
    + {field} deadlineOffset : urt_delay_t
157
      'QoS Timer to detect missed deadlines.
158
    + {field} qosDeadlineTimer : urt_osTimer_t
159
    .. URT_CFG_PUBSUB_QOS_JITTERCHECKS == true ..
160
      'Maximum expected jitter.
161
    + {field} maxJitter : urt_delay_t
162
    .. URT_CFG_PUBSUB_QOS_JITTERCHECKS == true || URT_CFG_PUBSUB_PROFILING == true..
163
      'Minimum latency ever detected (to calculate jitter).
164
    + {field} minLatency : urt_delay_t
165
      'Maximum latency ever detected (to calculate jitter).
166
    + {field} maxLatency : urt_delay_t
167
    .. URT_CFG_PUBSUB_QOS_RATECHECKS == true ..
168
      'Expected rate at which data is published.
169
    + {field} expectedRate : urt_delay_t
170
    __
171
      'Initializes a urt_hrtsubscriber_t object.
172
    + {method} urtHrtSubscriberInit (subscriber : urt_hrtsubscriber_t*) : urt_status_t
173
      'Tries to subscribe to a topic, sets all parameters and optionally contributes a list of messages to the topic.
174
    + {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
181 175
      'Fetches the next message in the buffer, optionally copies the payload and optionally returns the latency.
182
    + {method} urtSubscriberFetchNextMessage (subscriber : urt_subscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t
176
    + {method} urtHrtSubscriberFetchNextMessage (subscriber : urt_hrtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t
183 177
      'Fetches the latest message, optionally copies the payload and optionally returns the latency.
184
    + {method} urtSubscriberFetchLatestMessage (subscriber : urt_subscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t
185
      'Calculates the usefulness of a message after the specified delay depending on the SRT or FRT (or HRT) parameters.
186
    + {method} urtSubscriberCalculateUsefulness (subscriber : urt_subscriber_t*, latency : urt_delay_t) : float
178
    + {method} urtHrtSubscriberFetchLatestMessage (subscriber : urt_hrtsubscriber_t*, payload : void*, bytes : size_t, latency : urt_delay_t*) : urt_status_t
179
      'Unsubscribes from a topic.
180
    + {method} urtHrtSubscriberUnsubscribe (subscriber : urt_hrtsubscriber_t*) : urt_status_t
187 181
  }
188 182
} /'subscriber'/
189 183

  
......
191 185
$structure("urt_publisher_t") {
192 186
    'Pointer to the topic for publishing.
193 187
  + {field} topic : urt_topic_t*
194
  .. URT_CFG_PROFILING == true ..
188
  .. URT_CFG_PUBSUB_PROFILING == true ..
195 189
    'Counter of attempts to publish a message.
196 190
  + {field} publishAttempts : uint64_t
197 191
    'Counter of failed attempts to publish a message.
......
216 210
    'Number of HRT subscribers.
217 211
  + {field} numHrtSubscribers : unsigned int
218 212
    'List of HRT subscribers, orderd by their expected rate (most critical first).
219
  + {field} hrtSubscribers : urt_subscriber_t*
213
  + {field} hrtSubscribers : urt_hrtsubscriber_t*
220 214
    'Condition variable to inform waiting publishers when a blocked message becomes available.
221 215
  + {field} hrtReleased : urt_osCondvar_t
222 216
    'Mandatory message, each Topic holds.
......
242 236

  
243 237
!startsub DEPENDENCIES
244 238

  
245
urt_srtdata_t "1" o-- "0..1" urt_srtusefulnessfunc_t
246

  
247
urt_rtclassdata_t "1" *-- "0..1" urt_hrtdata_t
248
urt_rtclassdata_t "1" *-- "0..1" urt_frtdata_t
249
urt_rtclassdata_t "1" *-- "0..1" urt_srtdata_t
250
urt_rtclassdata_t "1" *-- "0..1" urt_nrtdata_t
239
urt_message_t "1" o-- "0..1" urt_message_t
251 240

  
252
urt_rtdata_t "1" *-- "1" urt_rtclass_t
253
urt_rtdata_t "1" *-- "1" urt_rtclassdata_t
241
urt_nrtsubscriber_t --|> urt_basesubscriber_t
242
urt_nrtsubscriber_t ..> urt_message_t
254 243

  
255
urt_hrtdata_t "1" o-up- "0..1" urt_subscriber_t
244
urt_srtsubscriber_t --|> urt_basesubscriber_t
245
urt_srtsubscriber_t "1" o-- "0..1" urt_srtusefulnessfunc_t
246
urt_srtsubscriber_t ..> urt_message_t
256 247

  
257
urt_message_t "1" o-- "0..1" urt_message_t
248
urt_frtsubscriber_t --|> urt_basesubscriber_t
249
urt_frtsubscriber_t ..> urt_message_t
258 250

  
259
urt_subscriber_t "1" *-- "1" urt_rtdata_t
260
urt_subscriber_t "1" o- "0..1" urt_topic_t
261
urt_subscriber_t "1" o-- "0..1" urt_message_t
251
urt_hrtsubscriber_t --|> urt_basesubscriber_t
252
urt_hrtsubscriber_t "1" o-- "0..1" urt_hrtsubscriber_t
253
urt_hrtsubscriber_t ..> urt_message_t
262 254

  
263 255
urt_publisher_t "1" o- "1" urt_topic_t
264 256
urt_publisher_t ..> urt_message_t
265 257

  
266 258
urt_topic_t "1" o-- "0..1" urt_topic_t
267
urt_topic_t "1" o- "0..1" urt_subscriber_t
268
urt_topic_t "1" o-- "1..1" urt_message_t
259
urt_topic_t "1" o- "0..1" urt_hrtsubscriber_t
269 260
urt_topic_t "1" *-- "1" urt_message_t
270 261

  
271 262
!endsub

Also available in: Unified diff