传输模式
静态图像接口定义两种传输模式以及状态模式和数据模式。 当 IStillImage COM 接口的客户端调用 IStillImage::CreateDevice 以获取对静止图像设备的访问权限时,它会指定一个 (或两者) 传输模式。 多个客户端可以在状态模式下打开设备,但一次只能有一个客户端在数据模式下打开设备。
静态图像事件监视器在状态模式下打开设备。 通常(但并非总是) 图像获取 API 在数据模式下打开设备。
客户端在数据模式下打开设备后,事件监视器会将后续 静态图像设备事件 存储在内部队列中。 如果客户端调用 IStiDevice::Subscribe,它可以通过调用 IStiDevice::GetLastNotificationData 从队列中读取事件。 客户端关闭设备后,随后收到的事件会导致事件监视器再次尝试启动已注册的应用程序。
这两种传输模式的含义完全取决于设备的用户模式微型驱动程序。 IStillImage 和 IStiDevice 接口允许在任一模式下调用所有方法。
微型驱动程序可以通过调用 IStiDevice::GetLastNotificationData 来确定打开它的模式。 如果客户端在获取对设备的访问权限时仅请求状态模式,微型驱动程序应禁止客户端执行数据传输。
请务必注意,设备通常在状态模式下打开的时间相对较长, (例如,事件监视器监视设备事件) ,而设备在数据模式下打开的时间相对较短, (例如,在图像) 中读取。 尽管静态映像体系结构一次只允许一个客户端在数据模式下打开设备,但驱动程序可能需要对设备访问施加进一步的限制。
例如,如果要为连接到串行端口的设备编写驱动程序,如果设备是在状态模式下打开的,则可能需要从驱动程序的 IStiUSD::LockDevice 方法中调用 CreateFile。 这将禁止其他应用程序使用端口 (在从设备获取状态信息时,端口) 可能支持其他设备。
对于连接到专用端口的设备(如 SCSI 或 USB 总线设备),通常允许在指定状态模式的情况下从 IStiUSD::Initialize 中调用 CreateFile,因为设备和端口将始终专用于一个客户端。
在数据模式下打开设备时,通常从 IStiUSD:Initialize 中调用 CreateFile,与总线类型无关。