Codici di errore del dispositivo

I metodi InvokeAction e QueryStateVariable restituiscono valori HRESULT che potrebbero indicare un errore del dispositivo, ovvero un errore ricevuto da un dispositivo certificato UPnP. Se viene ricevuto un errore da un dispositivo, il metodo (InvokeAction o QueryStateVariable) restituisce un valore HRESULT basato sul codice di errore del dispositivo, come illustrato in questo argomento. Poiché una conversione viene applicata al codice di errore del dispositivo per produrre un valore di HRESULT, non è possibile leggere il codice di errore del dispositivo direttamente dal valore HRESULT.

Conversione di un codice di errore del dispositivo in hresult

Esistono sia codici di errore standard che non standard del dispositivo. I codici standard hanno lo stesso significato in tutti i dispositivi certificati UPnP e hanno valori minori di 600. I codici non standard sono specifici del fornitore e hanno valori compresi tra 600 e 899.

Se il codice di errore del dispositivo è standard o meno determina come viene generato il valore HRESULT:

  • Un codice di errore del dispositivo standard viene mappato a un valore HRESULT .
  • Un codice di errore del dispositivo non standard viene incorporato nel valore HRESULT applicando una formula.

Entrambe queste procedure possono essere invertite per determinare il codice di errore del dispositivo da un valore specifico di HRESULT.

Derivazione di un codice di errore del dispositivo da un valore HRESULT

Se il valore HRESULT è maggiore o uguale a UPNP_E_ACTION_SPECIFIC_BASE (0x80040300) e minore o uguale a UPNP_E_ACTION_SPECIFIC_MAX (0x8004042B), il codice di errore del dispositivo non è standard, usare la formula nella sezione seguente per determinare il codice di errore. In caso contrario, il codice di errore del dispositivo è standard: usare la tabella nella sezione Mapping per codici di errore del dispositivo standard, che fornisce il mapping dal valore HRESULT al codice di errore del dispositivo.

Per una descrizione testuale dell'errore dopo una chiamata a IUPnPService::InvokeAction, impostare il parametro pvarRetVal su una matrice vuota. Al termine, questo parametro conterrà una descrizione testuale dell'errore, se presente.

Formula per codici di errore di dispositivi non standard

Usare la formula seguente se UPNP_E_ACTION_SPECIFIC_BASEHRESULTUPNP_E_ACTION_SPECIFIC_MAX.

Codice errore dispositivo = (HRESULT - UPNP_E_ACTION_SPECIFIC_BASE) + FAULT_ACTION_SPECIFIC_BASE

Sostituendo i valori numerici effettivi, l'equazione è: Codice errore dispositivo = (HRESULT - 0x80040300) + 0x0258

Mapping dei codici di errore standard del dispositivo

Usare il mapping seguente se HRESULT<UPNP_E_ACTION_SPECIFIC_BASE.

Valore HRESULT Codice errore dispositivo Valore effettivo
UPNP_E_INVALID_ACTION ERRORE_AZIONE_NON_VALIDA 401
UPNP_E_INVALID_ARGUMENTS - Argomenti non validi ERRORE_ARG_VALID_ARGUMENTO_INVALIDO 402
UPNP_E_OUT_OF_SYNC FAULT_INVALID_SEQUENCE_NUMBER / ERRORE_NUMERO_DI_SEQUENZA_NON_VALIDO 403
UPNP_E_INVALID_VARIABLE ERRORE_VARIABILE_NON_VALIDA 404
Richiesta d'azione non riuscita (UPNP_E_ACTION_REQUEST_FAILED) ERRORE_INTERNO_DEL_DISPOSITIVO 501

 

Altre informazioni

I codici di errore del dispositivo vengono specificati in "UPnP Device Architecture versione 1.0". Le costanti indicate in questo argomento sono definite nei file Upnp.h e Upnp.idl.