Códigos de erro do dispositivo
Os métodos InvokeAction e QueryStateVariable retornam valores HRESULT que podem indicar um erro de dispositivo (ou seja, um erro recebido de um dispositivo certificado por UPnP). Se um erro for recebido de um dispositivo, o método (InvokeAction ou QueryStateVariable) retornará um valor HRESULT baseado no código de erro do dispositivo, conforme explicado neste tópico. Como uma conversão é aplicada ao código de erro do dispositivo para produzir um valor HRESULT , você não pode ler o código de erro do dispositivo diretamente do valor HRESULT .
Conversão de um código de erro de dispositivo em um HRESULT
Há códigos de erro de dispositivo padrão e não padrão. Os códigos padrão têm o mesmo significado em todos os dispositivos certificados por UPnP e têm valores inferiores a 600. Os códigos não padrão são específicos do fornecedor e têm valores que variam de 600 a 899.
Se o código de erro do dispositivo é padrão determina ou não como o valor HRESULT é gerado:
- Um código de erro de dispositivo padrão é mapeado para um valor HRESULT .
- Um código de erro de dispositivo não padrão é inserido no valor HRESULT aplicando uma fórmula.
Ambos os procedimentos podem ser invertidos para determinar o código de erro do dispositivo de um valor HRESULT específico.
Derivando um código de erro do dispositivo de um valor HRESULT
Se o valor HRESULT for maior ou igual a UPNP_E_ACTION_SPECIFIC_BASE (0x80040300) e menor ou igual a UPNP_E_ACTION_SPECIFIC_MAX (0x8004042B), o código de erro do dispositivo não será padrão , use a fórmula na seção a seguir para determinar o código de erro. Caso contrário, o código de erro do dispositivo é padrão – use a tabela na seção Mapeamento para códigos de erro de dispositivo padrão, que fornece o mapeamento do valor HRESULT para o código de erro do dispositivo.
Para obter uma descrição de texto do erro após uma chamada para IUPnPService::InvokeAction, defina o parâmetro pvarRetVal como uma matriz vazia. Após o retorno, esse parâmetro conterá uma descrição de texto do erro, se ocorrer algum.
Fórmula para códigos de erro de dispositivo não padrão
Use a fórmula a seguir se UPNP_E_ACTION_SPECIFIC_BASE ≤ ≤ HRESULTUPNP_E_ACTION_SPECIFIC_MAX.
Código de erro do dispositivo = (UPNP_E_ACTION_SPECIFIC_BASE HRESULT - ) + FAULT_ACTION_SPECIFIC_BASE
Substituindo os valores numéricos reais, a equação é: Código de Erro do Dispositivo = (HRESULT - 0x80040300) + 0x0258
Mapeamento para códigos de erro de dispositivo padrão
Use o mapeamento a seguir se o HRESULT<UPNP_E_ACTION_SPECIFIC_BASE.
Valor HRESULT | Código de erro do 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 |
Mais informações
Os códigos de erro do dispositivo são especificados em "Arquitetura de Dispositivo UPnP versão 1.0". As constantes mencionadas neste tópico são definidas nos arquivos Upnp.h e Upnp.idl.