Поделиться через


Режимы передачи

Интерфейсы изображений определяют два режима передачи — режим состояния и режим данных. Когда клиент интерфейса COM IStillImage вызывает IStillImage::CreateDevice для получения доступа к устройству для работы с неподвижными изображениями, он указывает один (или оба) режима передачи. Несколько клиентов могут открывать устройство в режиме состояния, но только один клиент одновременно может открывать устройство в режиме данных.

Монитор изображений событий открывает устройства в режиме мониторинга состояния. Как правило, но не всегда API приобретения изображений открывают устройства в режиме данных.

После открытия устройства в режиме передачи данных, монитор событий сохраняет последующие события устройств неподвижных изображений во внутренней очереди. Если клиент вызывает IStiDevice::Subscribe, он может считывать события из очереди путем вызова IStiDevice::GetLastNotificationData. После того как клиент закрывает устройство, последующие полученные события приводят к тому, что монитор событий снова пытается запустить зарегистрированное приложение.

Значения двух режимов передачи полностью зависят от минидрайвера в пользовательском режиме устройства. Интерфейсы IStillImage и IStiDevice позволяют вызывать все методы в любом режиме.

Минидрайвер может определить режим, в котором его открыли, вызвав IStiDevice::GetLastNotificationData. Мини-драйверы должны запретить клиенту выполнять передачу данных, если клиент запрашивал только статусный режим при получении доступа к устройству.

Важно отметить, что устройства обычно открываются в режиме состояния относительно длительного времени (например, монитор событий отслеживает события устройства), в то время как они открываются в режиме данных относительно короткое время (например, для чтения в изображении). Хотя архитектура статических изображений позволяет открывать устройство в режиме передачи данных только одному клиенту одновременно, возможно, потребуется, чтобы драйвер ввел дополнительные ограничения на доступ к устройству.

Например, если вы пишете драйвер для устройства, подключенного к последовательному порту, вам может потребоваться вызвать CreateFile из метода IStiUSD::LockDevice, если устройство было открыто в статусном режиме. Это запретит другим приложениям использовать порт (который может поддерживать другие устройства) во время получения сведений о состоянии с устройства.

Для устройств, подключенных к выделенным портам, таким как SCSI или USB, обычно разрешено вызывать CreateFile из IStiUSD::Initialize, если указан режим статуса, так как устройство и порт всегда будут выделены одному клиенту.

При открытии устройства в режиме данных CreateFile обычно вызывается из IStiUSD:Initialize независимо от типа шины.