<?xml version="1.0" encoding="us-ascii"?>
<?oxygen SCHSchema="http://myurc.org/ns/uisocketdesc/uisocketdesc.sch"?>

<!--
	This is a UI Socket Description (based on ISO/IEC 24752-2) for streaming content from a set of available UPnP MediaServers 1.0 and a set of 
	available UPnP MediaRenderers 1.0 (see http://www.upnp.org/standardizeddcps/mediaserver.asp).  The Socket builds on state variables and 
	actions of ContentDirectory service (service type urn:schemas-upnp-org:service:ContentDirectory:1), AVTransport Service 
	(service type urn:schemas-upnp-org:service:AVTransport:1), RenderingControl Service (urn:schemas-upnp-org:service:RenderingControl:1) 
	and ConnectionManagerService (urn:schemas-upnp-org:service:ConnectionManager:1).  Note that the AVTransport Service can be either on the 
	server or renderer side, depending on the transfer protocol, but this is transparent to the user.  
	
	The UI Socket follows a task-oriented approach in defining UI Sockets.  It is a cross-device socket, involving functions of the MediaServer and 
	MediaRenderer.  Typically this socket would be exposed by a gateway device such as the Universal Control Hub.  However, it is possible, for 
	example, that a MediaServer device would act as a control point to a MediaRenderer and expose this socket, or vice versa.
	
	Note: This is one of two alternate versions of a MediaServer Socket.  It employs an XML-based browsing approach (called "Level 2") for the content 
	to be played from the MediaServer: the DIDL-LITE content tree is presented, and accessible through the API of the Socket implementation.  
	The other version is play-1.uis which is exposing the directory of play files as a flat node window into the tree, with additional Socket elements 
	serving for navigation.
	
	Note on MIME type: This document should be served with a MIME type of "application/urc-uisocketdesc+xml", if applicable.
	
	Copyright: Access Technologies Group, Germany, 2007-2008.  
	This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.  
	To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/us/.
-->

<uiSocket about="http://res.myurc.org/upnp/av/play-2.uis" id="level2socket" xmlns="http://myurc.org/ns/uisocketdesc" xmlns:uis="http://myurc.org/ns/uisocketdesc" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:upnp-av="urn:schemas-upnp-org:av:av" xmlns:uis-upnp="http://myurc.org/ns/uis-upnp" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:didl-lite="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xsi:schemaLocation="http://myurc.org/ns/uisocketdesc uisocketdesc.xsd 
http://purl.org/dc/elements/1.1/ http://www.dublincore.org/schemas/xmls/qdc/2003/04/02/dc.xsd 
http://purl.org/dc/terms/ http://www.dublincore.org/schemas/xmls/qdc/2003/04/02/dcterms.xsd 
urn:schemas-upnp-org:metadata-1-0/upnp/ http://www.upnp.org/schemas/av/upnp-v2-20060531.xsd 
urn:schemas-upnp-org:av:av http://www.upnp.org/schemas/av/av-v1-20060531.xsd 
urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/ http://www.upnp.org/schemas/av/didl-lite-v2.xsd 
http://myurc.org/ns/uis-upnp http://myurc.org/ns/uis-upnp">
	<!--Note to namespaces: The URC is expected to recognize types associated with these namespaces, either by look-up or by built-in capabilities.-->
	<dc:creator>Gottfried Zimmermann</dc:creator>
	<dc:publisher>URC Consortium</dc:publisher>
	<dc:rights>Copyright 2007-2008, Access Technologies Group.  
		This work is licensed under the Creative Commons Attribution-Noncommercial-Share Alike 3.0 License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/us/.</dc:rights>
	<dcterms:conformsTo>http://myurc.org/iso24752-2/2007</dcterms:conformsTo>
	<dcterms:modified>2008-07-08</dcterms:modified>
	<mapping platform="upnp-av">
		<uis-upnp:annotation>Note: The socket description contains data relevant for the user interface only.  Other data may be stored internally such as connection manager specific instanceIDs, etc.</uis-upnp:annotation>
	</mapping>
	<set id="mediaServers" dim="upnp-av:UDN"><!--Ideally, friendly names of the media servers should be made available as dynamic labels for values of uis-upnp:UDN-List.  However, this is not possible since a dimension can only refer to types, not to variables. --><dc:description xml:lang="en">Each instance of this set (i.e. set of subelements) represents an available media server.  From each server, the user can pick the digital media to play (reflected by the variable "selectedNodeId").  There are two methods for the user to select content: browsing or searching.</dc:description><dependency>
		<insert>false()</insert>
		</dependency><variable id="mediaServerFriendlyName" type="xsd:string"><!--Open issue: This variable will not be needed if we can find a way for TAs to deliver dynamic resources for values of external types (in this case values of upnp-av:UDN).-->
		<dc:description xml:lang="en">Friendly name of media server.  This is typically a user-configured string, such as "NAS in kitchen".</dc:description>
		<mapping platform="upnp-av">
			<uis-upnp:annotation>Friendly name from device description.</uis-upnp:annotation>
		</mapping>
		<dependency>
			<relevant>true()</relevant>
			<write>false()</write>
		</dependency>
		</variable><variable id="mediaServerUDN" type="xsd:string" includesRes="true">
		<dependency>
			<relevant>true()</relevant>
			<write>false()</write>
		</dependency>
		</variable><variable id="isMediaServerSelected" type="xsd:boolean">
			<dc:description xml:lang="en">Indicates that this is the currently selected media server to be used for establishing a connection.  Note that only one media server can be selected at a time, i.e. another media server will be automatically deselected.</dc:description>
			<dependency>
				<relevant>true()</relevant>
				<write>true()</write>
			</dependency>
		</variable>
		<variable id="mediaServerProtocols" type="uis:csvlist" includesRes="true" final="true">
		<!--type should be uis:csvlist of upnp-uis:connectionProtocol, but this is not possible to express. -->
		<dc:description xml:lang="en">CSV list of available connection protocols
		(in ProtocolInfo coding) that can be used for playing content from the selected Media Server
		(source) .  
		 Comes with resources, such as labels (human-readable description of connection such as "JPEG over HTTP").  
		 </dc:description>
		<dependency>
			<relevant>false()</relevant>
			<write>false()</write>
		</dependency>
		</variable>
		
		<variable id="searchCapabilities" type="uis:csvlist">
			<dc:description xml:lang="en">Search capabilities of the currently selected media server.
				SearchCapabilities is a CSV list of property names that can be used in search queries. An empty string indicates that the CDS does not support any kind of searching. A wildcard ('*') indicates that the device supports search queries using all tags present in the CDS.
				Note 1: The "smart" URC may use this variable to tweak its user interface for searching.
				Note 2: Since there is no pertinent type definition in the upnp namespace, we are using uis:csvlist here.</dc:description>
			<mapping platform="upnp-av">
				<uis-upnp:annotation>Maps to return value of UPnP action GetSearchCapabilities.  Should be called at initialization and every time the user changes the selected media server.</uis-upnp:annotation>
			</mapping>
			<dependency>
				<relevant>false()</relevant>
				<write>false()</write>
			</dependency>
		</variable>
		<variable id="sortCapabilities" type="uis:csvlist">
			<dc:description xml:lang="en">Sort capabilities of the currently selected media server.
				SortCapabilities is a CSV list of tags that the CDS can use to sort Search() or Browse() results. An empty string indicates that the device does not support any kind of sorting. A wildcard ('*') indicates that the device supports sorting using all tags present in the Content Directory.
				Note: Since there is no pertinent type definition in the upnp namespace, we are using uis:csvlist here.</dc:description>
			<mapping platform="upnp-av">
				<uis-upnp:annotation>Maps to return value of UPnP action GetSortCapabilities.  Should be called at initialization and every time the user changes the selected media server.</uis-upnp:annotation>
			</mapping>
			<dependency>
				<relevant>false()</relevant>
				<write>false()</write>
			</dependency>
		</variable>
		
		<set id="browsing"><!--Open issue: Remove browseFilter and BrowseSortCriteria, and define defaults for them instead?  Or replace by a simple sort criteria variable of type metadataIndexType?-->
			<variable id="selectedBrowseId" type="xsd:string">
				<dc:description xml:lang="en">Id of the node from content that is currently selected for
					playing. This node is in focus for a play operation. </dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>Serves as parameter for a play operation.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<write>false()</write>
				</dependency>
			</variable>
			<command id="fillBrowseContent" type="uis:basicCommand">
				<dc:description xml:lang="en">This command allows the invoker to browse the content
					directory. </dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>Action Browse in CDS.</uis-upnp:annotation>
				</mapping>
				<param id="browseContainerId" dir="in" type="xsd:string">
					<dc:description xml:lang="en"></dc:description>
				</param>
				<param id="browseFilter" type="uis:csvlist" dir="in">
					<dc:description xml:lang="en">browseFilter determines the set of properties of
						digital media items presented in variable "content". Comma-separated list of
						property specifiers (including namespaces); indicates which metadata properties
						are to be returned in the results from browsing. Both properties represented in
						CDS query results as XML elements, as well as properties represented as element
						attributes, may be included in the comma-separated list. If the Filter parameter
						is equal to "*", all properties are returned. As a rule, all required properties
						are returned, but no optional properties will be returned unless explicitly
						requested in the filter. Note: Since there is no pertinent type definition in
						the upnp namespace, we are using uis:csvlist here.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>Maps to the parameter Filter of action Browse. If
							browseFilter is changed by the user, variable "content" needs to get
							updated.</uis-upnp:annotation>
					</mapping>
				</param>
				<param id="browseSortCriteria" type="uis:csvlist" dir="in">
					<dc:description xml:lang="en">browseSortCriteria determines how the digital media
						items are sorted in variable "content". Comma-separated list of signed property
						names, where signed means preceded by '+' or '-' sign. The '+' and '-' indicate
						the sort is in ascending or descending order, respectively, with regard to the
						value of its associated property. Properties appear in the list in order of
						descending sort priority. For example, a value of
						"+upnp:artist,-dc:date,+dc:title" would sort first on artist in ascending order,
						then within each artist by date in descending order (most recent first) and
						finally by title in ascending order. Note 1: Possible values of
						browseSortCriteria are constrained by sortCapabilities. Note 2: A "knowledgeable
						URC" could provide a custom-made user interface with lists and checkboxes to
						fill this variable, and based on the possibilities of sorting described in
						sortCapabilities. Note 3: Since there is no pertinent type definition in the
						upnp namespace, we are using uis:csvlist here.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>Maps to the parameter SortCriteria of action Browse. If
							browseSortCriteria is changed by the user, variable "content" needs to get
							updated.</uis-upnp:annotation>
					</mapping>
				</param>
				<param idref="browseContent" dir="out">
					<dc:description xml:lang="en">The result of the browse operation is reflected in the socket
						element "browseContent". </dc:description>
				</param>
			</command>
			<variable id="browseContent" type="didl-lite:root.type">
				<!--There is a small issue in that the URC standard only allows for referencing type definitions from foreign namespaces, not element definitions.  Therefore, the reference to type didl-lite:root.type would allow for any root tag, beyond &lt;DIDL-Lite&gt; which is defined in the UPnP CD spec.-->
				<dc:description xml:lang="en">content contains the directory content in DIDL-Lite XML, as specified by the UPnP CDS spec of the AV DCP.  Socket clients can read parts of the directory content through DOM-style methods, and the socket may fetch the requested information in pieces from the CDS (this is specific to the UI Socket implementation and its API). </dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>Binds indirectly to result of Browse action (to be invoked implicitly when the client requests data for content).  Retrieval of results from a media server may be partial (on demand). 
					Browse parameters: Filter=browseFilter; SortCriteria=browseSortCriteria; ObjectID, BrowseFlag, StartingIndex, RequestedCount implicit by retrieval API. 
					Note 1: This variable should be kept updated, i.e. based on the evented UPnP variables SystemUpdateID and ContainerUpdateIDs.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>true()</relevant>
					<write>false()</write>
					<!--Note: There is a dependency on browseFilter and browseSortCriteria as arguments for the implicit Browse invocation.  However, since this is modelled as a Socket variable, this cannot be expressed in the UIS language.-->
				</dependency>
			</variable>
		</set>
		<set id="searching">
			<variable id="selectedSearchId" type="xsd:string">
				<dc:description xml:lang="en">Id of the node from search content that is currently selected for
				playing. This node is in focus for a play operation. </dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>Serves as parameter for a play operation.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<write>false()</write>
				</dependency>
			</variable>
			<command id="search" type="uis:basicCommand" optional="true">
				<dc:description xml:lang="en">This command allows the invoker to search the content directory for objects that match some search criteria. The search criteria are specified as a query string operating on properties with comparison and logical operators.
				Note 1: The search command is independent from browsing, and has its own result "variable" as an output parameter.  However, a client may show the results of the search in the content tree if it wishes so.
				Note 2: It should be possible for a client to provide an incremental search function based on the user's partial input, by invoking the search command multiple times (incrementally).</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>Action Search in CDS. Parameters: ContainerID=searchContainerId; SearchCriteria=searchCriteria; Filter=searchFilter; SortCriteria=searchSortCriteria;  StartingIndex and RequestedCount implicit.  Result is presented as output parameter "searchResult".</uis-upnp:annotation>
				</mapping>
				<param id="searchContainerId" type="xsd:string" dir="in">
					<dc:description xml:lang="en">Unique identifier of the container in which to begin searching. A ContainerID value of zero corresponds to the root object of the Content Directory.  
					Note: Searchable must be true for the container.</dc:description>
				</param>
				<param id="searchCriteria" type="uis:csvlist" dir="in">
					<dc:description xml:lang="en">Search string for expert users.  The SearchCriteria parameter gives one or more search criteria to be used for querying the Content Directory.  For syntax details refer to CD 1.0 spec, 2.5.5.1. SearchCriteria String Syntax.
					Note 1: Possible values are constrained by searchCapabilities.
					Note 2: A "smart" URC may generate the searchCriteria string from a more user-friendly set of widgets.
					Note 3: Since there is no pertinent type definition in the upnp namespace, we are using xsd:string here.</dc:description>
				</param><!--Open issue: Remove searchFilter and SearchSortCriteria, and define defaults for them instead?  Or replace by a simple sort criteria variable of type metadataIndexType? -->
				<param id="searchFilter" type="uis:csvlist" dir="in">
					<dc:description xml:lang="en">Comma-separated list of property specifiers (including namespaces); indicates which metadata properties are to be returned in the results from searching.
					Both properties represented in CDS query results as XML elements, as well as properties represented as element attributes, may be included in the comma-separated list.
					If the Filter parameter is equal to "*", all properties are returned.
					As a rule, all required properties are returned, but no optional properties will be returned unless explicitly requested in the filter.
					Note 1: A "smart" URC may generate the searchFilter list from a more user-friendly set of widgets.
					Note 2: Since there is no pertinent type definition in the upnp namespace, we are using uis:csvlist here.</dc:description>
				</param>
				<param id="searchSortCriteria" type="uis:csvlist" dir="in">
					<dc:description xml:lang="en">CSV list of signed property names, where signed means preceded by '+' or '-' sign. The '+' and '-' indicate the sort is in ascending or descending order, respectively, with regard to the value of its associated property. Properties appear in the list in order of descending sort priority. For example, a value of "+upnp:artist,-dc:date,+dc:title" would sort first on artist in ascending order, then within each artist by date in descending order (most recent first) and finally by title in ascending order.
					Note 1: This value is constrained by sortCapabilities.
					Note 2: A "smart" URC would present this in a user-friendly way.
					Note 3: Since there is no pertinent type definition in the upnp namespace, we are using uis:csvlist here.</dc:description>
				</param>
				<param idRef="searchContent" dir="out">
					<dc:description xml:lang="en">searchResult contains the result of the search operation as a flat list coded in DIDL-Lite XML, as specified by the UPnP CDS spec of the AV DCP.  Socket clients can read parts of the directory content through DOM-style methods, and the socket may fetch the requested information in pieces from the CDS through subsequent invocations of the Browse action (this is specific to the UI Socket implementation and its API). </dc:description>
				</param>
			</command>
			<variable id="searchContent" type="didl-lite:root.type">
				<dc:description xml:lang="en">searchContent contains the directory content in DIDL-Lite XML, as specified by the UPnP CDS spec of the AV DCP.  Socket clients can read parts of the directory content through DOM-style methods, and the socket may fetch the requested information in pieces from the CDS (this is specific to the UI Socket implementation and its API). </dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>Binds indirectly to result of Search action (to be invoked implicitly when the client requests data for content).  Retrieval of results from a media server may be partial (on demand). 
					Search parameters: Filter=searchFilter; SearchCriteria=searchCriteria; SortCriteria=searchSortCriteria; ObjectID, BrowseFlag, StartingIndex, RequestedCount implicit by retrieval API. 
					Note 1: This variable should be kept updated, i.e. based on the evented UPnP variables SystemUpdateID and ContainerUpdateIDs.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>true()</relevant>
					<write>false()</write>
					<!--Note: There is a dependency on searchFilter,searchCriteria and searchSortCriteria as arguments for the implicit Search invocation.  However, since this is modelled as a Socket variable, this cannot be expressed in the UIS language.-->
				</dependency>
			</variable>
		</set>
		
	</set>
	<set id="mediaRenderers" dim="upnp-av:UDN"><!--Ideally, friendly names of the media players should be made available as dynamic labels for values of uis-upnp:UDN-List.  However, this is not possible since a dimension can only refer to types, not to variables. --><dc:description xml:lang="en">Each instance of this set (i.e. set of subelements) represents an available media renderer.  For each renderer, the user can set rendering control features with the renderer being connected or not connected.</dc:description><dependency>
					<insert>false()</insert>
					
				</dependency><variable id="mediaRendererFriendlyName" type="xsd:string"><!--Open issue: This variable will not be needed if we can find a way for TAs to deliver dynamic resources for values of external types (in this case values of upnp-av:UDN).-->
			<dc:description xml:lang="en">Friendly name of media renderer.  This is typically a user-configured string, such as "living room TV".</dc:description>
			<mapping platform="upnp-av">
				<uis-upnp:annotation>Friendly name from device description.</uis-upnp:annotation>
			</mapping>
			<dependency>
				<relevant>true()</relevant>
				<write>false()</write>
			</dependency>
		</variable><variable id="mediaRendererUDN" type="xsd:string" includesRes="true">
		<dependency>
			<relevant>true()</relevant>
			<write>false()</write>
		</dependency>
		</variable><variable id="isMediaRendererSelected" type="xsd:boolean">
			<dc:description xml:lang="en">Indicates that this is the currently selected media renderer to be used for establishing a connection.  Note that only one media renderer can be selected at a time, i.e. another media renderer will be automatically deselected.</dc:description>
			
			<dependency>
				<relevant>true()</relevant>
				<write>true()</write>
			</dependency>
		</variable>	
		
		<variable id="mediaRendererProtocols" type="uis:csvlist" includesRes="true" final="true">
		<!--type should be uis:csvlist of upnp-uis:connectionProtocol, but this is not possible to express. -->
		<dc:description xml:lang="en">CSV list of available connection protocols
		(in ProtocolInfo coding) that can be used for playing content from the selected Media Renderer
		(sink) .  
		 Comes with resources, such as labels (human-readable description of connection such as "JPEG over HTTP").  
		 </dc:description>
		<dependency>
			<relevant>false()</relevant>
			<write>false()</write>
		</dependency>
		</variable>
		
		<set id="renderingcontrol">
			<dc:description xml:lang="en">This set contains elements pertaining to the rendering settings of the media renderer, applying to its post-mix settings (connection-independent).</dc:description>
			<mapping platform="upnp-av">
				<uis-upnp:annotation>***** Elements in this set are based on RenderingControl Service *****
				Elements of this set bind to the UPnP actions with parameter instanceID=0.  </uis-upnp:annotation>
			</mapping>
			<variable id="volumeMaxValue" type="xsd:unsignedShort" final="true" optional="true">
				<dc:description xml:lang="en">Upper value limit for variable volume.  </dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>For initialization, extract upper limit for state variable Volume from XML Service Description for RenderingControl service of Target device (same for all channels).</uis-upnp:annotation>
				</mapping>
			</variable>
			<set id="presets">
				<dc:description xml:lang="en">This set contains pre-defined configuration settings for the selected media renderer.</dc:description>
				<variable id="presetNameList" type="uis:csvlist">
					<dc:description xml:lang="en">This variable contains a comma-separated list (i.e. CSV(string)) of valid preset names currently supported by this device.  presetNameList must include "FactoryDefaults", and may include "InstallationDefaults".  
					Its value changes if/when the device changes the set of presets that it supports. This may occur in conjunction with a vendor-defined action or some other non-UPnP event. This state variable will include any of the predefined presets that are supported by the device.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>UPnP action ListPresets for getting, and state variable LastChange for updates.</uis-upnp:annotation>
					</mapping>
					<dependency>
						<relevant>true()</relevant>
						<write>false()</write>
					</dependency>
				</variable>
				<command id="selectPreset" type="uis:basicCommand">
					<dc:description xml:lang="en">This command restores (a subset) of the state variables to the values associated with the specified preset. The specified preset name may be one of those in presetNameList.  The selected preset determines which state variables will be affected.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>UPnP action SelectPreset for setting.  Getter method not available.  No updates.</uis-upnp:annotation>
					</mapping>
					<param id="presetName" type="xsd:string" dir="in">
						<selection closed="true">
							<selectionSetDynamic id="presetNameSelectionId" varRef="presetNameList"/>
						</selection>
					</param>
					<param idref="video" dir="out">
					
				</param>
					<param idref="chAudio" dir="out">
					
				</param>
				</command>
			</set>
			<set id="video">
				<dc:description xml:lang="en">This set contains video rendering controls for the selected media renderer.</dc:description>
				<variable id="brightnessMaxValue" type="xsd:unsignedShort" final="true" optional="true">
					<dc:description xml:lang="en">Upper value limit for variable brightness.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>For initialization, extract upper limit for state variable Brightness from XML Service Description for RenderingControl service of Target device.</uis-upnp:annotation>
					</mapping>
				</variable>
				<variable id="contrastMaxValue" type="xsd:unsignedShort" final="true" optional="true">
					<dc:description xml:lang="en">Upper value limit for variable contrast.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>For initialization, extract upper limit for state variable Contrast from XML Service Description for RenderingControl service of Target device.</uis-upnp:annotation>
					</mapping>
				</variable>
				<variable id="sharpnessMaxValue" type="xsd:unsignedShort" final="true" optional="true">
					<dc:description xml:lang="en">Upper value limit for variable sharpness.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>For initialization, extract upper limit for state variable Sharpness from XML Service Description for RenderingControl service of Target device.</uis-upnp:annotation>
					</mapping>
				</variable>
				<variable id="redVideoGainMaxValue" type="xsd:unsignedShort" final="true" optional="true">
					<dc:description xml:lang="en">Upper value limit for variable redVideoGain.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>For initialization, extract upper limit for state variable RedVideoGain from XML Service Description for RenderingControl service of Target device.</uis-upnp:annotation>
					</mapping>
				</variable>
				<variable id="greenVideoGainMaxValue" type="xsd:unsignedShort" final="true" optional="true">
					<dc:description xml:lang="en">Upper value limit for variable greenVideoGain.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>For initialization, extract upper limit for state variable GreenVideoGain from XML Service Description for RenderingControl service of Target device.</uis-upnp:annotation>
					</mapping>
				</variable>
				<variable id="blueVideoGainMaxValue" type="xsd:unsignedShort" final="true" optional="true">
					<dc:description xml:lang="en">Upper value limit for variable blueVideoGain.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>For initialization, extract upper limit for state variable BlueVideoGain from XML Service Description for RenderingControl service of Target device.</uis-upnp:annotation>
					</mapping>
				</variable>
				<variable id="redVideoBlackLevelMaxValue" type="xsd:unsignedShort" final="true" optional="true">
					<dc:description xml:lang="en">Upper value limit for variable redVideoBlackLevel.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>For initialization, extract upper limit for state variable RedVideoBlackLevel from XML Service Description for RenderingControl service of Target device.</uis-upnp:annotation>
					</mapping>
				</variable>
				<variable id="greenVideoBlackLevelMaxValue" type="xsd:unsignedShort" final="true" optional="true">
					<dc:description xml:lang="en">Upper value limit for variable greenVideoBlackLevel.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>For initialization, extract upper limit for state variable GreenVideoBlackLevel from XML Service Description for RenderingControl service of Target device.</uis-upnp:annotation>
					</mapping>
				</variable>
				<variable id="blueVideoBlackLevelMaxValue" type="xsd:unsignedShort" final="true" optional="true">
					<dc:description xml:lang="en">Upper value limit for variable blueVideoBlackLevel.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>For initialization, extract upper limit for state variable BlueVideoBlackLevel from XML Service Description for RenderingControl service of Target device.</uis-upnp:annotation>
					</mapping>
				</variable>
				<variable id="colorTemperatureMaxValue" type="xsd:unsignedShort" final="true" optional="true">
					<dc:description xml:lang="en">Upper value limit for variable colorTemperature.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>For initialization, extract upper limit for state variable ColorTemperature from XML Service Description for RenderingControl service of Target device.</uis-upnp:annotation>
					</mapping>
				</variable>
				<variable id="horizontalKeystoneMinValue" type="xsd:short" final="true" optional="true">
					<dc:description xml:lang="en">Upper value limit for variable horizontalKeystone.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>For initialization, extract lower limit for state variable HorizontalKeystone from XML Service Description for RenderingControl service of Target device.</uis-upnp:annotation>
					</mapping>
				</variable>
				<variable id="horizontalKeystoneMaxValue" type="xsd:short" final="true" optional="true">
					<dc:description xml:lang="en">Upper value limit for variable horizontalKeystone.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>For initialization, extract upper limit for state variable HorizontalKeystone from XML Service Description for RenderingControl service of Target device.</uis-upnp:annotation>
					</mapping>
				</variable>
				<variable id="verticalKeystoneMinValue" type="xsd:short" final="true" optional="true">
					<dc:description xml:lang="en">Upper value limit for variable verticalKeystone.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>For initialization, extract lower limit for state variable VerticalKeystone from XML Service Description for RenderingControl service of Target device.</uis-upnp:annotation>
					</mapping>
				</variable>
				<variable id="verticalKeystoneMaxValue" type="xsd:short" final="true" optional="true">
					<dc:description xml:lang="en">Upper value limit for variable verticalKeystone.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>For initialization, extract upper limit for state variable VerticalKeystone from XML Service Description for RenderingControl service of Target device.</uis-upnp:annotation>
					</mapping>
				</variable>
				<variable id="brightness" type="xsd:unsignedShort" optional="true">
					<dc:description xml:lang="en">This unsigned integer variable represents the current brightness setting of the associated display device. Its value ranges from a minimum of 0 to some device specific maximum. A numerical change of 1 corresponds to the smallest incremental change that is supported by the device.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>Action GetBrightness for getting, SetBrightness for setting.  State variable LastChange for updates.</uis-upnp:annotation>
					</mapping>
					<dependency>
						<maxInclusive>value('brightnessMaxValue')</maxInclusive>
					</dependency>
				</variable>
				<variable id="contrast" type="xsd:unsignedShort" optional="true">
					<dc:description xml:lang="en">This unsigned integer variable represents the current contrast setting of the associated display device. Its value ranges from a minimum of 0 to some device specific maximum. A numerical change of 1 corresponds to the smallest incremental change that is supported by the device.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>Action GetContrast for getting, SetContrast for setting.  State variable LastChange for updates.</uis-upnp:annotation>
					</mapping>
					<dependency>
						<maxInclusive>value('contrastMaxValue')</maxInclusive>
					</dependency>
				</variable>
				<variable id="sharpness" type="xsd:unsignedShort" optional="true">
					<dc:description xml:lang="en">This unsigned integer variable represents the current sharpness setting of the associated display device. Its value ranges from a minimum of 0 to some device specific maximum. A numerical change of 1 corresponds to the smallest incremental change that is supported by the device.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>Action GetSharpness for getting, SetSharpness for setting.  State variable LastChange for updates.</uis-upnp:annotation>
					</mapping>
					<dependency>
						<maxInclusive>value('sharpnessMaxValue')</maxInclusive>
					</dependency>
				</variable>
				<variable id="redVideoGain" type="xsd:unsignedShort" optional="true">
					<dc:description xml:lang="en">This unsigned integer variable represents the current setting of the red "gain" control for the associated display device. Its value ranges from a minimum of 0 to some device specific maximum. A numerical change of 1 corresponds to the smallest incremental change that is supported by the device.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>Action GetRedVideoGain for getting, SetRedVideoGain for setting.  State variable LastChange for updates.</uis-upnp:annotation>
					</mapping>
					<dependency>
						<maxInclusive>value('redVideoGainMaxValue')</maxInclusive>
					</dependency>
				</variable>
				<variable id="greenVideoGain" type="xsd:unsignedShort" optional="true">
					<dc:description xml:lang="en">This unsigned integer variable represents the current setting of the green "gain" control for the associated display device. Its value ranges from a minimum of 0 to some device specific maximum. A numerical change of 1 corresponds to the smallest incremental change that is supported by the device.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>Action GetGreenVideoGain for getting, SetGreenVideoGain for setting.  State variable LastChange for updates.</uis-upnp:annotation>
					</mapping>
					<dependency>
						<maxInclusive>value('greenVideoGainMaxValue')</maxInclusive>
					</dependency>
				</variable>
				<variable id="blueVideoGain" type="xsd:unsignedShort" optional="true">
					<dc:description xml:lang="en">This unsigned integer variable represents the current setting of the blue "gain" control for the associated display device. Its value ranges from a minimum of 0 to some device specific maximum. A numerical change of 1 corresponds to the smallest incremental change that is supported by the device.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>Action GetBlueVideoGain for getting, SetBlueVideoGain for setting.  State variable LastChange for updates.</uis-upnp:annotation>
					</mapping>
					<dependency>
						<maxInclusive>value('blueVideoGainMaxValue')</maxInclusive>
					</dependency>
				</variable>
				<variable id="redVideoBlackLevel" type="xsd:unsignedShort" optional="true">
					<dc:description xml:lang="en">This unsigned integer variable represents the current setting for the minimum output intensity of red for the associated display device. Its value ranges from a minimum of 0 to some device specific maximum. A numerical change of 1 corresponds to the smallest incremental change that is supported by the device.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>Action GetRedVideoBlackLevel for getting, SetRedVideoBlackLevel for setting.  State variable LastChange for updates.</uis-upnp:annotation>
					</mapping>
					<dependency>
						<maxInclusive>value('redVideoBlackLevelMaxValue')</maxInclusive>
					</dependency>
				</variable>
				<variable id="greenVideoBlackLevel" type="xsd:unsignedShort" optional="true">
					<dc:description xml:lang="en">This unsigned integer variable represents the current setting for the minimum output intensity of green for the associated display device. Its value ranges from a minimum of 0 to some device specific maximum. A numerical change of 1 corresponds to the smallest incremental change that is supported by the device.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>Action GetGreenVideoBlackLevel for getting, SetGreenVideoBlackLevel for setting.  State variable LastChange for updates.</uis-upnp:annotation>
					</mapping>
					<dependency>
						<maxInclusive>value('greenVideoBlackLevelMaxValue')</maxInclusive>
					</dependency>
				</variable>
				<variable id="blueVideoBlackLevel" type="xsd:unsignedShort" optional="true">
					<dc:description xml:lang="en">This unsigned integer variable represents the current setting for the minimum output intensity of blue for the associated display device. Its value ranges from a minimum of 0 to some device specific maximum. A numerical change of 1 corresponds to the smallest incremental change that is supported by the device.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>Action GetBlueVideoBlackLevel for getting, SetBlueVideoBlackLevel for setting.  State variable LastChange for updates.</uis-upnp:annotation>
					</mapping>
					<dependency>
						<maxInclusive>value('blueVideoBlackLevelMaxValue')</maxInclusive>
					</dependency>
				</variable>
				<variable id="colorTemperature" type="xsd:unsignedShort" optional="true">
					<dc:description xml:lang="en">This unsigned integer variable represents the current setting for the "color quality" of white for the associated display device. Its value ranges from a minimum of 0 to some device specific maximum. A numerical change of 1 corresponds to the smallest incremental change that is supported by the device</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>Action GetColorTemperature for getting, SetColorTemperature for setting.  State variable LastChange for updates.</uis-upnp:annotation>
					</mapping>
					<dependency>
						<maxInclusive>value('colorTemperatureMaxValue')</maxInclusive>
					</dependency>
				</variable>
				<variable id="horizontalKeystone" type="xsd:short" optional="true">
					<dc:description xml:lang="en">This signed integer variable represents the current level of compensation for horizontal distortion of the associated display device. Its value ranges from device-specific negative number to a device specific positive number. Zero does not need to be in the middle of this range, although it will be for most devices. A numerical change of 1 corresponds to the smallest incremental change that is supported by the device.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>Action GetHorizontalKeystone for getting, SetHorizontalKeystone for setting.  State variable LastChange for updates.</uis-upnp:annotation>
					</mapping>
					<dependency>
						<minInclusive>value('horizontalKeystoneMinValue')</minInclusive>
						<maxInclusive>value('horizontalKeystoneMaxValue')</maxInclusive>
					</dependency>
				</variable>
				<variable id="verticalKeystone" type="xsd:short" optional="true">
					<dc:description xml:lang="en">This signed integer variable represents the current level of compensation for vertical distortion of the associated display device. Its value ranges from device-specific negative number to a device specific positive number. Zero does not need to be in the middle of this range, although it will be for most devices. A numerical change of 1 corresponds to the smallest incremental change that is supported by the device.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>Action GetVerticalKeystone for getting, SetVerticalKeystone for setting.  State variable LastChange for updates.</uis-upnp:annotation>
					</mapping>
					<dependency>
						<minInclusive>value('verticalKeystoneMinValue')</minInclusive>
						<maxInclusive>value('verticalKeystoneMaxValue')</maxInclusive>
					</dependency>
				</variable>
			</set>
			<set id="chAudio" dim="uis-upnp:channelType">
				<!--The set's repeating is based on uis-upnp:channelType, i.e. a subset of channelType will be used as indices.  The labels for the individual entries of channelType should be used to denote the individual group iterations.-->
				<dc:description xml:lang="en">This set contains audio settings per channel, for the selected media renderer.</dc:description>
				<variable id="chVolumeDBMinValue" type="xsd:short" final="true" optional="true">
					<dc:description xml:lang="en">Lower value limit for channel-specific variable volumeDB.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>For initialization, call UPnP action GetVolumeDBRange.</uis-upnp:annotation>
					</mapping>
				</variable>
				<variable id="chVolumeDBMaxValue" type="xsd:short" final="true" optional="true">
					<dc:description xml:lang="en">Upper value limit for channel-specific variable volumeDB.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>For initialization, call UPnP action GetVolumeDBRange.</uis-upnp:annotation>
					</mapping>
				</variable>
				<variable id="chMute" type="xsd:boolean" optional="true">
					<dc:description xml:lang="en">"Mute" setting of the corresponding channel</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>Action SetMute for setting, GetMute for getting.  State variable LastChange for updates.</uis-upnp:annotation>
					</mapping>
				</variable>
				<variable id="chVolume" type="xsd:unsignedShort" optional="true">
					<dc:description xml:lang="en">Volume of corresponding channel</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>Action SetVolume for setting, GetVolume for getting.  State variable LastChange for updates.</uis-upnp:annotation>
					</mapping>
					<dependency>
						<write>not(value('./chMute'))</write>
						<maxInclusive>value('./chVolumeMaxValue')</maxInclusive>
					</dependency>
				</variable>
				<variable id="chVolumeDB" type="xsd:short" optional="true">
					<dc:description xml:lang="en">This signed integer variable represents the current volume setting of the associated audio channel. Its value represents the current setting in units of "1/256 of a decibel (dB)". This means that a numeric change of 1 corresponds to a volume change of 1/256 dB. The value range for this variable is a minimum value of -32,767 (800116) (which equals -127.9961dB) and a maximum value of +32,767 (7FFF16) (which equals +127.9961dB). The value corresponding to 800016 is invalid.
					If there is any chVolumeDB variable, chVolumeDB[Master] must be present.  Note that each chVolumeDB variable has its own value space (type).</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>UPnP action GetVolumeDB for getting, and SetVolumeDB for setting.  State variable LastChange for updates.</uis-upnp:annotation>
					</mapping>
					<dependency>
						<write>not(value('./chMute'))</write>
						<minInclusive>value('./chVolumeDBMinValue')</minInclusive>
						<maxInclusive>value('./chVolumeDBMaxValue')</maxInclusive>
					</dependency>
				</variable>
				<variable id="chLoudness" type="xsd:boolean" optional="true">
					<dc:description xml:lang="en">This boolean variable represents the current "loudness" setting of the associated audio channel. A value of TRUE indicates that the loudness effect is active.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>UPnP action GetLoudness for getting, SetLoudness for setting.  State variable LastChange for updates.</uis-upnp:annotation>
					</mapping>
					<dependency>
						<write>not(value('./chMute'))</write>
					</dependency>
				</variable>
			</set>
		</set>
	</set>
	<command id="connect" type="uis:timedCommand">
		<dc:description xml:lang="en">Open a connection between the selected media server and media renderer for playing content.  Command state shall reflect success or failure.  After successful invocation, the "connections" set has a new actual index which specifies the newly created connection.
				Note: A connection may cause an error even after it has been successfully set up.  In this case any of the notifications in set "conNotifications" will be raised.</dc:description>
		<mapping platform="upnp-av">
			<uis-upnp:annotation>The user may choose an appropriate connection protocol as parameter.  Otherwise the system will pick one.</uis-upnp:annotation>
		</mapping>
		<param idref="isMediaServerSelected" dir="in"/>
		<param idref="isMediaRendererSelected" dir="in"/>
		
		<param id="newConnectionId" type="uis-upnp:connectionIdType" dir="out">
			<dc:description xml:lang="en">Identifier for new connection.  This identifier can be used as index for the connections set to get access to the newly created connection.  Note that command state must be "done" or "succeeded" after successful creation.</dc:description>
		</param>
		<param id="connectionError" type="uis-upnp:connectionErrorType" dir="out">
			<dc:description xml:lang="en">Must be "noError" if command state is not "failed".  </dc:description>
		</param>
	</command>
	
	<set id="connections" dim="uis-upnp:connectionIdType">
		<dc:description xml:lang="en">This set contains the current connections (along the index of connection ids).  Initially empty (no actual index).  The user can create new connections by invoking the command "connect".  The user can remove a connection by invoking the command "removeConnection".</dc:description>
		<mapping platform="upnp-av">
			<uis-upnp:annotation>When populating this set with a new instance, the system is responsible for setting up a connection between media server and media renderer through the connection services on either end.  Only successful connections will result in a new actual index.</uis-upnp:annotation>
		</mapping>
		<dependency>
			<insert>false()</insert>
		</dependency>
		<command id="removeConnection" type="uis:timedCommand">
			<dc:description xml:lang="en">Close the connection that this command belongs to.</dc:description>
			<mapping platform="upnp-av">
				<uis-upnp:annotation>UPnP action closeConnection on ConnectionService.</uis-upnp:annotation>
			</mapping>
		</command><set id="conSetup">
			<dc:description xml:lang="en">Basic connection properties.</dc:description>
			<variable id="connectedMediaServer" type="upnp-av:UDN" final="true" includesRes="true">
				<dc:description xml:lang="en">Media server of the connection.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UDN of media server.</uis-upnp:annotation>
				</mapping>
			</variable>
			<variable id="connectedMediaServerFriendlyName" type="xsd:string"><!--Open issue: This variable will not be needed if we can find a way for TAs to deliver dynamic resources for values of external types (in this case values of upnp-av:UDN).-->
				<dc:description xml:lang="en">Friendly name of connected media server.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>Friendly name from device description.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>true()</relevant>
					<write>false()</write>
				</dependency>
			</variable>
			<variable id="connectedMediaRenderer" type="upnp-av:UDN" final="true" includesRes="true">
				<dc:description xml:lang="en">Media renderer of the connection.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UDN of media renderer.</uis-upnp:annotation>
				</mapping>
			</variable>
			<variable id="connectedMediaRendererFriendlyName" type="xsd:string">
				<!--Open issue: This variable will not be needed if we can find a way for TAs to deliver dynamic resources for values of external types (in this case values of upnp-av:UDN).-->
				<dc:description xml:lang="en">Friendly name of connected media renderer.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>Friendly name from device
					description.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>true()</relevant>
					<write>false()</write>
				</dependency>
			</variable>
			<variable id="connectionProtocol" type="uis-upnp:connectionProtocolType" final="true">
				<dc:description xml:lang="en">This value reflects the details of the protocol used for the connection.</dc:description>
			</variable>
		</set>
		
		<set id="transport">
			<mapping platform="upnp-av">
				<uis-upnp:annotation>***** Elements in this set are based on AVTransport Service *****
				Note: The UPnP commands GetMediaInfo, GetTransportInfo, GetPositionInfo, GetDeviceCapabilities and GetTransportSettings have no counterparts in the UI Socket since this information is already available through socket variables.</uis-upnp:annotation>
			</mapping>
			<variable id="possiblePlaybackStorageMedia" type="uis:csvlist" final="true">
				<dc:description xml:lang="en">Contains a static, comma-separated list of storage media that the device can play.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action GetDeviceCapabilities for getting.  No updates expected since static.
					Note: Since XSD has no means of defining the item type of a CSV list, we are implicitly using xsd:string here as item type.  Correct item types are upnp-av:storageMedium.wc.values.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>false()</relevant>
					<write>false()</write>
				</dependency>
			</variable>
			<variable id="possibleRecordStorageMedia" type="uis:csvlist" final="true" optional="true">
				<dc:description xml:lang="en">Contains a static, comma-separated list of storage media onto which the device can record.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action GetDeviceCapabilities for getting. No updates expected since static.   Not present if value is "NOT_IMPLEMENTED" (i.e. service doesn't support recording).
					Note: Since XSD has no means of defining the item type of a CSV list, we are implicitly using xsd:string here as item type.  Correct item types are upnp-av:storageMedium.wc.values.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>false()</relevant>
					<write>false()</write>
				</dependency>
			</variable>
			<variable id="possibleRecordQualityModes" type="uis:csvlist" final="true" optional="true">
				<dc:description xml:lang="en">Contains a static, comma-separated list of recording quality modes that the device supports. For example, for an analog VHS recorder, the string would be "0:EP,1:LP,2:SP", while for a PVR the string would be "0:BASIC,1:MEDIUM,2:HIGH". The string specifics depend on the type of device containing the AVTransport. Note that record quality modes are independent of the content-format that may be exposed to the network through a ConnectionManager service. </dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action GetDeviceCapabilities for getting.  State variable LastChange for updates.  Not present if value is "NOT_IMPLEMENTED" (i.e. service doesn't support recording).
					Note: Since XSD has no means of defining the item type of a CSV list, we are implicitly using xsd:string here as item type.  Correct item types are uis-upnp:recordQualityModeType.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>false()</relevant>
					<write>false()</write>
				</dependency>
			</variable>
			<variable id="isCurrentPlayModeSettable" type="xsd:boolean" final="true">
				<dc:description xml:lang="en">Indicates whether the play mode can be set by the user.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>True if UPnP action SetPlayMode is available, otherwise false.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>false()</relevant>
					<write>false()</write>
				</dependency>
			</variable>
			<variable id="recordQualityModeSettable" type="xsd:boolean" final="true" optional="true">
				<dc:description xml:lang="en">Indicates that the currentRecordQualityMode can be set by the user.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>True if UPnP action SetRecordQualityMode is present, otherwise false.  Not present if value of UPnP variable CurrentRecordQualityMode is "NOT_IMPLEMENTED".</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>false()</relevant>
					<write>false()</write>
				</dependency>
			</variable>
			<variable id="availableTransportPlaySpeeds" type="uis-upnp:transportPlaySpeedListType" final="true">
				<dc:description xml:lang="en">Space-separated list of allowed values for variable transportPlaySpeed.
				Note: This cannot be defined as type since it may vary between devices.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>Retrieve actually supported speeds from the AVTransport service description, AllowedValueList for state variable TransportPlaySpeed.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>false()</relevant>
					<write>false()</write>
				</dependency>
			</variable>
			<variable id="transportState" type="uis-upnp:transportStateType">
				<!--Note: Vendor-specific values of the UPnP state variable TransportStatus may give indication for additional notify elements.-->
				<dc:description xml:lang="en">Conceptually 'top-level' state of the transport, e.g., whether it is playing, recording, etc.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action GetMediaInfo for getting.  UPnP state variable LastChange for updates.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>true()</relevant>
					<write>false()</write>
				</dependency>
			</variable>
			<notify id="transportStatusError" category="error">
				<dc:description xml:lang="en">This notification is raised when the transport service indicates an error.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>Active if TransportStatus is ERROR_OCCURRED.   UPnP action GetTransportInfo for getting.  LastChange for updates.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<explicitAck>false()</explicitAck>
				</dependency>
			</notify>
			<variable id="playbackStorageMedium" type="upnp-av:storageMedium.wc.values">
				<dc:description xml:lang="en">Indicates the storage medium of the resource specified by AVTransportURI. If no resource is specified, then the state variable is set to "NONE". If AVTransportURI refers to a resource received from the UPnP network the state variable is set to "NETWORK". Device vendors may extend the specified allowed value list of this variable. For example, various types of solid-state media formats may be added in a vendor-specific way.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action GetMediaInfo for getting.  UPnP state variable LastChange for updates.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<write>false()</write>
				</dependency>
				<selection>
					<selectionSetDynamic id="selectionPlaybackStorageMedium" varRef="possiblePlaybackStorageMedia"/>
				</selection>
				<!--Issue: Because the type definition of upnp-av:storageMedium.wc.values does not have an id attribute, we cannot define labels for the values of this type.  However, we can define labels for the variable playbackStorageMedium.-->
			</variable>
			<variable id="recordStorageMedium" type="upnp-av:storageMedium.wc.values" optional="true">
				<dc:description xml:lang="en">Indicates the storage medium where the resource specified by AVTransportURI will be recorded when a Record action is issued. If no resource is specified, then the state variable is set to "NONE". Device vendors may extend the allowed value list of this variable. For example, various types of solid-state media formats may be added in a vendor-specific way.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action GetMediaInfo for getting.  UPnP state variable LastChange for updates.  Not present if value is "NOT_IMPLEMENTED" (i.e. service doesn't support recording).</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>true()</relevant>
					<write>false()</write>
				</dependency>
				<selection>
					<selectionSetDynamic id="selectionRecordStorageMedium" varRef="possibleRecordStorageMedia"/>
				</selection>
			</variable>
			<variable id="currentPlayMode" type="uis-upnp:playModeType">
				<dc:description xml:lang="en">Indicates the current play mode (e.g., random play, repeated play, etc.). This notion is typical for CD-based audio media, but is generally not supported by tape-based media. Value "DIRECT_1" indicates playing a single track and then stop (don't play the next track). Value "INTRO" indicates playing a short sample (typically 10 seconds or so) of each track on the media. Other play mode values are self explanatory.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action GetTransportSettings for getting.  State variable LastChange for updates.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>true()</relevant>
					<write>value('./isCurrentPlayModeSettable')</write>
				</dependency>
			</variable>
			<variable id="transportPlaySpeed" type="uis-upnp:transportPlaySpeedType">
				<dc:description xml:lang="en">String representation of a rational fraction, indicates the speed relative to normal speed. Example values are '1', '1/2', '2', '-1', '1/10', etc. Actually supported speeds can be retrieved from the AllowedValueList of this state variable in the AVTransport service description. Value '1' is required, value '0' is not allowed.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action GetTransportInfo for getting.  UPnP state variable LastChange for updates.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>true()</relevant>
					<write>false()</write>
				</dependency>
				<selection>
					<selectionSetDynamic id="selectionTransportPlaySpeed" varRef="availableTransportPlaySpeeds"/>
				</selection>
			</variable>
			<variable id="recordMediumWriteStatus" type="upnp:status.type" optional="true">
				<dc:description xml:lang="en">Write protection status of currently loaded media. NOT_WRITABLE indicates an inherent 'read-only' media (e.g., a DVD-ROM disc) or the device doesn't support recording on the current media. PROTECTED indicates a writable media that is currently write-protected (e.g., a protected VHS tape). If no media is loaded, the write status will be "UNKNOWN". </dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action GetMediaInfo for getting.  UPnP state variable LastChange for updates.  Not present if value is "NOT_IMPLEMENTED" (i.e. service doesn't support recording).</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>true()</relevant>
					<write>false()</write>
				</dependency>
			</variable>
			<variable id="currentRecordQualityMode" type="uis-upnp:recordQualityModeType" optional="true">
				<dc:description xml:lang="en">Indicates the currently set record quality mode. Such a setting takes the form of "Quality Ordinal:label". The Quality Ordinal indicates a particular relative quality level available in the device, from 0 (lowest quality) to n (highest quality). The label associated with the ordinal provides a human-readable indication of the ordinal's meaning. </dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action GetTransportSettings for getting value.  State variable LastChange for updates.  Action SetRecordQualityMode for setting.  Not present if value is "NOT_IMPLEMENTED" (i.e. service doesn't support recording).</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>true()</relevant>
					<write>value('./recordQualityModeSettable')</write>
				</dependency>
				<selection>
					<selectionSetDynamic id="selectionRecordQualityMode" varRef="possibleRecordQualityModes"/>
				</selection>
			</variable>
			<variable id="numberOfTracks" type="xsd:unsignedLong">
				<dc:description xml:lang="en">Number of tracks controlled by the AVTransport instance. If no resource is associated with the AVTransport instance (via SetAVTransportURI), and there is no 'default' resource (for example, a loaded disc) then NumberOfTracks shall be 0. Otherwise, it shall be 1 or higher.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action GetMediaInfo for getting.  UPnP state variable LastChange for updates.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>true()</relevant>
					<write>false()</write>
				</dependency>
			</variable>
			<variable id="currentTrack" type="xsd:unsignedLong">
				<dc:description xml:lang="en">If NumberOfTracks is 0, then CurrentTrack will be 0. Otherwise, this state variable will contain the sequence number of the currently selected track, starting at value '1', up to and including NumberOfTracks. For tape-based media that do not support the notion of tracks, this state variable will always be '1'. For LD and DVD media, the notion of track equals the notion of chapter number. For Tuners that provide an indexed list of channels, the current track is defined as the current index number in such a list.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action GetPositionInfo for getting.  UPnP state variable LastChange for updates.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>true()</relevant>
					<write>false()</write>
				</dependency>
			</variable>
			<variable id="currentTrackDuration" type="uis-upnp:timeType" optional="true">
				<dc:description xml:lang="en">Duration of the current track, specified as a string of the following form:
				H+:MM:SS[.F+] or H+:MM:SS[.F0/F1]</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action GetPositionInfo for getting.  UPnP state variable LastChange for updates.  Not present if value is "NOT_IMPLEMENTED" (i.e. service doesn't support media duration information).</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>true()</relevant>
					<write>false()</write>
				</dependency>
			</variable>
			<variable id="currentMediaDuration" type="uis-upnp:timeType" optional="true">
				<dc:description xml:lang="en">Duration of the current track, specified as a string of the following form:
				H+:MM:SS[.F+] or H+:MM:SS[.F0/F1]</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action GetMediaInfo for getting.  UPnP state variable LastChange for updates.  Not present if value is "NOT_IMPLEMENTED" (i.e. service doesn't support media duration information).</uis-upnp:annotation>
				</mapping>
				<dependency>
					<write>false()</write>
				</dependency>
			</variable>
			<variable id="nodeNowPlaying" type="xsd:string">
				<dc:description xml:lang="en">Id of the node from content that is currently in focus for playing.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>Serves as parameter for a connect and play operation.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<write>false()</write>
				</dependency>
			</variable>
			<variable id="currentTrackMetaData" type="didl-lite:root.type" optional="true">
				<dc:description xml:lang="en">Metadata, in the form of a valid DIDL-Lite XML fragment (defined in the ContentDirectory service template), associated with the resource pointed to by state variable CurrentTrackURI. The meta data may have been extracted from state variable AVTransportURIMetaData, or extracted from the resource binary itself (e.g., embedded ID3 tags for MP3 audio). This is implementation dependent.
				Note: This variable reflects the content of the item currently being played, whereas xmlContent contains the metadata of all nodes in the CDS tree.  Also, currentTrackMetaData cannot be derived from the selected node and xmlContent, since the current selection may be the containing folder of the item currently being played.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action GetPositionInfo for getting.  UPnP state variable LastChange for updates.  Not present if value is "NOT_IMPLEMENTED".</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>true()</relevant>
					<write>false()</write>
				</dependency>
			</variable>
			<variable id="currentTrackUri" type="xsd:anyURI">
				<dc:description xml:lang="en">Reference, in the form of a URI, to the current track.  The URI enables a control point to retrieve any meta data associated with current track, such as, for example, title and author information, via the ContentDirectory service.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action GetPositionInfo for getting.  UPnP state variable LastChange for udates.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>false()</relevant>
					<write>false()</write>
				</dependency>
			</variable>
			<variable id="avTransportUri" type="xsd:anyURI">
				<dc:description xml:lang="en">Reference, in the form of a URI of the resource controlled by the AVTransport instance. This URI may refer to a 'single' item (e.g., a song) or to a collection of items (e.g., a playlist). In the single item case, the AVTransport will have 1 'track' and AVTransportURI is equal to CurrentTrackURI. In the 'collection of items' case, the AVTransport will have multiple tracks, and AVTransportURI will remain constant during track changes. The URI enables a control point to retrieve any meta data associated with the AVTransport instance, such as, for example, title and author information, via the ContentDirectory service.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action GetMediaInfo for getting.  UPnP state variable LastChange for updates. 
					This is read-only since the command play will set avTransportUri to the desired URI.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>false()</relevant>
					<write>false()</write>
				</dependency>
			</variable>
			<variable id="avTransportUriMetaData" type="didl-lite:root.type" optional="true">
				<dc:description xml:lang="en">Metadata, in the form of a DIDL-Lite XML fragment (defined in the ContentDirectory service template), associated with the resource pointed to by state variable AVTransportURI. See the ContentDirectory service specification for details. If the service implementation doesn't support this feature then this state variable must be set to value "NOT_IMPLEMENTED".</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action GetMediaInfo for getting.  UPnP state variable LastChange for updates.  Not present if value is "NOT_IMPLEMENTED".</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>true()</relevant>
					<write>false()</write>
				</dependency>
			</variable>
			<variable id="nextAvTransportUri" type="xsd:anyURI" optional="true">
				<dc:description xml:lang="en">AVTransportURI value to be played when the playback of the current AVTransportURI finishes. Setting this variable ahead of time (via action SetNextAVTransportURI) enables a device to provide seamless transitions between resources for certain streaming protocols that need buffering (e.g. HTTP GET). </dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action GetMediaInfo for getting.  UPnP state variable LastChange for updates.  For setting call UPnP action SetNextAVTransportURI.  Not present if value is "NOT_IMPLEMENTED" (i.e. the service doesn't support this feature).</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>false()</relevant>
					<write>true()</write>
				</dependency>
			</variable>
			<variable id="nextAvTransportUriMetaData" type="didl-lite:root.type" optional="true">
				<dc:description xml:lang="en">Metadata, in the form of a DIDL-Lite XML fragment (defined in the ContentDirectory service template), associated with the resource pointed to by state variable NextAVTransportURI. See the ContentDirectory service specification for details. If the service implementation doesn't support this feature then this state variable must be set to value "NOT_IMPLEMENTED".</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action GetMediaInfo for getting.  UPnP state variable LastChange for updates.  Not present if value is "NOT_IMPLEMENTED".</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>true()</relevant>
					<write>false()</write>
				</dependency>
			</variable>
			<variable id="relativeTimePosition" type="uis-upnp:timeType" optional="true">
				<dc:description xml:lang="en">Duration in the following form:
				H+:MM:SS[.F+] or H+:MM:SS[.F0/F1].
				This state variable contains the current position, in terms of time, from the beginning of the current track. For tape-based media that do not support multiple tracks on a single tape, this state variable contains the position, in terms of time, from a zero reference point on the tape. The time format is the same as for state variable CurrentTrackDuration. </dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action GetPositionInfo for getting and polling (no updates through LastChange).  Not present if value is "NOT_IMPLEMENTED" (i.e. the service doesn't support relative time based position information).</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>true()</relevant>
					<write>false()</write>
				</dependency>
			</variable>
			<variable id="absoluteTimePosition" type="uis-upnp:timeType" optional="true">
				<dc:description xml:lang="en">Duration in the following form:
				H+:MM:SS[.F+] or H+:MM:SS[.F0/F1]
				This state variable contains the current position, in terms of a time, from the beginning of the media. The time format is the same as for state variable CurrentTrackDuration. </dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action GetPositionInfo for getting and polling (no updates through LastChange).  Not present if value is "NOT_IMPLEMENTED" or "END_OF_MEDIA" (i.e. the service doesn't support time position information).
					Note: The UPnP spec allows for devices that don't support time position information to use the value "END_OF_MEDIA" to indicate the end of the current media.  This information is lost in the Socket in favor of a more rigid approach.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>true()</relevant>
					<write>false()</write>
				</dependency>
			</variable>
			<variable id="relativeCounterPosition" type="xsd:long" optional="true">
				<dc:description xml:lang="en">This state variable contains the current position, in terms of a dimensionless counter, from the beginning of the current track. For tape-based media that do not support multiple tracks on a single tape, this state variable contains the position, in terms of a dimensionless counter, from a zero reference point on the tape. </dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action GetPositionInfo for getting and poling (no updates through LastChange).  Not present if value is maximum value of the i4 data type (i.e. the service doesn't support relative count-based position information).</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>true()</relevant>
					<write>false()</write>
				</dependency>
			</variable>
			<variable id="absoluteCounterPosition" type="xsd:long" optional="true">
				<dc:description xml:lang="en">This state variable contains the current position, in terms of a dimensionless counter, from the beginning of the loaded media. </dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action GetPositionInfo for getting and polling (no updates through LastChange).  Not present if value is maximum value of the i4 data type (i.e. the service doesn't support absolute count-based position information).</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>true()</relevant>
					<write>false()</write>
				</dependency>
			</variable>
			<variable id="currentTransportActions" type="uis:csvlist" optional="true">
				<dc:description xml:lang="en">This state variable contains a comma-separated list of transport-controlling actions that can be successfully invoked for the current resource at this specific point in time. The list will contain a subset of the following actions: Play, Stop, Pause, Seek, Next, Previous and Record. For example, when a live stream from the Internet is being controlled, the variable may be only "Play, Stop". When a local audio CD is being controlled, the variable may be "Play, Stop, Pause, Seek, Next, Previous". This information can be used, for example, to dynamically enable or disable play, stop, pause buttons, etc., on a user interface.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action GetCurrentTransportActions for getting.  State variable LastChange for updates. 
					Note: We could define a type for valid transportActions but that would not help here since XML Schema doesn't allow us to define the item type of a CSV list.
					Note: We could use this variable for the execute dependencies of play, stop, etc., but might have the following problems:
					(1) This variable is optional, so may not be present.  One could check this at runtime, but if not present, all commands would always be active.
					(2) Since this variable isn't directly evented, variable changes will arrive with delay through LastChange or with delay through polling.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>false()</relevant>
					<write>false()</write>
				</dependency>
			</variable>
			<command id="stop" type="uis:basicCommand">
				<dc:description xml:lang="en">This action stops the progression of the current resource that is associated with the specified instance. Additionally, it is recommended that the "output of the device" (defined below) should change to something other than the current snippet of resource. Although the exact nature of this change varies from device to device, a common behavior is to immediately cease all "output" from the device. Nevertheless, the exact behavior is defined by the manufacturer of the device.
				This action is allowed in all transport states except in state "NO_MEDIA_PRESENT".</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>Action Stop.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>true()</relevant>
					<write>value('./transportState')!='NO_MEDIA_PRESENT' </write>
					<assert>value('./transportState') eq 'STOPPED'</assert>
				</dependency>
				<param dir="out" idref="transportState"/>
			</command>
			<command id="play" type="uis:basicCommand">
				<dc:description xml:lang="en">Start playing the resource of the specified instance, at the specified speed, starting at the current position, according to the current play mode. Keep playing until the resource ends or the transport state is changed via actions Stop or Pause. The device should do a 'best effort' to match the specified play speed. Actually supported speeds can be retrieved from the AllowedValueList of the TransportPlaySpeed state variable in the AVTransport service description.
				This action is allowed in the "STOPPED", "PLAYING", and "PAUSED_PLAYBACK" transport states.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>If no connection established yet, call UPnP action PrepareForConnection.  Note that ConnectionComplete should be called when the session ends.
					UPnP action setAVTransportUri with the URI pertaining to the selectedNodeId of xmlContent.  Then invoke action Play; the command's state should be 'inProgress' as long as transportState has value 'TRANSITIONING'.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<write>value('./transportState') eq 'STOPPED' or value('./transportState') eq 'PAUSED_PLAYBACK' or value('./transportState') eq 'PLAYING'</write>
					<assert>value('./transportState') eq 'PLAYING'</assert>
				</dependency>
				<param id="playListMode" type="playSourceType" dir="in">
					<dc:description xml:lang="en">Either one of the following:
						"SingleBrowse" = Play selectedBrowseId item from browse list.
						"SingleSearch" = Play selectedSearchId item from search list.
						"ContinuousBrowse" = Play items from browse list, starting with selectedBrowseId.
						"ContinuousSearch" = Play items from search list, starting with selectedSearchId.
					</dc:description>
				</param>
				<param id="playCurrentPlayMode" type="uis-upnp:playModeType" dir="in">
					<dc:description xml:lang="en">Indicates the desired play mode (e.g., random play, repeated play, etc.).  Ignored if play mode cannot be set for the media renderer.</dc:description>
					<mapping platform="upnp-av">
						<uis-upnp:annotation>This parameter should be ignored if UPnP action SetPlayMode is not present (optional).</uis-upnp:annotation>
					</mapping>
				</param>
				<param id="playTransportPlaySpeed" type="uis-upnp:transportPlaySpeedListType" dir="in"/>
				<param idref="avTransportUri" dir="out"/>
				<param idref="currentTrackUri" dir="out"/>
				<param idref="currentPlayMode" dir="out"/>
				<param idref="transportPlaySpeed" dir="out"/>
				<param idref="transportState" dir="out"/>
			</command>
			<command id="pause" type="uis:basicCommand" optional="true">
				<dc:description xml:lang="en">While the device is in a playing state, e.g. TransportState is "PLAYING", this action halts the progression of the resource that is associated with the specified instance Id. Any visual representation of the resource should remain displayed in a static manner (e.g. the last frame of video should remain displayed). Any audio representation of the resource should be muted. The difference between Pause() and Stop() is that Pause() MUST remain at the current position within the resource and the current resource must persist as describe above (e.g. the current video resource continues to be transmitted/displayed).
				This action is always allowed while playing or recording.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action Pause.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>true()</relevant>
					<write>value('./transportState') eq 'PLAYING' or value('./transportState') eq 'RECORDING'</write>
					<assert>value('./transportState') eq 'PAUSED_RECORDING' or value('./transportState') eq 'PAUSED_PLAYBACK'</assert>
				</dependency>
				<param dir="out" idref="transportState"/>
			</command>

			<command id="record" type="uis:basicCommand" optional="true">
				<dc:description xml:lang="en">Start recording on the specified transport instance, at the current position on the media, according to the currently specified recording quality, and return immediately. If AVTransportURI is set (differs from the empty string) then that resource will be recorded. If no AVTransportURI is set (equals the empty string), then the source of the content being recording is device dependent. In both cases, whether the device outputs the resource to a screen or speakers while recording is device dependent. If the device implementing the Record action also has a ContentDirectory service, then recorded content will be added to this ContentDirectory in a device-dependent way. Specifically, there is no UPnP mechanism to specify the location of the recorded content in the ContentDirectory hierarchy. 
				This action is allowed in the "STOPPED" or "PAUSED_RECORDING" transport states.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action Record.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>true()</relevant>
					<write>value('./transportState') eq 'STOPPED' or value('./transportState') eq 'PAUSED_RECORDING'</write>
					<assert>value('./transportState') eq 'RECORDING'</assert>
				</dependency>
				<param idref="currentRecordQualityMode" dir="in"/>
				<param idref="avTransportUri" dir="out"/>
				<param idref="currentTrackUri" dir="out"/>
				<param idref="transportState" dir="out"/>
			</command>
			<command id="seek" type="uis:timedCommand">
				<!--If known, the device can inform about how long it will take.-->
				<dc:description xml:lang="en">Start seeking through the resource controlled by the specified instance - as fast as possible - to the specified target position. Unit value "TRACK_NR" indicates seeking to a particular track number. For tape-based media that do not support the notion of track (such as VCRs), Seek("TRACK_NR","1") is equivalent to the common "FastReverse" VCR functionality. Special track number '0' is used to indicate the end of the media, hence, Seek("TRACK_NR","0") is equivalent to the common "FastForward" VCR functionality.
				This action is allowed in the STOPPED and PLAYING transport states.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action Seek.  If invoked, its state should be 'inProgress' as long as transportState has value 'TRANSITIONING'.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>true()</relevant>
					<write>value('./transportState') eq 'STOPPED' or value('./transportState') eq 'PLAYING'</write>
				</dependency>
				<param id="unit" type="uis-upnp:seekModeType" dir="in">
					<dc:description xml:lang="en">This parameter indicates the allowed units in which the amount of seeking to be performed is specified. It can be specified as a time (relative or absolute), a count (relative or absolute), a track number, a tape-index (e.g., for tapes with a indexing facility) or even a video frame. A device vendor is allowed to implement a subset of the allowed value list of this state variable. Only value 'TRACK_NR' is required.</dc:description>
				</param>
				<param id="target" type="xsd:string" dir="in">
					<dc:description xml:lang="en">This parameter indicates the target position of the seek action, in terms of units defined by parameter unit. The data type of this variable is 'string'. However, depending on the actual seek mode used, it must contains string representations of values of UPnP types 'ui4' (ABS_COUNT, REL_COUNT, TRACK_NR, TAPE-INDEX, FRAME), 'time' (ABS_TIME, REL_TIME) or 'float' (CHANNEL_FREQ, in Hz). Supported ranges of these integer, time or float values are device-dependent.</dc:description>
				</param>
				<param idref="currentTrackUri" dir="out"/>
				<!--Open issue: Describe error return codes as notifications or output parameter?-->
			</command>
			<command id="next" type="uis:basicCommand">
				<dc:description xml:lang="en">Convenient action to advance to the next track. This action is functionally equivalent to Seek(TRACK_NR,CurrentTrackNr+1). This action does not 'cycle' back to the first track.
				This action is allowed in the STOPPED and PLAYING transport states.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action Next.  If invoked, its state should be 'inProgress' as long as transportState has value 'TRANSITIONING'.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>true()</relevant>
					<write>value('./transportState') eq 'STOPPED' or value('./transportState') eq 'PLAYING'</write>
				</dependency>
				<param idref="currentTrackUri" dir="inout"/>
			</command>
			<command id="previous" type="uis:basicCommand">
				<dc:description xml:lang="en">Convenient action to advance to the previous track. This action is functionally equivalent to Seek(TRACK_NR,CurrentTrackNr-1) . This action does not 'cycle' back to the last track.
				This action is allowed in the STOPPED and PLAYING transport states.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>UPnP action Previous.  If invoked, its state should be 'inProgress' as long as transportState has value 'TRANSITIONING'.</uis-upnp:annotation>
				</mapping>
				<dependency>
					<relevant>true()</relevant>
					<write>value('./transportState') eq 'STOPPED' or value('./transportState') eq 'PLAYING'</write>
				</dependency>
				<param idref="currentTrackUri" dir="inout"/>
			</command>
		</set>
		
		<set id="conNotifications">
			<dc:description xml:lang="en">This set contains notifications that can occur for a running connection.</dc:description>
			<mapping platform="upnp-av">
				<uis-upnp:annotation>***** Elements in this set are based on ConnectionManager Service *****
				This set defines notifications to be raised after a connection has been created.  Errors upon creating a connection should be indicated through the "connectionError" parameter of the "connect" command.</uis-upnp:annotation>
			</mapping>
			<notify id="conNotifyContentFormatMismatch" category="error" optional="true">
				<dc:description xml:lang="en">This notification is raised when the connection cannot be continued because of a protocol/format mismatch.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>Raised when GetCurrentConnectionInfo(Status)=="ContentFormatMismatch".</uis-upnp:annotation>
				</mapping>
				<dependency>
					<explicitAck>false()</explicitAck>
				</dependency>
			</notify>
			<notify id="conNotifyInsufficientNetworkResources" category="error" optional="true">
				<dc:description xml:lang="en">This notification is raised when connection cannot be continued because of unsufficient network resources (bandwidth, channels, etc.).</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>Raised when GetCurrentConnectionInfo(Status)=="InsufficientBandwidth".</uis-upnp:annotation>
				</mapping>
				<dependency>
					<explicitAck>false()</explicitAck>
				</dependency>
			</notify>
			<notify id="conNotifyUnreliableChannel" category="error" optional="true">
				<dc:description xml:lang="en">This notification is raised when connection cannot be continued because an unreliable channel has been chosen.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>Raised when GetCurrentConnectionInfo(Status)=="UnreliableChannel".</uis-upnp:annotation>
				</mapping>
				<dependency>
					<explicitAck>false()</explicitAck>
				</dependency>
			</notify>
			<notify id="conNotifyUnknownConnectionError" category="error" optional="true">
				<dc:description xml:lang="en">This notification is raised when connection cannot be continued because of an unknown error.</dc:description>
				<mapping platform="upnp-av">
					<uis-upnp:annotation>Raised when GetCurrentConnectionInfo(Status)=="Unknown".</uis-upnp:annotation>
				</mapping>
				<dependency>
					<explicitAck>false()</explicitAck>
				</dependency>
			</notify>
		</set>
	</set>
	<schema xmlns="http://www.w3.org/2001/XMLSchema">
		<simpleType name="playSourceType" id="idPlaySourceType">
			<restriction base="xsd:string">
				<enumeration value="SingleBrowse"/>
				<enumeration value="SingleSearch"/>
				<enumeration value="MultipleBrowse"/>
				<enumeration value="MultipleSearch"/>
				<enumeration value="Continue"/>
			</restriction>

		</simpleType>
	</schema>
</uiSocket>
