État en ligne de l’appareil de création de rapports
Le service WIA vérifie les status en ligne d’un appareil WIA en appelant la méthode IStiUSD::GetStatus. Le minidriver WIA doit case activée l’état actuel en ligne du matériel et signaler les résultats.
Le service WIA appelle la méthode IStiUSD::GetStatus pour deux opérations principales :
Vérification de la status en ligne de l’appareil.
Interrogation d’événements d’appareil, tels qu’un événement de bouton pousseur.
Pour déterminer la demande d’opération, vérifiez le membre StatusMask de la structure STI_DEVICE_STATUS . Le membre StatusMask peut être l’une des requêtes suivantes.
STI_DEVSTATUS_ONLINE_STATE
Vérifiez si l’appareil est en ligne.
STI_DEVSTATUS_EVENTS_STATE
Recherchez les événements d’appareil.
STI_DEVSTATUS_ONLINE_STATE
Cette demande d’opération doit être effectuée en définissant le membre dwOnlineState de la structure STI_DEVICE_STATUS.
STI_DEVSTATUS_EVENTS_STATE
Cette demande d’opération doit être effectuée en définissant le membre dwEventHandlingState de la structure STI_DEVICE_STATUS. La valeur à utiliser est STI_EVENTHANDLING_PENDING. (L’appareil a un événement en attente et attend de le signaler au service WIA.)
Lorsque STI_EVENTHANDLING_PENDING est défini, le service WIA est signalé qu’un événement s’est produit dans le pilote WIA. Le service WIA appelle la méthode IStiUSD::GetNotificationData pour obtenir plus d’informations sur l’événement.
La méthode IStiUSD::GetNotificationData est appelée pour les événements interrogés et les événements d’interruption. C’est dans cette méthode que vous devez renseigner les informations d’événement appropriées pour revenir au service WIA.
Note Effacez toujours l’indicateur STI_EVENTHANDLING_PENDING dans le membre dwEventHandlingState pour vous assurer qu’il est correctement défini lorsqu’un événement d’appareil se produit.
L’exemple suivant montre une implémentation de la méthode 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;
}