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