Eventos de dispositivo de imagen fija
Un evento de dispositivo de imagen fija es una aparición de nivel de dispositivo sobre la que se debe notificar el software de nivel superior, si ese software ha solicitado dicha notificación. El minidriver en modo de usuario es responsable de definir la mayoría de los eventos del dispositivo y entregar notificaciones cuando se produce un evento. En general, los eventos indican que se va a requerir software de nivel superior para realizar alguna acción.
Un evento típico de dispositivo de imagen fija es la detección de un botón de pulsación que se está presionando. Por ejemplo, un escáner podría proporcionar a un usuario botones independientes para iniciar el examen de texto y fotografías. Cuando se presiona un botón, se necesitará software de nivel superior para mostrar o almacenar la imagen. El monitor de eventos de imagen fija detecta que se ha producido el evento (mediante la interfaz COM IStiDevice) y puede llamar a una aplicación de imagen fija registrada anteriormente (mediante la interfaz COM IStillImage).
Los eventos de dispositivo de imagen fija se representan mediante GUID. En sti.h, Microsoft define los siguientes eventos de dispositivo de imagen:
GUID de evento | Propósito |
---|---|
GUID_DeviceArrivedLaunch | Un dispositivo de imagen fija acaba de estar conectado al sistema. |
GUID_ScanImage | Se debe examinar una imagen en el equipo. |
GUID_ScanFaxImage | Se debe examinar una imagen en el equipo y, a continuación, enviar un fax. |
GUID_ScanPrintImage | Se debe examinar una imagen en el equipo y, a continuación, imprimirla. |
GUID_STIUserDefined1 | Se ha presionado un botón definible por el usuario. |
GUID_STIUserDefined2 | Se ha presionado un botón definible por el usuario. |
GUID_STIUserDefined3 | Se ha presionado un botón definible por el usuario. |
Los desarrolladores de minidrivers en modo de usuario deben usar estos GUID de eventos predefinidos siempre que sea posible. Si estos GUID no son adecuados, se deben definir GUID para eventos específicos del dispositivo.
Para definir un evento de dispositivo de imagen fija, debe hacer lo siguiente:
Especifique un GUID para cada evento.
Incluya cada GUID en el archivo INF del controlador en modo de usuario.
Dentro del archivo INF del controlador, cada especificación GUID debe incluir un asterisco (lo que significa "todas las aplicaciones") o una lista de aplicaciones específicas, lo que indica qué aplicaciones deben iniciarse cuando se produce el evento. El monitor de eventos de imagen fija usa esta lista para proporcionar asignaciones predeterminadas de aplicaciones a eventos. El usuario puede modificar estas asignaciones con el Panel de control Escáneres y Cámaras.
Notificación de evento
El controlador debe supervisar el dispositivo (mediante E/S asincrónica o sondeo) para determinar cuándo se produce el evento asociado a cada GUID. En función de las funcionalidades del dispositivo, el controlador puede notificar a los clientes la aparición de eventos de dispositivo de forma asincrónica o respondiendo a una solicitud para sondear el dispositivo. Todos los controladores que puedan entregar notificaciones de eventos de dispositivo (por cualquiera de los métodos) deben establecer la marca STI_GENCAP_NOTIFICATIONS en la estructura de STI_DEV_CAPS del dispositivo. Los controladores que admiten el sondeo y no la notificación asincrónica también deben establecer la marca STI_GENCAP_POLLING_NEEDED en la misma estructura. (Estas funcionalidades también deben indicarse mediante la palabra clave Capabilities en archivos INF para dispositivos de imagen fija).
Si un controlador admite notificaciones asincrónicas de eventos, el monitor de eventos llama a IStiUSD::SetNotificationHandle para solicitar notificaciones y proporcionar un identificador de eventos. Cuando se produce un evento de dispositivo, el controlador debe notificar al monitor de eventos mediante una llamada a SetEvent (consulte la documentación de Microsoft Windows SDK), mediante el identificador de evento como argumento. A continuación, el cliente puede llamar a IStiUSD::GetNotificationData para obtener el GUID del evento.
Si se requiere sondeo, el monitor de eventos llama a IStiUSD::GetStatus para sondear el controlador, que a su vez debe sondear el dispositivo y devolver los resultados en una estructura de STI_DEVICE_STATUS .