다음을 통해 공유


보고 디바이스 온라인 상태

WIA 서비스는 IStiUSD::GetStatus 메서드를 호출하여 WIA 디바이스의 온라인 상태 확인합니다. WIA 미니 드라이버는 하드웨어의 현재 온라인 상태를 검사 결과를 보고해야 합니다.

WIA 서비스는 두 가지 주요 작업에 대해 IStiUSD::GetStatus 메서드를 호출합니다.

  • 디바이스의 온라인 상태 확인합니다.

  • 푸시 단추 이벤트와 같은 디바이스 이벤트에 대한 폴링

작업 요청 확인은 STI_DEVICE_STATUS 구조체의 StatusMask 멤버를 확인하여 수행할 수 있습니다. StatusMask 멤버는 다음 요청 중 하나일 수 있습니다.

STI_DEVSTATUS_ONLINE_STATE
디바이스가 온라인 상태인지 확인합니다.

STI_DEVSTATUS_EVENTS_STATE
디바이스 이벤트를 확인합니다.

STI_DEVSTATUS_ONLINE_STATE

이 작업 요청은 STI_DEVICE_STATUS 구조체의 dwOnlineState 멤버를 설정하여 수행해야 합니다.

STI_DEVSTATUS_EVENTS_STATE

이 작업 요청은 STI_DEVICE_STATUS 구조체의 dwEventHandlingState 멤버를 설정하여 수행해야 합니다. 사용해야 하는 값은 STI_EVENTHANDLING_PENDING. (디바이스에 보류 중인 이벤트가 있으며 WIA 서비스에 보고하기 위해 대기 중입니다.)

STI_EVENTHANDLING_PENDING 설정되면 WIA 서비스에서 WIA 드라이버에서 이벤트가 발생했다는 신호를 보냅니다. WIA 서비스는 IStiUSD::GetNotificationData 메서드를 호출하여 이벤트에 대한 자세한 정보를 가져옵니다.

폴링된 이벤트 및 인터럽트 이벤트에 대해 IStiUSD::GetNotificationData 메서드가 호출됩니다. WIA 서비스로 돌아가려면 적절한 이벤트 정보를 입력해야 합니다.

참고 항상 dwEventHandlingState 멤버의 STI_EVENTHANDLING_PENDING 플래그를 지워 디바이스 이벤트가 발생할 때 올바르게 설정되었는지 확인합니다.

다음 예제에서는 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;
}