Événements d’appareil à image fixe
Un événement d’appareil d’image fixe est une occurrence au niveau de l’appareil dont le logiciel de niveau supérieur doit être averti, si ce logiciel a demandé cette notification. Le minidriver en mode utilisateur est chargé de définir la plupart des événements d’appareil et de remettre des notifications lorsqu’un événement se produit. En général, les événements indiquent qu’un logiciel de niveau supérieur sera nécessaire pour effectuer une action.
Un événement d’appareil d’image fixe classique est la détection d’un bouton en cours d’appui. Par exemple, un scanneur peut fournir à un utilisateur des boutons distincts pour lancer la numérisation du texte et des photographies. Lorsque vous appuyez sur un bouton, un logiciel de niveau supérieur est nécessaire pour afficher ou stocker l’image. Le moniteur d’événements d’image fixe détecte que l’événement s’est produit (à l’aide de l’interface COM IStiDevice) et peut appeler une application d’image fixe précédemment inscrite (à l’aide de l’interface COM IStillImage).
Les événements d’appareil d’image fixe sont représentés par des GUID. Dans sti.h, Microsoft définit les événements d’appareil d’image fixe suivants :
GUID d’événement | Objectif |
---|---|
GUID_DeviceArrivedLaunch | Un appareil d’image fixe vient d’être attaché au système. |
GUID_ScanImage | Une image doit être analysée dans l’ordinateur. |
GUID_ScanFaxImage | Une image doit être analysée dans l’ordinateur, puis faxée. |
GUID_ScanPrintImage | Une image doit être analysée dans l’ordinateur, puis imprimée. |
GUID_STIUserDefined1 | Un bouton définissable par l’utilisateur a été appuyé. |
GUID_STIUserDefined2 | Un bouton définissable par l’utilisateur a été appuyé. |
GUID_STIUserDefined3 | Un bouton définissable par l’utilisateur a été appuyé. |
Les développeurs de minidrivers en mode utilisateur doivent utiliser ces GUID d’événements prédéfinis dans la mesure du possible. Si ces GUID ne sont pas appropriés, les GUID des événements spécifiques à l’appareil doivent être définis.
Pour définir un événement d’appareil d’image fixe, vous devez :
Spécifiez un GUID pour chaque événement.
Incluez chaque GUID dans le fichier INF du pilote en mode utilisateur.
Dans le fichier INF du pilote, chaque spécification GUID doit inclure un astérisque (ce qui signifie « toutes les applications ») ou une liste d’applications spécifiques, indiquant quelles applications doivent être démarrées lorsque l’événement se produit. Le moniteur d’événements d’image fixe utilise cette liste pour fournir des affectations par défaut d’applications aux événements. L’utilisateur peut modifier ces affectations avec les Panneau de configuration Scanners et Caméras.
Notification d'événement
Le pilote doit surveiller l’appareil (à l’aide d’E/S asynchrones ou d’une interrogation) pour déterminer quand l’événement associé à chaque GUID se produit. Selon les fonctionnalités de l’appareil, le pilote peut informer les clients de l’occurrence d’événements d’appareil de manière asynchrone ou en répondant à une demande d’interrogation de l’appareil. Tous les pilotes capables de fournir une notification d’événements d’appareil (par l’une ou l’autre méthode) doivent définir l’indicateur de STI_GENCAP_NOTIFICATIONS dans la structure STI_DEV_CAPS de l’appareil. Les pilotes qui prennent en charge l’interrogation et non la notification asynchrone doivent également définir l’indicateur STI_GENCAP_POLLING_NEEDED dans la même structure. (Ces fonctionnalités doivent également être indiquées à l’aide des fonctionnalités mot clé dans les fichiers INF pour les appareils à image fixe.)
Si un pilote prend en charge la notification asynchrone d’événements, le moniteur d’événements appelle IStiUSD ::SetNotificationHandle pour demander des notifications et fournir un handle d’événement. Lorsqu’un événement d’appareil se produit, le pilote doit avertir le moniteur d’événements en appelant SetEvent (consultez la documentation Microsoft Windows SDK), en utilisant le handle d’événement comme argument. Le client peut ensuite appeler IStiUSD ::GetNotificationData pour obtenir le GUID de l’événement.
Si l’interrogation est requise, le moniteur d’événements appelle IStiUSD ::GetStatus pour interroger le pilote, qui doit à son tour interroger l’appareil et retourner les résultats dans une structure STI_DEVICE_STATUS .