1. TELECOM BRETAGNE - F2B506 – 29/02/2012
Description d’un dispositif UPnP
La description d’un dispositif UPnP se fait de façon relativement simple grâce à un fichier description.xml. Celui-ci est de la forme :
Source : http://upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf
<?xml version="1.0"?>
<root xmlns="urn:schemas-upnp-org:device-1-0" configId="configuration number">
<!--configId spécifie le numéro de la configuration à laquelle cette description appartient-->
<specVersion>
<!-- Spécifie la plus petite version de l'architecture supportée UPnP Device par le dispositif-->
<major>1</major>
<!--Obligatoire; Numéro de version principal (avant le point) ; Vaut '1' pour l'architecture 1.0-->
<minor>0</minor>
<!--Obligatoire; Numéro de version secondaire (avant le point) ; Vaut '0' pour l'architecture 1.0-->
</specVersion>
<device>
<!--Balise contenant la description du dispositif -->
<deviceType>urn:schemas-upnp-org:device:deviceType:v</deviceType>
<!--Obligatoire; URI indiquant le type de dispositif UPnP.
Pour les dispositifs standards, URI de la forme : 'urn:schemas-upnp-org:device:' + deviceType + ':' + n°Version.
Les fonctions définis dans le type standard doivent alors être implémentées dans le device.
Pour les dispositifs non standards, URI de la forme : 'urn:' + vendorDomainName + ':device:' + deviceType + ':' + n°Version.
Dans les 2 cas, deviceType ne doit pas comporter plus de 64 caractères. -->
<friendlyName>short user-friendly title</friendlyName>
<!--Obligatoire; Nom du dispositif pour les utilisateurs : une string de moins de 64 caractères-->
<manufacturer>manufacturer name</manufacturer>
<!--Obligatoire; Nom du fabricant : une string de moins de 64 caractères-->
<manufacturerURL>URL to manufacturer site</manufacturerURL>
<!--Optionnel; url du site web du fabricant-->
<modelDescription>long user-friendly title</modelDescription>
<!-- Recommandé; Description du modèle du dispositif : une string de moins 128 caractères-->
1
2. <modelName>model name</modelName>
<!--Obligatoire; Nom du modèle : une string de moins de 32 caractères-->
<modelNumber>model number</modelNumber>
<!-- Recommandé; Numéro du modèle : une string de moins de 32 caractères-->
<modelURL>URL to model site</modelURL>
<!---Optionnel; url du site web du modèle-->
<serialNumber>manufacturer's serial number</serialNumber>
<!--Recommandé; numéro de série : une string de moins de 64 caractères-->
<UDN>uuid:UUID</UDN>
<!--Obligatoire; identifiant unique du dispositif : une string commençant par "uuid:" suivi d'un suffixe au format UUID-->
<UPC>Universal Product Code</UPC>
<!--Optionnel; numéro universel du produit : un nombre de 12 chiffres-->
<iconList>
<!--Obligatoire si et seulement si le dispositif a une ou plusieurs icônes. Contient une balise 'icon' par image-->
<icon>
<!--Recommandé; contient la description d'une icône représentant le dispositif-->
<mimetype>image/format</mimetype>
<!--Obligatoire; mime type de l'icone-->
<width>horizontal pixels</width>
<!--Obligatoire; largeur de l'image en pixels : un entier-->
<height>vertical pixels</height>
<!--Obligatoire; hauteur de l'image en pixels : un entier-->
<depth>color depth</depth>
<!--Obligatoire; nombre de bits colorés par pixel : un entier-->
<url>URL to icon</url>
<!--Obligatoire; url pointant vers le fichier image de l'icône. Doit être relative par rapport au fichier courant -->
</icon>
</iconList>
<serviceList>
<!--Optionnel; contient la liste des services offerts par le dispositif-->
<service>
<!--Optionnel; contient la description d'un service-->
<serviceType>urn:schemas-upnp-org:service:serviceType:v</serviceType>
2
3. <!--Obligatoire; URI indiquant type de service UPnP ne devant pas contenir de ‘#’
Pour les dispositifs standards, URI de la forme 'urn:schemas-upnp-org:service:' + serviceType + ':' + n°Version.
(rattachement du service à un service standard)
Pour les non standards, URI de la forme 'urn:' + vendorDomainName + ':service:' + serviceType + ':' + n°Version
Dans les 2 cas, serviceType ne doit pas comporter plus de 64 caractères. -->
<serviceId>urn:upnp-org:serviceId:serviceID</serviceId>
<!--Obligatoire; URI identifiant du service. Doit être unique dans la description du dispositif.
Pour les dispositifs standards, URI de la forme 'urn:upnp-org:serviceId:' + serviceId
Pour les non standards, URI de la forme ‘urn:’ + vendorDomainName + ':serviceId:' + serviceId
Dans les 2 cas, serviceId ne doit pas comporter plus de 64 caractères. -->
<SCPDURL>URL to service description</SCPDURL>
<!--Obligatoire: url vers le fichier description du service. Doit être relative par rapport au fichier courant -->
<controlURL>URL for control</controlURL>
<!--Obligatoire: url vers le répertoire control du service. Doit être relative par rapport au fichier courant.
URL utilisée pour s'abonner et pour faire des actions.
Si pas de répertoire control, balise vide -->
<eventSubURL>URL for eventing</eventSubURL>
<!--Obligatoire: url vers le répertoire eventSub du service. Doit être relative par rapport au fichier courant.
URL utilisée pour s’abonner à des évènements. Deux services ne peuvent pas avoir la même url d’eventSub -->
Si pas de répertoire control, balise vide -->
</service>
</serviceList>
<deviceList>
<!--Obligatoire si et seulement si le dispositif possède des dispositifs intégrés. Contient des balises 'device' -->
</deviceList>
<presentationURL>URL for presentation</presentationURL>
<!-- Recommandé; url vers le fichier presentation.html du dispositif. Doit être relative par rapport au fichier courant -->
</device>
</root>
3
4. Description d’un service d’un dispositif UPnP
La description d’un service d’un dispositif UPnP se fait également grâce à un fichier description.xml. Celui-ci est de la forme :
Source : http://upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf
<?xml version="1.0"?>
<scpd xmlns="urn:schemas-upnp-org:service-1-0" xmlns:dt1="urn:domain-name:more-datatypes"
xmlns:dt2="urn:domain-name:vendor-datatypes" configId="configuration number">
<specVersion>
<!-- Spécifie la plus petite version de l'architecture supportée UPnP Device par le dispositif-->
<major>1</major>
<!--Obligatoire; Numéro de version principal (avant le point) ; Vaut '1' pour l'architecture 1.0-->
<minor>0</minor>
<!--Obligatoire; Numéro de version secondaire (avant le point) ; Vaut '0' pour l'architecture 1.0-->
</specVersion>
<actionList>
<!-- Obligatoire si et seulement si le service offre des actions. Contient des balises ‘action’-->
<action>
<name>actionName</name>
<!--Obligatoire; Nom de l’action. Ne doit pas contenir de ‘#’ ou de ‘-‘. Sensible à la casse. Les trois premières ne doivent pas être ‘xml’.
Doit commencer par une lettre (‘A’-‘Z’, ‘a’-‘z’), un chiffre (‘0’-‘9’), ou un ‘_’
Le reste doit être composé de lettres (‘A’-‘Z’, ‘a’-‘z’), chiffres (‘0’-‘9’), ‘_’ ou ‘.’
Pour les actions standards, ne doit pas commencer par ‘X_’ ou ‘A_’.
Pour les actions non standards, doit être de la forme : ‘X_’ + vendorDomain + ‘_’ + vendorAssignedActionName
Le tout est une string de moins de 32 caractères. -->
<argumentList>
<!-- Liste des arguments de l’action. Contient des balises argument. -->
<argument>
<name>argumentNameIn1</name>
<!-- Obligatoire; Nom de l’argument. Soumis aux mêmes règles que la balise action-name-->
<direction>in</direction>
<!--Obligatoire ; deux valeurs possibles : ‘in’ ou ‘out’ (jamais les deux)
Indique si l’argument est un input ou un output. Les arguments ‘in’ doivent être déclarés avec les arguments ‘out’ -->
4
5. <retval></retval>
<!-- Optionnelle; Valeur de retour. Identifie au moins un argument output-->
<relatedStateVariable>stateVariableName</relatedStateVariable>
<!--Obligatoire ; Doit être le nom d’une variable d’état -->
</argument>
</argumentList>
</action>
</actionList>
<serviceStateTable>
<!-- Contient la liste des variables d’états du service. -->
<stateVariable sendEvents="yes"|"no" multicast="yes"|"no">
<!-- sendEvents (« yes » ou « no », « yes » par défaut) définit si des évènements seront générés quand la valeur de cette variable sera modifiée.
multicast (« yes ou « no », « no » par défaut) définit si des évènements seront générés avec du multicast-->
<name>variableName</name>
<!--Obligatoire ; Nom de la variable. Soumis aux mêmes règles que le nom de l’action -->
<dataType>basic data type</dataType>
<!-- Obligatoire ; type de la variable. La liste des types possibles est disponible dans le document source page 53-->
<defaultValue>default value</defaultValue>
<!-- Recommandé. Valeur initiale de la variable. Doit correspondre au type de la variable.
Doit respecter les contraintes des balises allowedValueRange et allowedValueList -->
<allowedValueRange>
<!-- Recommandé ; Définit les limites de valeurs pour une variable numérique. Ne doit être présente que pour types integer ou float-->
<minimum>minimum value</minimum>
<maximum>maximum value</maximum>
<step>increment value</step>
</allowedValueRange>
<allowedValueList>
<!-- Recommandé ; Enumère les valeurs possibles de la variableCette balise ne doit être utilisée que pour une variable de type string-->
<allowedValue>enumerated value</allowedValue>
</allowedValueList>
</stateVariable>
</serviceStateTable>
</scpd>
5