Códigos de error del dispositivo
Los métodos InvokeAction y QueryStateVariable devuelven valores HRESULT que podrían indicar un error de dispositivo (es decir, un error que se recibe de un dispositivo certificado por UPnP). Si se recibe un error de un dispositivo, el método (InvokeAction o QueryStateVariable) devuelve un valor HRESULT basado en el código de error del dispositivo, como se explica en este tema. Dado que se aplica una conversión al código de error del dispositivo para generar un valor HRESULT , no se puede leer el código de error del dispositivo directamente desde el valor HRESULT .
Conversión de un código de error de dispositivo a UN HRESULT
Hay códigos de error de dispositivo estándar y no estándar. Los códigos estándar tienen el mismo significado en todos los dispositivos certificados por UPnP y tienen valores inferiores a 600. Los códigos no estándar son específicos del proveedor y tienen valores comprendidos entre 600 y 899.
Si el código de error del dispositivo es estándar determina cómo se genera el valor HRESULT :
- Un código de error de dispositivo estándar se asigna a un valor HRESULT .
- Un código de error de dispositivo no estándar se inserta en el valor HRESULT aplicando una fórmula.
Ambos procedimientos se pueden invertir para determinar el código de error del dispositivo a partir de un valor HRESULT determinado.
Derivar un código de error de dispositivo a partir de un valor HRESULT
Si el valor HRESULT es mayor o igual que UPNP_E_ACTION_SPECIFIC_BASE (0x80040300) y menor o igual que UPNP_E_ACTION_SPECIFIC_MAX (0x8004042B), el código de error del dispositivo no es estándar, use la fórmula de la sección siguiente para determinar el código de error. De lo contrario, el código de error del dispositivo es estándar: use la tabla de la sección Mapping for Standard Device Error Codes (Asignación de códigos de error de dispositivo estándar), que proporciona la asignación del valor HRESULT al código de error del dispositivo.
Para obtener una descripción de texto del error después de una llamada a IUPnPService::InvokeAction, establezca el parámetro pvarRetVal en una matriz vacía. Tras la devolución, este parámetro contendrá una descripción de texto del error, si se ha producido alguno.
Fórmula para códigos de error de dispositivo no estándar
Use la fórmula siguiente si UPNP_E_ACTION_SPECIFIC_BASE ≤ ≤ HRESULTUPNP_E_ACTION_SPECIFIC_MAX.
Código de error del dispositivo = (HRESULT - UPNP_E_ACTION_SPECIFIC_BASE) + FAULT_ACTION_SPECIFIC_BASE
Sustituyendo los valores numéricos reales, la ecuación es: Código de error del dispositivo = (HRESULT - 0x80040300) + 0x0258
Asignación de códigos de error de dispositivo estándar
Use la siguiente asignación si HRESULT<UPNP_E_ACTION_SPECIFIC_BASE.
Valor HRESULT | Código de error del dispositivo | Valor real |
---|---|---|
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 |
Más información
Los códigos de error del dispositivo se especifican en "UPnP Device Architecture version 1.0". Las constantes mencionadas en este tema se definen en los archivos Upnp.h y Upnp.idl.