报告设备联机状态

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