Compartir a través de


Modos de transferencia

Las interfaces de imagen fija definen dos modos de transferencia : modo de estado y modo de datos. Cuando un cliente de la interfaz COM IStillImage llama a IStillImage::CreateDevice para obtener acceso a un dispositivo de imagen todavía, especifica uno (o ambos) de los modos de transferencia. Varios clientes pueden abrir un dispositivo en modo de estado, pero solo un cliente a la vez puede abrir un dispositivo en modo de datos.

El monitor de eventos de imagen fija abre los dispositivos en modo de estado. Normalmente, pero no siempre, las API de adquisición de imágenes abren dispositivos en modo de datos.

Una vez que un cliente ha abierto un dispositivo en modo de datos, el monitor de eventos almacena los eventos de dispositivo de imagen posteriores en una cola interna. Si el cliente llama a IStiDevice::Subscribe, puede leer eventos de la cola llamando a IStiDevice::GetLastNotificationData. Una vez que el cliente cierra el dispositivo, los eventos recibidos posteriormente hacen que el monitor de eventos vuelva a intentar iniciar una aplicación registrada.

Los significados de los dos modos de transferencia dependen completamente del minidriver del modo de usuario del dispositivo. Las interfaces IStillImage e IStiDevice permiten llamar a todos los métodos en cualquier modo.

Un minidriver puede determinar el modo en el que se abrió llamando a IStiDevice::GetLastNotificationData. Los minidrivers deben prohibir que un cliente realice transferencias de datos si el cliente solicitó solo el modo de estado al obtener acceso al dispositivo.

Es importante tener en cuenta que los dispositivos normalmente se abren en modo de estado durante un tiempo relativamente largo (por ejemplo, el monitor de eventos supervisa los eventos del dispositivo), mientras que se abren en modo de datos durante un tiempo relativamente corto (por ejemplo, para leer en una imagen). Aunque la arquitectura de imagen fija solo permite a un cliente a la vez abrir un dispositivo en modo de datos, podría ser necesario que un controlador coloque más restricciones en el acceso al dispositivo.

Por ejemplo, si está escribiendo un controlador para un dispositivo conectado a un puerto serie, es posible que desee llamar a CreateFile desde el método IStiUSD::LockDevice del controlador si el dispositivo se abrió en modo de estado. Esto impedirá que otras aplicaciones usen el puerto (que podría admitir otros dispositivos) mientras se obtiene información de estado del dispositivo.

En el caso de los dispositivos conectados a puertos dedicados, como dispositivos de bus SCSI o USB, normalmente se puede llamar a CreateFile desde IStiUSD::Initialize si se especifica el modo de estado, ya que el dispositivo y el puerto siempre se dedicarán a un cliente.

Cuando se abre un dispositivo en modo de datos, se suele llamar a CreateFile desde IStiUSD:Initialize, independientemente del tipo de bus.