设备描述之服务描述文件
服务描述文件
UPnP设备服务描述文件定义了一个服务的动作及参数,状态变量的值、范围和事件特性。
每一个服务应该含有0个或多个动作,每个动作含有0个或多个参数,每个参数被设置成输入和输出状态。
输入参数应该列在前面,如果一个动作含有多个输出参数,则第一个参数被设为动作返回值。
每个参数应该与设备服务描述文件SCPD的<serviceStateTable>的一个<stateVarable>元素对应
每个服务应该含有一个或多个状态变量。
一个服务描述文件格式如下(我使用##表示每个元素标签的含义,所有的标签大小写敏感,标签值初URL外大小写不敏感):
<?xml version="1.0"?> ##xml文件标识,大小写敏感,必须
<scpd ##包含了服务描述文件的其他的元素
xmlns="urn:schemas-upnp-org:service-1-0"
xmlns:dt1="urn:domain-name:more-datatypes"
<!-- Declarations for other namespaces added by UPnP Forum working committee (if any) go here -->
<!-- The value of the attribute shall remain as defined by the UPnP Forum working committee.-->
xmlns:dt2="urn:domain-name:vendor-datatypes"
<!-- Declarations for other namespaces added by UPnP vendor (if any) go here -->
<!-- Vendors shall change the URN’s domain-name to a Vendor Domain Name -->
<!-- Vendors shall change vendor-datatypes to reference a vendor-defined namespace -->
configId="configuration number">
<specVersion> ##UDA的版本说明
<major>2</major>
<minor>0</minor>
</specVersion>
<actionList> ##服务所含有的动作列表
<action> ##动作,一般由委员会或服务商提供
<name>actionName</name> ##动作的名字
<argumentList> ##动作的参数列表
<argument> ##具体参数
<name>argumentNameIn1</name> ##参数名
<direction>in</direction> ##参数的方向,in/out所有的in参数要列在所有的out参数前面
<relatedStateVariable>stateVariableName</relatedStateVariable> ##该该参数在状态变量表中的名字
</argument>
<!-- Declarations for other IN arguments defined by UPnP Forum working Committee (if any) go here -->
<argument>
<name>argumentNameOut1</name>
<direction>out</direction>
<retval/> ##标识至多一个输出为返回值
<relatedStateVariable>stateVariableName</relatedStateVariable>
</argument>
<argument>
<name>argumentNameOut2</name>
<direction>out</direction>
<relatedStateVariable>stateVariableName</relatedStateVariable>
</argument>
<!-- Declarations for other OUT arguments defined by UPnP Forum working committee (if any) go here -->
</argumentList>
</action>
<!-- Declarations for other actions defined by UPnP Forum working committee (if any)go here -->
<!-- Declarations for other actions added by UPnP vendor (if any) go here -->
</actionList>
<serviceStateTable> ##服务状态表
<stateVariable sendEvents="yes"|"no" multicast="yes"|"no"> ##sendEvents表明变化时是否发送事件,multicast表明是否组播
<name>variableName</name> ##状态变量名字
<dataType>basic data type</dataType> ##数据类型 ui1/ui2/ui4/ui8/i1/i2/i4/i8/string/boolean/uuid等
<defaultValue>default value</defaultValue> ##默认值
<allowedValueRange> ##允许范围
<minimum>minimum value</minimum> ##最大值
<maximum>maximum value</maximum> ##最小值
<step>increment value</step> ##步长
</allowedValueRange>
</stateVariable>
<stateVariable sendEvents="yes"|"no" multicast="yes"|"no">
<name>variableName</name>
<dataType type="dt1:variable data type">string</dataType>
<defaultValue>default value</defaultValue>
<allowedValueList>
<allowedValue>enumerated value</allowedValue>
<!-- Other allowed values defined by UPnP Forum working committee (if any) go here -->
<!-- Other allowed values defined by vendor (if any) go here -->
</allowedValueList>
</stateVariable>
<stateVariable sendEvents="yes"|"no" multicast="yes"|"no">
<name>variableName</name>
<dataType type="dt2:vendor data type">string</dataType>
<defaultValue>default value</defaultValue>
</stateVariable>
<!-- Declarations for other state variables defined by UPnP Forum working committee (if any) go here -->
<!-- Declarations for other state variables added by UPnP vendor (if any) go here -->
</serviceStateTable>
</scpd>
<relatedStateVariable>标签种的元素名应该和状态变量表中的变量名一致。
如果该标签下的变量名在状态变量表中没有找到,则状态变量会为其单独生成一个前缀为“A_ARG_TYPE”的变量。
用户可以使用和处理自己定义的数据类型
关于描述文件中元素的顺序,应该与规定的设备和服务类型的顺序一致
关于控制消息和响应中的顺序,应该与描述文件中的顺序一致
UPnP服务模版
服务模版与服务描述文件的关系和设备模版与设备描述文件的关系是相同的。