Arduino DLNA Server
Loading...
Searching...
No Matches
DLNAMediaRendererDescrAlt.h
Go to the documentation of this file.
1#pragma once
2
5
6namespace tiny_dlna {
7
20 public:
21 size_t printDescr(Print& out) override {
23 XMLPrinter xml(out);
24 size_t result = 0;
25 result += xml.printXMLHeader();
26 result += xml.printNodeBeginNl(
27 "scpd", "xmlns=\"urn:schemas-upnp-org:service-1-0\"");
28
29 result += xml.printNodeBeginNl("specVersion");
30 result += xml.printNode("major", 1);
31 result += xml.printNode("minor", 0);
32 result += xml.printNodeEnd("specVersion");
33
34 result += xml.printNodeBeginNl("actionList");
35
36 // Order and arguments adjusted to match requested SCPD
37 // GetCurrentTransportActions
38 result += xml.printNodeBeginNl("action");
39 result += xml.printNode("name", "GetCurrentTransportActions");
40 result += xml.printNodeBeginNl("argumentList");
41 result += xml.printArgument("InstanceID", "in", "A_ARG_TYPE_InstanceID");
42 result += xml.printArgument("Actions", "out", "CurrentTransportActions");
43 result += xml.printNodeEnd("argumentList");
44 result += xml.printNodeEnd("action");
45
46 // GetDeviceCapabilities
47 result += xml.printNodeBeginNl("action");
48 result += xml.printNode("name", "GetDeviceCapabilities");
49 result += xml.printNodeBeginNl("argumentList");
50 result += xml.printArgument("InstanceID", "in", "A_ARG_TYPE_InstanceID");
51 result +=
52 xml.printArgument("PlayMedia", "out", "PossiblePlaybackStorageMedia");
53 result +=
54 xml.printArgument("RecMedia", "out", "PossibleRecordStorageMedia");
55 result += xml.printArgument("RecQualityModes", "out",
56 "PossibleRecordQualityModes");
57 result += xml.printNodeEnd("argumentList");
58 result += xml.printNodeEnd("action");
59
60 // GetMediaInfo
61 result += xml.printNodeBeginNl("action");
62 result += xml.printNode("name", "GetMediaInfo");
63 result += xml.printNodeBeginNl("argumentList");
64 result += xml.printArgument("InstanceID", "in", "A_ARG_TYPE_InstanceID");
65 result += xml.printArgument("NrTracks", "out", "NumberOfTracks");
66 result += xml.printArgument("MediaDuration", "out", "CurrentMediaDuration");
67 result += xml.printArgument("CurrentURI", "out", "AVTransportURI");
68 result += xml.printArgument("CurrentURIMetaData", "out",
69 "AVTransportURIMetaData");
70 result += xml.printArgument("NextURI", "out", "NextAVTransportURI");
71 result += xml.printArgument("NextURIMetaData", "out",
72 "NextAVTransportURIMetaData");
73 result += xml.printArgument("PlayMedium", "out", "PlaybackStorageMedium");
74 result += xml.printArgument("RecordMedium", "out", "RecordStorageMedium");
75 result +=
76 xml.printArgument("WriteStatus", "out", "RecordMediumWriteStatus");
77 result += xml.printNodeEnd("argumentList");
78 result += xml.printNodeEnd("action");
79
80 // GetPositionInfo
81 result += xml.printNodeBeginNl("action");
82 result += xml.printNode("name", "GetPositionInfo");
83 result += xml.printNodeBeginNl("argumentList");
84 result += xml.printArgument("InstanceID", "in", "A_ARG_TYPE_InstanceID");
85 result += xml.printArgument("Track", "out", "CurrentTrack");
86 result += xml.printArgument("TrackDuration", "out", "CurrentTrackDuration");
87 result += xml.printArgument("TrackMetaData", "out", "CurrentTrackMetaData");
88 result += xml.printArgument("TrackURI", "out", "CurrentTrackURI");
89 result += xml.printArgument("RelTime", "out", "RelativeTimePosition");
90 result += xml.printArgument("AbsTime", "out", "AbsoluteTimePosition");
91 result += xml.printArgument("RelCount", "out", "RelativeCounterPosition");
92 result += xml.printArgument("AbsCount", "out", "AbsoluteCounterPosition");
93 result += xml.printNodeEnd("argumentList");
94 result += xml.printNodeEnd("action");
95
96 // GetTransportInfo
97 result += xml.printNodeBeginNl("action");
98 result += xml.printNode("name", "GetTransportInfo");
99 result += xml.printNodeBeginNl("argumentList");
100 result += xml.printArgument("InstanceID", "in", "A_ARG_TYPE_InstanceID");
101 result +=
102 xml.printArgument("CurrentTransportState", "out", "TransportState");
103 result +=
104 xml.printArgument("CurrentTransportStatus", "out", "TransportStatus");
105 result += xml.printArgument("CurrentSpeed", "out", "TransportPlaySpeed");
106 result += xml.printNodeEnd("argumentList");
107 result += xml.printNodeEnd("action");
108
109 // GetTransportSettings
110 result += xml.printNodeBeginNl("action");
111 result += xml.printNode("name", "GetTransportSettings");
112 result += xml.printNodeBeginNl("argumentList");
113 result += xml.printArgument("InstanceID", "in", "A_ARG_TYPE_InstanceID");
114 result += xml.printArgument("PlayMode", "out", "CurrentPlayMode");
115 result +=
116 xml.printArgument("RecQualityMode", "out", "CurrentRecordQualityMode");
117 result += xml.printNodeEnd("argumentList");
118 result += xml.printNodeEnd("action");
119
120 // Pause
121 result += xml.printNodeBeginNl("action");
122 result += xml.printNode("name", "Pause");
123 result += xml.printNodeBeginNl("argumentList");
124 result += xml.printArgument("InstanceID", "in", "A_ARG_TYPE_InstanceID");
125 result += xml.printNodeEnd("argumentList");
126 result += xml.printNodeEnd("action");
127
128 // Play
129 result += xml.printNodeBeginNl("action");
130 result += xml.printNode("name", "Play");
131 result += xml.printNodeBeginNl("argumentList");
132 result += xml.printArgument("InstanceID", "in", "A_ARG_TYPE_InstanceID");
133 result += xml.printArgument("Speed", "in", "TransportPlaySpeed");
134 result += xml.printNodeEnd("argumentList");
135 result += xml.printNodeEnd("action");
136
137 // Seek
138 result += xml.printNodeBeginNl("action");
139 result += xml.printNode("name", "Seek");
140 result += xml.printNodeBeginNl("argumentList");
141 result += xml.printArgument("InstanceID", "in", "A_ARG_TYPE_InstanceID");
142 result += xml.printArgument("Unit", "in", "A_ARG_TYPE_SeekMode");
143 result += xml.printArgument("Target", "in", "A_ARG_TYPE_SeekTarget");
144 result += xml.printNodeEnd("argumentList");
145 result += xml.printNodeEnd("action");
146
147 // SetAVTransportURI
148 result += xml.printNodeBeginNl("action");
149 result += xml.printNode("name", "SetAVTransportURI");
150 result += xml.printNodeBeginNl("argumentList");
151 result += xml.printArgument("InstanceID", "in", "A_ARG_TYPE_InstanceID");
152 result += xml.printArgument("CurrentURI", "in", "AVTransportURI");
153 result +=
154 xml.printArgument("CurrentURIMetaData", "in", "AVTransportURIMetaData");
155 result += xml.printNodeEnd("argumentList");
156 result += xml.printNodeEnd("action");
157
158 // Stop
159 result += xml.printNodeBeginNl("action");
160 result += xml.printNode("name", "Stop");
161 result += xml.printNodeBeginNl("argumentList");
162 result += xml.printArgument("InstanceID", "in", "A_ARG_TYPE_InstanceID");
163 result += xml.printNodeEnd("argumentList");
164 result += xml.printNodeEnd("action");
165
166 // SetNextAVTransportURI
167 result += xml.printNodeBeginNl("action");
168 result += xml.printNode("name", "SetNextAVTransportURI");
169 result += xml.printNodeBeginNl("argumentList");
170 result += xml.printArgument("InstanceID", "in", "A_ARG_TYPE_InstanceID");
171 result += xml.printArgument("NextURI", "in", "NextAVTransportURI");
172 result += xml.printArgument("NextURIMetaData", "in",
173 "NextAVTransportURIMetaData");
174 result += xml.printNodeEnd("argumentList");
175 result += xml.printNodeEnd("action");
176
177 result += xml.printNodeEnd("actionList");
178
179 // serviceStateTable
180 result += xml.printNodeBeginNl("serviceStateTable");
181
182 // TransportStatus
183 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
184 result += xml.printNode("name", "TransportStatus");
185 result += xml.printNode("dataType", "string");
186 result += xml.printNodeBeginNl("allowedValueList");
187 result += xml.printNode("allowedValue", "OK");
188 result += xml.printNode("allowedValue", "ERROR_OCCURRED");
189 result += xml.printNode("allowedValue", " vendor-defined ");
190 result += xml.printNodeEnd("allowedValueList");
191 result += xml.printNodeEnd("stateVariable");
192
193 // NextAVTransportURI
194 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
195 result += xml.printNode("name", "NextAVTransportURI");
196 result += xml.printNode("dataType", "string");
197 result += xml.printNodeEnd("stateVariable");
198
199 // NextAVTransportURIMetaData
200 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
201 result += xml.printNode("name", "NextAVTransportURIMetaData");
202 result += xml.printNode("dataType", "string");
203 result += xml.printNodeEnd("stateVariable");
204
205 // CurrentTrackMetaData
206 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
207 result += xml.printNode("name", "CurrentTrackMetaData");
208 result += xml.printNode("dataType", "string");
209 result += xml.printNodeEnd("stateVariable");
210
211 // RelativeCounterPosition
212 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
213 result += xml.printNode("name", "RelativeCounterPosition");
214 result += xml.printNode("dataType", "i4");
215 result += xml.printNodeEnd("stateVariable");
216
217 // A_ARG_TYPE_InstanceID
218 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
219 result += xml.printNode("name", "A_ARG_TYPE_InstanceID");
220 result += xml.printNode("dataType", "ui4");
221 result += xml.printNodeEnd("stateVariable");
222
223 // A_ARG_TYPE_SeekTarget
224 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
225 result += xml.printNode("name", "A_ARG_TYPE_SeekTarget");
226 result += xml.printNode("dataType", "string");
227 result += xml.printNodeEnd("stateVariable");
228
229 // PlaybackStorageMedium
230 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
231 result += xml.printNode("name", "PlaybackStorageMedium");
232 result += xml.printNode("dataType", "string");
233 result += xml.printNodeBeginNl("allowedValueList");
234 // list copied exactly from original
235 result += xml.printNode("allowedValue", "UNKNOWN");
236 result += xml.printNode("allowedValue", "DV");
237 result += xml.printNode("allowedValue", "MINI-DV");
238 result += xml.printNode("allowedValue", "VHS");
239 result += xml.printNode("allowedValue", "W-VHS");
240 result += xml.printNode("allowedValue", "S-VHS");
241 result += xml.printNode("allowedValue", "D-VHS");
242 result += xml.printNode("allowedValue", "VHSC");
243 result += xml.printNode("allowedValue", "VIDEO8");
244 result += xml.printNode("allowedValue", "HI8");
245 result += xml.printNode("allowedValue", "CD-ROM");
246 result += xml.printNode("allowedValue", "CD-DA");
247 result += xml.printNode("allowedValue", "CD-R");
248 result += xml.printNode("allowedValue", "CD-RW");
249 result += xml.printNode("allowedValue", "VIDEO-CD");
250 result += xml.printNode("allowedValue", "SACD");
251 result += xml.printNode("allowedValue", "MD-AUDIO");
252 result += xml.printNode("allowedValue", "MD-PICTURE");
253 result += xml.printNode("allowedValue", "DVD-ROM");
254 result += xml.printNode("allowedValue", "DVD-VIDEO");
255 result += xml.printNode("allowedValue", "DVD-R");
256 result += xml.printNode("allowedValue", "DVD+RW");
257 result += xml.printNode("allowedValue", "DVD-RW");
258 result += xml.printNode("allowedValue", "DVD-RAM");
259 result += xml.printNode("allowedValue", "DVD-AUDIO");
260 result += xml.printNode("allowedValue", "DAT");
261 result += xml.printNode("allowedValue", "LD");
262 result += xml.printNode("allowedValue", "HDD");
263 result += xml.printNode("allowedValue", "MICRO-MV");
264 result += xml.printNode("allowedValue", "NETWORK");
265 result += xml.printNode("allowedValue", "NONE");
266 result += xml.printNode("allowedValue", "NOT_IMPLEMENTED");
267 result += xml.printNode("allowedValue", " vendor-defined ");
268 result += xml.printNodeEnd("allowedValueList");
269 result += xml.printNodeEnd("stateVariable");
270
271 // RelativeTimePosition
272 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
273 result += xml.printNode("name", "RelativeTimePosition");
274 result += xml.printNode("dataType", "string");
275 result += xml.printNodeEnd("stateVariable");
276
277 // PossibleRecordQualityModes
278 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
279 result += xml.printNode("name", "PossibleRecordStorageMedia");
280 result += xml.printNode("dataType", "string");
281 result += xml.printNodeEnd("stateVariable");
282
283 // CurrentPlayMode
284 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
285 result += xml.printNode("name", "CurrentPlayMode");
286 result += xml.printNode("dataType", "string");
287 result += xml.printNodeBeginNl("allowedValueList");
288 result += xml.printNode("allowedValue", "NORMAL");
289 result += xml.printNode("allowedValue", "REPEAT_ALL");
290 result += xml.printNode("allowedValue", "INTRO");
291 result += xml.printNodeEnd("allowedValueList");
292 result += xml.printNode("defaultValue", "NORMAL");
293 result += xml.printNodeEnd("stateVariable");
294
295 // TransportPlaySpeed
296 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
297 result += xml.printNode("name", "TransportPlaySpeed");
298 result += xml.printNode("dataType", "string");
299 result += xml.printNodeBeginNl("allowedValueList");
300 result += xml.printNode("allowedValue", "1");
301 result += xml.printNode("allowedValue", " vendor-defined ");
302 result += xml.printNodeEnd("allowedValueList");
303 result += xml.printNodeEnd("stateVariable");
304
305 // PossiblePlaybackStorageMedia
306 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
307 result += xml.printNode("name", "PossiblePlaybackStorageMedia");
308 result += xml.printNode("dataType", "string");
309 result += xml.printNodeEnd("stateVariable");
310
311 // AbsoluteTimePosition
312 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
313 result += xml.printNode("name", "AbsoluteTimePosition");
314 result += xml.printNode("dataType", "string");
315 result += xml.printNodeEnd("stateVariable");
316
317 // CurrentTrack
318 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
319 result += xml.printNode("name", "CurrentTrack");
320 result += xml.printNode("dataType", "ui4");
321 result += xml.printNodeBeginNl("allowedValueRange");
322 result += xml.printNode("minimum", 0);
323 result += xml.printNode("maximum", "4294967295");
324 result += xml.printNode("step", 1);
325 result += xml.printNodeEnd("allowedValueRange");
326 result += xml.printNodeEnd("stateVariable");
327
328 // CurrentTrackURI
329 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
330 result += xml.printNode("name", "CurrentTrackURI");
331 result += xml.printNode("dataType", "string");
332 result += xml.printNodeEnd("stateVariable");
333
334 // CurrentTransportActions
335 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
336 result += xml.printNode("name", "CurrentTransportActions");
337 result += xml.printNode("dataType", "string");
338 result += xml.printNodeEnd("stateVariable");
339
340 // NumberOfTracks
341 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
342 result += xml.printNode("name", "NumberOfTracks");
343 result += xml.printNode("dataType", "ui4");
344 result += xml.printNodeBeginNl("allowedValueRange");
345 result += xml.printNode("minimum", 0);
346 result += xml.printNode("maximum", "4294967295");
347 result += xml.printNodeEnd("allowedValueRange");
348 result += xml.printNodeEnd("stateVariable");
349
350 // AVTransportURI
351 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
352 result += xml.printNode("name", "AVTransportURI");
353 result += xml.printNode("dataType", "string");
354 result += xml.printNodeEnd("stateVariable");
355
356 // AbsoluteCounterPosition
357 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
358 result += xml.printNode("name", "AbsoluteCounterPosition");
359 result += xml.printNode("dataType", "i4");
360 result += xml.printNodeEnd("stateVariable");
361
362 // CurrentRecordQualityMode
363 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
364 result += xml.printNode("name", "CurrentRecordQualityMode");
365 result += xml.printNode("dataType", "string");
366 result += xml.printNodeBeginNl("allowedValueList");
367 result += xml.printNode("allowedValue", "0:EP");
368 result += xml.printNode("allowedValue", "1:LP");
369 result += xml.printNode("allowedValue", "2:SP");
370 result += xml.printNode("allowedValue", "0:BASIC");
371 result += xml.printNode("allowedValue", "1:MEDIUM");
372 result += xml.printNode("allowedValue", "2:HIGH");
373 result += xml.printNode("allowedValue", "NOT_IMPLEMENTED");
374 result += xml.printNode("allowedValue", " vendor-defined ");
375 result += xml.printNodeEnd("allowedValueList");
376 result += xml.printNodeEnd("stateVariable");
377
378 // CurrentMediaDuration
379 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
380 result += xml.printNode("name", "CurrentMediaDuration");
381 result += xml.printNode("dataType", "string");
382 result += xml.printNodeEnd("stateVariable");
383
384 // A_ARG_TYPE_SeekMode
385 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
386 result += xml.printNode("name", "A_ARG_TYPE_SeekMode");
387 result += xml.printNode("dataType", "string");
388 result += xml.printNodeBeginNl("allowedValueList");
389 result += xml.printNode("allowedValue", "ABS_TIME");
390 result += xml.printNode("allowedValue", "REL_TIME");
391 result += xml.printNode("allowedValue", "ABS_COUNT");
392 result += xml.printNode("allowedValue", "REL_COUNT");
393 result += xml.printNode("allowedValue", "TRACK_NR");
394 result += xml.printNode("allowedValue", "CHANNEL_FREQ");
395 result += xml.printNode("allowedValue", "TAPE-INDEX");
396 result += xml.printNode("allowedValue", "FRAME");
397 result += xml.printNodeEnd("allowedValueList");
398 result += xml.printNodeEnd("stateVariable");
399
400 // AVTransportURIMetaData
401 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
402 result += xml.printNode("name", "AVTransportURIMetaData");
403 result += xml.printNode("dataType", "string");
404 result += xml.printNodeEnd("stateVariable");
405
406 // RecordStorageMedium
407 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
408 result += xml.printNode("name", "RecordStorageMedium");
409 result += xml.printNode("dataType", "string");
410 result += xml.printNodeBeginNl("allowedValueList");
411 // reuse playback list but with vendor-defined at end
412 result += xml.printNode("allowedValue", "UNKNOWN");
413 result += xml.printNode("allowedValue", "DV");
414 result += xml.printNode("allowedValue", "MINI-DV");
415 result += xml.printNode("allowedValue", "VHS");
416 result += xml.printNode("allowedValue", "W-VHS");
417 result += xml.printNode("allowedValue", "S-VHS");
418 result += xml.printNode("allowedValue", "D-VHS");
419 result += xml.printNode("allowedValue", "VHSC");
420 result += xml.printNode("allowedValue", "VIDEO8");
421 result += xml.printNode("allowedValue", "HI8");
422 result += xml.printNode("allowedValue", "CD-ROM");
423 result += xml.printNode("allowedValue", "CD-DA");
424 result += xml.printNode("allowedValue", "CD-R");
425 result += xml.printNode("allowedValue", "CD-RW");
426 result += xml.printNode("allowedValue", "VIDEO-CD");
427 result += xml.printNode("allowedValue", "SACD");
428 result += xml.printNode("allowedValue", "MD-AUDIO");
429 result += xml.printNode("allowedValue", "MD-PICTURE");
430 result += xml.printNode("allowedValue", "DVD-ROM");
431 result += xml.printNode("allowedValue", "DVD-VIDEO");
432 result += xml.printNode("allowedValue", "DVD-R");
433 result += xml.printNode("allowedValue", "DVD+RW");
434 result += xml.printNode("allowedValue", "DVD-RW");
435 result += xml.printNode("allowedValue", "DVD-RAM");
436 result += xml.printNode("allowedValue", "DVD-AUDIO");
437 result += xml.printNode("allowedValue", "DAT");
438 result += xml.printNode("allowedValue", "LD");
439 result += xml.printNode("allowedValue", "HDD");
440 result += xml.printNode("allowedValue", "MICRO-MV");
441 result += xml.printNode("allowedValue", "NETWORK");
442 result += xml.printNode("allowedValue", "NONE");
443 result += xml.printNode("allowedValue", "NOT_IMPLEMENTED");
444 result += xml.printNode("allowedValue", " vendor-defined ");
445 result += xml.printNodeEnd("allowedValueList");
446 result += xml.printNodeEnd("stateVariable");
447
448 // RecordMediumWriteStatus
449 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
450 result += xml.printNode("name", "RecordMediumWriteStatus");
451 result += xml.printNode("dataType", "string");
452 result += xml.printNodeBeginNl("allowedValueList");
453 result += xml.printNode("allowedValue", "WRITABLE");
454 result += xml.printNode("allowedValue", "PROTECTED");
455 result += xml.printNode("allowedValue", "NOT_WRITABLE");
456 result += xml.printNode("allowedValue", "UNKNOWN");
457 result += xml.printNode("allowedValue", "NOT_IMPLEMENTED");
458 result += xml.printNodeEnd("allowedValueList");
459 result += xml.printNodeEnd("stateVariable");
460
461 // LastChange
462 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"yes\"");
463 result += xml.printNode("name", "LastChange");
464 result += xml.printNode("dataType", "string");
465 result += xml.printNodeEnd("stateVariable");
466
467 // CurrentTrackDuration
468 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
469 result += xml.printNode("name", "CurrentTrackDuration");
470 result += xml.printNode("dataType", "string");
471 result += xml.printNodeEnd("stateVariable");
472
473 // TransportState
474 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
475 result += xml.printNode("name", "TransportState");
476 result += xml.printNode("dataType", "string");
477 result += xml.printNodeBeginNl("allowedValueList");
478 result += xml.printNode("allowedValue", "STOPPED");
479 result += xml.printNode("allowedValue", "PLAYING");
480 result += xml.printNode("allowedValue", "TRANSITIONING");
481 result += xml.printNode("allowedValue", "PAUSED_PLAYBACK");
482 result += xml.printNode("allowedValue", "PAUSED_RECORDING");
483 result += xml.printNode("allowedValue", "RECORDING");
484 result += xml.printNode("allowedValue", "NO_MEDIA_PRESENT");
485 result += xml.printNodeEnd("allowedValueList");
486 result += xml.printNodeEnd("stateVariable");
487
488 // PossibleRecordQualityModes
489 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
490 result += xml.printNode("name", "PossibleRecordQualityModes");
491 result += xml.printNode("dataType", "string");
492 result += xml.printNodeEnd("stateVariable");
493
494 result += xml.printNodeEnd("serviceStateTable");
495
496 result += xml.printNodeEnd("scpd");
497 return result;
498 }
499};
500
511 public:
512 size_t printDescr(Print& out) override {
514 XMLPrinter xml(out);
515 size_t result = 0;
516 result += xml.printXMLHeader();
517 result += xml.printNodeBeginNl(
518 "scpd", "xmlns=\"urn:schemas-upnp-org:service-1-0\"");
519
520 result += xml.printNodeBeginNl("specVersion");
521 result += xml.printNode("major", 1);
522 result += xml.printNode("minor", 0);
523 result += xml.printNodeEnd("specVersion");
524
525 // actionList: GetMute, GetVolume, SelectPreset, SetVolume, ListPresets,
526 // SetMute
527 result += xml.printNodeBeginNl("actionList");
528
529 result += xml.printNodeBeginNl("action");
530 result += xml.printNode("name", "GetMute");
531 result += xml.printNodeBeginNl("argumentList");
532 result += xml.printArgument("InstanceID", "in", "A_ARG_TYPE_InstanceID");
533 result += xml.printArgument("Channel", "in", "A_ARG_TYPE_Channel");
534 result += xml.printArgument("CurrentMute", "out", "Mute");
535 result += xml.printNodeEnd("argumentList");
536 result += xml.printNodeEnd("action");
537
538 result += xml.printNodeBeginNl("action");
539 result += xml.printNode("name", "GetVolume");
540 result += xml.printNodeBeginNl("argumentList");
541 result += xml.printArgument("InstanceID", "in", "A_ARG_TYPE_InstanceID");
542 result += xml.printArgument("Channel", "in", "A_ARG_TYPE_Channel");
543 result += xml.printArgument("CurrentVolume", "out", "Volume");
544 result += xml.printNodeEnd("argumentList");
545 result += xml.printNodeEnd("action");
546
547 result += xml.printNodeBeginNl("action");
548 result += xml.printNode("name", "SetVolume");
549 result += xml.printNodeBeginNl("argumentList");
550 result += xml.printArgument("InstanceID", "in", "A_ARG_TYPE_InstanceID");
551 result += xml.printArgument("Channel", "in", "A_ARG_TYPE_Channel");
552 result += xml.printArgument("DesiredVolume", "in", "Volume");
553 result += xml.printNodeEnd("argumentList");
554 result += xml.printNodeEnd("action");
555
556 result += xml.printNodeBeginNl("action");
557 result += xml.printNode("name", "SetMute");
558 result += xml.printNodeBeginNl("argumentList");
559 result += xml.printArgument("InstanceID", "in", "A_ARG_TYPE_InstanceID");
560 result += xml.printArgument("Channel", "in", "A_ARG_TYPE_Channel");
561 result += xml.printArgument("DesiredMute", "in", "Mute");
562 result += xml.printNodeEnd("argumentList");
563 result += xml.printNodeEnd("action");
564
565 result += xml.printNodeEnd("actionList");
566
567 result += xml.printNodeBeginNl("serviceStateTable");
568
569 // A_ARG_TYPE_PresetName
570 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
571 result += xml.printNode("name", "A_ARG_TYPE_PresetName");
572 result += xml.printNode("dataType", "string");
573 result += xml.printNodeBeginNl("allowedValueList");
574 result += xml.printNode("allowedValue", "FactoryDefault");
575 result += xml.printNodeEnd("allowedValueList");
576 result += xml.printNodeEnd("stateVariable");
577
578 // Volume with allowedValueRange
579 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
580 result += xml.printNode("name", "Volume");
581 result += xml.printNode("dataType", "ui2");
582 result += xml.printNodeBeginNl("allowedValueRange");
583 result += xml.printNode("minimum", 0);
584 result += xml.printNode("maximum", 100);
585 result += xml.printNode("step", 1);
586 result += xml.printNodeEnd("allowedValueRange");
587 result += xml.printNodeEnd("stateVariable");
588
589 result += xml.printStateVariable("LastChange", "string", true);
590
591 // A_ARG_TYPE_Channel
592 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
593 result += xml.printNode("name", "A_ARG_TYPE_Channel");
594 result += xml.printNode("dataType", "string");
595 result += xml.printNodeBeginNl("allowedValueList");
596 result += xml.printNode("allowedValue", "Master");
597 result += xml.printNodeEnd("allowedValueList");
598 result += xml.printNodeEnd("stateVariable");
599
600 result += xml.printStateVariable("PresetNameList", "string", false);
601 result += xml.printStateVariable("Mute", "boolean", false);
602 result += xml.printStateVariable("A_ARG_TYPE_InstanceID", "ui4", false);
603
604 result += xml.printNodeEnd("serviceStateTable");
605 result += xml.printNodeEnd("scpd");
606 return result;
607 }
608};
609
620 public:
621 size_t printDescr(Print& out) override {
623 XMLPrinter xml(out);
624 size_t result = 0;
625 result += xml.printXMLHeader();
626 result += xml.printNodeBeginNl(
627 "scpd", "xmlns=\"urn:schemas-upnp-org:service-1-0\"");
628
629 result += xml.printNodeBeginNl("specVersion");
630 result += xml.printNode("major", 1);
631 result += xml.printNode("minor", 0);
632 result += xml.printNodeEnd("specVersion");
633
634 result += xml.printNodeBeginNl("actionList");
635
636 result += xml.printNodeBeginNl("action");
637 result += xml.printNode("name", "GetCurrentConnectionIDs");
638 result += xml.printNodeBeginNl("argumentList");
639 result += xml.printArgument("ConnectionIDs", "out", "CurrentConnectionIDs");
640 result += xml.printNodeEnd("argumentList");
641 result += xml.printNodeEnd("action");
642
643 result += xml.printNodeBeginNl("action");
644 result += xml.printNode("name", "GetProtocolInfo");
645 result += xml.printNodeBeginNl("argumentList");
646 result += xml.printArgument("Source", "out", "SourceProtocolInfo");
647 result += xml.printArgument("Sink", "out", "SinkProtocolInfo");
648 result += xml.printNodeEnd("argumentList");
649 result += xml.printNodeEnd("action");
650
651 result += xml.printNodeBeginNl("action");
652 result += xml.printNode("name", "GetCurrentConnectionInfo");
653 result += xml.printNodeBeginNl("argumentList");
654 result +=
655 xml.printArgument("ConnectionID", "in", "A_ARG_TYPE_ConnectionID");
656 result += xml.printArgument("RcsID", "out", "A_ARG_TYPE_RcsID");
657 result +=
658 xml.printArgument("AVTransportID", "out", "A_ARG_TYPE_AVTransportID");
659 result +=
660 xml.printArgument("ProtocolInfo", "out", "A_ARG_TYPE_ProtocolInfo");
661 result += xml.printArgument("PeerConnectionManager", "out",
662 "A_ARG_TYPE_ConnectionManager");
663 result +=
664 xml.printArgument("PeerConnectionID", "out", "A_ARG_TYPE_ConnectionID");
665 result += xml.printArgument("Direction", "out", "A_ARG_TYPE_Direction");
666 result += xml.printArgument("Status", "out", "A_ARG_TYPE_ConnectionStatus");
667 result += xml.printNodeEnd("argumentList");
668 result += xml.printNodeEnd("action");
669
670 result += xml.printNodeEnd("actionList");
671
672 result += xml.printNodeBeginNl("serviceStateTable");
673
674 result += xml.printStateVariable("SinkProtocolInfo", "string", true);
675 result += xml.printStateVariable("A_ARG_TYPE_RcsID", "i4", false);
676 result += xml.printStateVariable("CurrentConnectionIDs", "string", true);
677 result +=
678 xml.printStateVariable("A_ARG_TYPE_ConnectionManager", "string", false);
679
680 // A_ARG_TYPE_ConnectionStatus
681 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
682 result += xml.printNode("name", "A_ARG_TYPE_ConnectionStatus");
683 result += xml.printNode("dataType", "string");
684 result += xml.printNodeBeginNl("allowedValueList");
685 result += xml.printNode("allowedValue", "OK");
686 result += xml.printNode("allowedValue", "ContentFormatMismatch");
687 result += xml.printNode("allowedValue", "InsufficientBandwidth");
688 result += xml.printNode("allowedValue", "UnreliableChannel");
689 result += xml.printNode("allowedValue", "Unknown");
690 result += xml.printNodeEnd("allowedValueList");
691 result += xml.printNodeEnd("stateVariable");
692
693 // A_ARG_TYPE_Direction
694 result += xml.printNodeBeginNl("stateVariable", "sendEvents=\"no\"");
695 result += xml.printNode("name", "A_ARG_TYPE_Direction");
696 result += xml.printNode("dataType", "string");
697 result += xml.printNodeBeginNl("allowedValueList");
698 result += xml.printNode("allowedValue", "Output");
699 result += xml.printNode("allowedValue", "Input");
700 result += xml.printNodeEnd("allowedValueList");
701 result += xml.printNodeEnd("stateVariable");
702
703 result +=
704 xml.printStateVariable("A_ARG_TYPE_ProtocolInfo", "string", false);
705 result += xml.printStateVariable("SourceProtocolInfo", "string", true);
706 result += xml.printStateVariable("A_ARG_TYPE_ConnectionID", "i4", false);
707 result += xml.printStateVariable("A_ARG_TYPE_AVTransportID", "i4", false);
708
709 result += xml.printNodeEnd("serviceStateTable");
710 result += xml.printNodeEnd("scpd");
711 return result;
712 }
713};
714
715} // namespace tiny_dlna
Abstract DLNA Descriptor Generation.
Definition: DLNADescr.h:9
ConnectionManager service descriptor (SCPD) generator.
Definition: DLNAMediaRendererDescrAlt.h:619
size_t printDescr(Print &out) override
Definition: DLNAMediaRendererDescrAlt.h:621
RenderingControl service descriptor (SCPD) generator.
Definition: DLNAMediaRendererDescrAlt.h:510
size_t printDescr(Print &out) override
Definition: DLNAMediaRendererDescrAlt.h:512
AVTransport service descriptor (SCPD) generator.
Definition: DLNAMediaRendererDescrAlt.h:19
size_t printDescr(Print &out) override
Definition: DLNAMediaRendererDescrAlt.h:21
Definition: Allocator.h:13
Functions to efficiently output XML. XML data contains a lot of redundancy so it is more memory effic...
Definition: XMLPrinter.h:56
size_t printNodeBeginNl(const char *node, const char *attributes=nullptr, const char *ns=nullptr)
Prints the beginning of an XML node and a newline.
Definition: XMLPrinter.h:339
size_t printNode(XMLNode node)
Prints an XML node from XMLNode struct.
Definition: XMLPrinter.h:89
size_t printNodeEnd(const char *node, const char *ns=nullptr)
Prints the end of an XML node.
Definition: XMLPrinter.h:352
size_t printArgument(const char *name, const char *direction, const char *relatedStateVariable=nullptr)
Helper to print a UPnP <argument> element with name, direction and optional relatedStateVariable.
Definition: XMLPrinter.h:267
size_t printXMLHeader()
Prints the XML header.
Definition: XMLPrinter.h:79
size_t printStateVariable(const char *name, const char *dataType, bool sendEvents=false, std::function< void()> extra=nullptr)
Helper to print a UPnP <stateVariable> element with name, dataType and optional sendEvents attribute ...
Definition: XMLPrinter.h:289