Bagikan melalui


Melaporkan Status Daring Perangkat

Layanan WIA memeriksa status online perangkat WIA dengan memanggil metode IStiUSD::GetStatus . Minidriver WIA harus memeriksa status online perangkat keras saat ini dan melaporkan hasilnya.

Layanan WIA memanggil metode IStiUSD::GetStatus untuk dua operasi utama:

  • Memeriksa status online perangkat.

  • Polling untuk peristiwa perangkat, seperti peristiwa tombol pendorongan.

Menentukan permintaan operasi dapat dilakukan dengan memeriksa anggota StatusMask dari struktur STI_DEVICE_STATUS . Anggota StatusMask dapat berupa salah satu permintaan berikut.

STI_DEVSTATUS_ONLINE_STATE
Periksa apakah perangkat sedang online.

STI_DEVSTATUS_EVENTS_STATE
Periksa peristiwa perangkat.

STI_DEVSTATUS_ONLINE_STATE

Permintaan operasi ini harus dilakukan dengan mengatur anggota dwOnlineState dari struktur STI_DEVICE_STATUS.

STI_DEVSTATUS_EVENTS_STATE

Permintaan operasi ini harus dilakukan dengan mengatur anggota dwEventHandlingState dari struktur STI_DEVICE_STATUS. Nilai yang harus digunakan adalah STI_EVENTHANDLING_PENDING. (Perangkat memiliki peristiwa tertunda dan menunggu untuk melaporkannya ke layanan WIA.)

Ketika STI_EVENTHANDLING_PENDING diatur, layanan WIA disinyalir bahwa suatu peristiwa telah terjadi di driver WIA. Layanan WIA memanggil metode IStiUSD::GetNotificationData untuk mendapatkan informasi selengkapnya tentang peristiwa tersebut.

Metode IStiUSD::GetNotificationData dipanggil untuk peristiwa yang dijajaki dan mengganggu peristiwa. Dalam metode inilah Anda harus mengisi informasi peristiwa yang tepat untuk kembali ke layanan WIA.

Catatan Selalu hapus bendera STI_EVENTHANDLING_PENDING di anggota dwEventHandlingState untuk memastikan bahwa bendera tersebut diatur dengan benar saat peristiwa perangkat terjadi.

Contoh berikut menunjukkan implementasi metode 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;
}