Codes d’erreur de l’appareil
Les méthodes InvokeAction et QueryStateVariable retournent des valeurs HRESULT qui peuvent indiquer une erreur d’appareil (c’est-à-dire une erreur reçue d’un appareil certifié UPnP). Si une erreur est reçue d’un appareil, la méthode (InvokeAction ou QueryStateVariable) retourne une valeur HRESULT basée sur le code d’erreur de l’appareil, comme expliqué dans cette rubrique. Étant donné qu’une conversion est appliquée au code d’erreur de l’appareil pour produire une valeur HRESULT , vous ne pouvez pas lire le code d’erreur de l’appareil directement à partir de la valeur HRESULT .
Conversion d’un code d’erreur d’appareil en HRESULT
Il existe des codes d’erreur d’appareil standard et non standard. Les codes standard ont la même signification pour tous les appareils certifiés UPnP et ont des valeurs inférieures à 600. Les codes non standard sont spécifiques au fournisseur et ont des valeurs comprises entre 600 et 899.
Si le code d’erreur de l’appareil est standard ou non, détermine la façon dont la valeur HRESULT est générée :
- Un code d’erreur d’appareil standard est mappé à une valeur HRESULT .
- Un code d’erreur d’appareil non standard est incorporé dans la valeur HRESULT en appliquant une formule.
Ces deux procédures peuvent être inversées pour déterminer le code d’erreur de l’appareil à partir d’une valeur HRESULT particulière.
Dérivation d’un code d’erreur d’appareil à partir d’une valeur HRESULT
Si la valeur HRESULT est supérieure ou égale à UPNP_E_ACTION_SPECIFIC_BASE (0x80040300) et inférieure ou égale à UPNP_E_ACTION_SPECIFIC_MAX (0x8004042B), le code d’erreur de l’appareil est non standard. Utilisez la formule de la section suivante pour déterminer le code d’erreur. Sinon, le code d’erreur de l’appareil est standard. Utilisez le tableau de la section Mappage des codes d’erreur d’appareil standard, qui fournit le mappage de la valeur HRESULT au code d’erreur de l’appareil.
Pour obtenir une description textuelle de l’erreur après un appel à IUPnPService::InvokeAction, définissez le paramètre pvarRetVal sur un tableau vide. Au retour, ce paramètre contient une description textuelle de l’erreur, le cas échéant.
Formule pour les codes d’erreur d’appareil non standard
Utilisez la formule suivante si UPNP_E_ACTION_SPECIFIC_BASE ≤ hresult ≤UPNP_E_ACTION_SPECIFIC_MAX.
Code d’erreur de l’appareil = (HRESULT - UPNP_E_ACTION_SPECIFIC_BASE) + FAULT_ACTION_SPECIFIC_BASE
En remplaçant les valeurs numériques réelles, l’équation est : Device Error Code = (HRESULT - 0x80040300) + 0x0258
Mappage pour les codes d’erreur d’appareil standard
Utilisez le mappage suivant si HRESULT<UPNP_E_ACTION_SPECIFIC_BASE.
Valeur HRESULT | Code d’erreur de l’appareil | Valeur réelle |
---|---|---|
UPNP_E_INVALID_ACTION | FAULT_INVALID_ACTION | 401 |
UPNP_E_INVALID_ARGUMENTS | FAULT_INVALID_ARG | 402 |
UPNP_E_OUT_OF_SYNC | FAULT_INVALID_SEQUENCE_NUMBER | 403 |
UPNP_E_INVALID_VARIABLE | FAULT_INVALID_VARIABLE | 404 |
UPNP_E_ACTION_REQUEST_FAILED | FAULT_DEVICE_INTERNAL_ERROR | 501 |
Informations complémentaires
Les codes d’erreur de l’appareil sont spécifiés dans « UPnP Device Architecture version 1.0 ». Les constantes mentionnées dans cette rubrique sont définies dans les fichiers Upnp.h et Upnp.idl.