Status online do dispositivo de relatório
O serviço WIA verifica a status online de um dispositivo WIA chamando o método IStiUSD::GetStatus. O minidriver WIA deve marcar o estado online atual do hardware e relatar os resultados.
O serviço WIA chama o método IStiUSD::GetStatus para duas operações principais:
Verificando o status online do dispositivo.
Sondagem de eventos de dispositivo, como um evento de botão de push.
A determinação da solicitação de operação pode ser feita verificando o membro StatusMask da estrutura STI_DEVICE_STATUS . O membro StatusMask pode ser uma das solicitações a seguir.
STI_DEVSTATUS_ONLINE_STATE
Verifique se o dispositivo está online.
STI_DEVSTATUS_EVENTS_STATE
Verifique se há eventos do dispositivo.
STI_DEVSTATUS_ONLINE_STATE
Essa solicitação de operação deve ser realizada definindo o membro dwOnlineState da estrutura STI_DEVICE_STATUS.
STI_DEVSTATUS_EVENTS_STATE
Essa solicitação de operação deve ser realizada definindo o membro dwEventHandlingState da estrutura STI_DEVICE_STATUS. O valor que deve ser usado é STI_EVENTHANDLING_PENDING. (O dispositivo tem um evento pendente e está aguardando para denunciá-lo ao serviço WIA.)
Quando STI_EVENTHANDLING_PENDING é definido, o serviço WIA é sinalizado que ocorreu um evento no driver WIA. O serviço WIA chama o método IStiUSD::GetNotificationData para obter mais informações sobre o evento.
O método IStiUSD::GetNotificationData é chamado para eventos sondados e eventos de interrupção. É nesse método que você deve preencher as informações de evento adequadas para retornar ao serviço WIA.
Nota Sempre desmarque o sinalizador STI_EVENTHANDLING_PENDING no membro dwEventHandlingState para garantir que ele esteja definido corretamente quando ocorrer um evento de dispositivo.
O exemplo a seguir mostra uma implementação do método 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;
}