Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il servizio WIA controlla lo stato online di un dispositivo WIA chiamando il metodo IStiUSD::GetStatus . Il minidriver WIA deve controllare lo stato online corrente dell'hardware e segnalare i risultati.
Il servizio WIA chiama il metodo IStiUSD::GetStatus per due operazioni principali:
Verifica dello stato online del dispositivo.
Rilevazione degli eventi del dispositivo, come ad esempio un evento di pulsante di pressione.
Determinare la richiesta di operazione può essere effettuata controllando il membro StatusMask della struttura STI_DEVICE_STATUS. Il membro StatusMask può essere una delle richieste seguenti.
STI_DEVSTATUS_ONLINE_STATE
Controllare se il dispositivo è online.
STI_DEVSTATUS_EVENTS_STATE
Verificare la presenza di eventi del dispositivo.
STI_DEVSTATUS_ONLINE_STATE
Questa richiesta di operazione deve essere eseguita impostando il membro dwOnlineState della struttura STI_DEVICE_STATUS.
STI_DEVSTATUS_EVENTS_STATE
Questa richiesta di operazione deve essere eseguita impostando il membro dwEventHandlingState della struttura STI_DEVICE_STATUS. Il valore da usare è STI_EVENTHANDLING_PENDING. Il dispositivo ha un evento in sospeso ed è in attesa di segnalarlo al servizio WIA.
Quando STI_EVENTHANDLING_PENDING è impostato, il servizio WIA segnala che si è verificato un evento nel driver WIA. Il servizio WIA chiama il metodo IStiUSD::GetNotificationData per ottenere altre informazioni sull'evento.
Il metodo IStiUSD::GetNotificationData viene chiamato per eventi di interrogazione ed eventi di interrupt. È in questo metodo che dovresti compilare le informazioni appropriate sull'evento per restituire al servizio WIA.
Nota Cancellare sempre il flag di STI_EVENTHANDLING_PENDING nel membro dwEventHandlingState per assicurarsi che sia impostato correttamente quando si verifica un evento del dispositivo.
L'esempio seguente illustra un'implementazione del metodo IStiUSD::GetStatus .
STDMETHODIMP CWIADevice::GetStatus(PSTI_DEVICE_STATUS pDevStatus)
{
//
// If the caller did not pass in the correct parameters,
// then fail the call with E_INVALIDARG.
//
if(!pDevStatus)
{
return E_INVALIDARG;
}
HRESULT hr = S_OK;
//
// If we are asked, verify the device is online.
//
if (pDevStatus->StatusMask & STI_DEVSTATUS_ONLINE_STATE) {
//
// assume the device is OFF-LINE before continuing. This will
// validate that the online check was successful.
//
pDevStatus->dwOnlineState = STI_ONLINESTATE_OFFLINE;
if(MyDeviceIsOnlineStatus()) {
//
// device is ON-LINE and operational
//
pDevStatus->dwOnlineState |= STI_ONLINESTATE_OPERATIONAL;
} else {
//
// device is OFF-LINE and NOT operational
//
}
}
return S_OK;
}