Compartilhar via


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;
}