전송 모드
스틸 이미지 인터페이스는 두 가지 전송 모드인 상태 모드 및 데이터 모드를 정의합니다. IStillImage COM 인터페이스의 클라이언트가 IStillImage::CreateDevice를 호출하여 스틸 이미지 디바이스에 액세스하는 경우 전송 모드 중 하나(또는 둘 다)를 지정합니다. 여러 클라이언트가 상태 모드에서 디바이스를 열 수 있지만 한 번에 하나의 클라이언트만 데이터 모드에서 디바이스를 열 수 있습니다.
스틸 이미지 이벤트 모니터는 상태 모드에서 디바이스를 엽니다. 일반적으로 항상 그렇지는 않지만 이미지 획득 API는 데이터 모드에서 디바이스를 엽니다.
클라이언트가 데이터 모드에서 디바이스를 열면 이벤트 모니터는 후속 스틸 이미지 디바이스 이벤트를 내부 큐에 저장합니다. 클라이언트가 IStiDevice::Subscribe를 호출하는 경우 IStiDevice::GetLastNotificationData를 호출하여 큐에서 이벤트를 읽을 수 있습니다. 클라이언트가 디바이스를 닫은 후 이후에 수신된 이벤트로 인해 이벤트 모니터가 다시 등록된 애플리케이션을 시작하려고 시도합니다.
두 전송 모드의 의미는 전적으로 디바이스의 사용자 모드 미니 드라이버에 따라 달라집니다. IStillImage 및 IStiDevice 인터페이스를 사용하면 모든 메서드를 두 모드에서 모두 호출할 수 있습니다.
미니 드라이버는 IStiDevice::GetLastNotificationData를 호출하여 열 모드를 확인할 수 있습니다. 미니드라이버에서는 클라이언트가 디바이스에 액세스할 때 상태 모드만 요청한 경우 클라이언트가 데이터 전송을 수행하는 것을 금지해야 합니다.
디바이스는 비교적 짧은 시간 동안(예: 이미지에서 읽기 위해) 데이터 모드로 열리는 동안 일반적으로 비교적 오랜 시간 동안(예: 이벤트 모니터가 디바이스 이벤트를 감시함) 상태 모드로 열립니다는 점에 유의해야 합니다. 스틸 이미지 아키텍처를 사용하면 한 번에 하나의 클라이언트만 데이터 모드에서 디바이스를 열 수 있지만 드라이버가 디바이스 액세스에 대한 추가 제한을 적용해야 할 수 있습니다.
instance 경우 직렬 포트에 연결된 디바이스에 대한 드라이버를 작성하는 경우 디바이스가 상태 모드로 열려 있는 경우 드라이버의 IStiUSD::LockDevice 메서드 내에서 CreateFile을 호출할 수 있습니다. 이렇게 하면 디바이스에서 상태 정보를 가져오는 동안 다른 애플리케이션이 포트(다른 디바이스를 지원할 수 있습니다)를 사용하는 것을 금지합니다.
SCSI 또는 USB 버스 디바이스와 같은 전용 포트에 연결된 디바이스의 경우 일반적으로 디바이스와 포트가 항상 하나의 클라이언트에 전용되므로 상태 모드가 지정된 경우 IStiUSD::Initialize 내에서 CreateFile을 호출할 수 있습니다.
디바이스가 데이터 모드로 열리면 일반적으로 버스 유형과 관계없이 IStiUSD:Initialize 내에서 CreateFile이 호출됩니다.