Partager via


Modes de transfert

Les interfaces d'image fixe définissent deux modes de transfert : le mode d’état et le mode de données. Lorsqu’un client de l’interface COM IStillImage appelle IStillImage::CreateDevice pour obtenir l’accès à un appareil d'imagerie fixe, il spécifie un (ou les deux) des modes de transfert. Plusieurs clients peuvent ouvrir un appareil en mode état, mais un seul client à la fois est autorisé à ouvrir un appareil en mode données.

Le moniteur d’événements d'images fixes ouvre les appareils en mode de statut. En règle générale, mais pas toujours, les API d’acquisition d’images ouvrent des appareils en mode données.

Une fois qu'un client a ouvert un appareil en mode de transmission des données, le moniteur d’événements stocke les événements d’appareil d'image fixe subséquents dans une file d’attente interne. Si le client appelle IStiDevice ::Subscribe, il peut lire les événements de la file d’attente en appelant IStiDevice ::GetLastNotificationData. Une fois que le client ferme l’appareil, les événements reçus par la suite entraînent la nouvelle tentative de démarrage d’une application inscrite par le moniteur d’événements.

Les significations des deux modes de transfert dépendent entièrement du minidriver en mode utilisateur de l’appareil. Les interfaces IStillImage et IStiDevice permettent à toutes les méthodes d’être appelées dans n'importe quel mode.

Un minidriver peut déterminer le mode dans lequel il a été ouvert en appelant IStiDevice ::GetLastNotificationData. Les minidrivers doivent empêcher un client d’effectuer des transferts de données si le client a demandé uniquement le mode d’état lors de l’obtention de l’accès à l’appareil.

Il est important de noter que les appareils sont généralement ouverts en mode état pendant une durée relativement longue (par exemple, le moniteur d’événements surveille les événements d’appareil), alors qu’ils sont ouverts en mode données pendant un temps relativement court (par exemple, pour lire dans une image). Bien que l’architecture d'image fixe autorise un seul client à la fois à ouvrir un dispositif en mode de gestion des données, il peut être nécessaire qu’un pilote impose d’autres restrictions sur l’accès au dispositif.

Par exemple, si vous écrivez un pilote pour un appareil connecté à un port série, vous pouvez appeler CreateFile à partir de la méthode IStiUSD ::LockDevice du pilote si l’appareil a été ouvert en mode état. Cela empêchera d’autres applications d’utiliser le port (qui peut prendre en charge d’autres appareils) tandis que les informations d’état sont obtenues à partir de l’appareil.

Pour les appareils connectés aux ports dédiés, tels que les périphériques de bus SCSI ou USB, il est généralement autorisé à appeler CreateFile à partir d’IStiUSD ::Initialize si le mode d’état est spécifié, car l’appareil et le port sont toujours dédiés à un client.

Lorsqu’un appareil est ouvert en mode de données, CreateFile est généralement appelé à partir d’IStiUSD :Initialize, indépendamment du type de bus.