다음을 통해 공유


전송 모드

스틸 이미지 인터페이스는 상태 모드와 데이터 모드의 두 가지 전송 모드를 정의합니다. IStillImage COM 인터페이스의 클라이언트가 IStillImage::CreateDevice를 호출하여 스틸 이미지 디바이스에 대한 액세스를 가져오는 경우 전송 모드 중 하나(또는 둘 다)를 지정합니다. 여러 클라이언트가 상태 모드에서 디바이스를 열 수 있지만 한 번에 하나의 클라이언트만 데이터 모드에서 디바이스를 열 수 있습니다.

스틸 이미지 이벤트 모니터는 상태 모드에서 디바이스를 엽니다. 일반적이지만 항상 그런 것은 아니지만, 이미지 획득 API는 데이터 모드에서 장치를 엽니다.

클라이언트가 데이터 모드에서 디바이스를 열면 이벤트 모니터는 이후의 스틸 이미지 디바이스 이벤트를 내부 큐에 저장합니다. 클라이언트가 IStiDevice::Subscribe를 호출하는 경우 IStiDevice::GetLastNotificationData를 호출하여 큐에서 이벤트를 읽을 수 있습니다. 클라이언트가 디바이스를 닫은 후 이후에 수신된 이벤트로 인해 이벤트 모니터가 다시 등록된 애플리케이션을 시작하려고 시도합니다.

두 전송 모드의 의미는 전적으로 디바이스의 사용자 모드 미니 드라이버에 따라 달라집니다. IStillImageIStiDevice 인터페이스를 사용하면 모든 메서드를 두 모드에서 모두 호출할 수 있습니다.

미니 드라이버는 IStiDevice::GetLastNotificationData를 호출하여 열린 모드를 확인할 수 있습니다. 클라이언트가 디바이스에 대한 액세스 권한을 얻을 때 상태 모드만 요청한 경우 미니 드라이버는 클라이언트가 데이터 전송을 수행하는 것을 금지해야 합니다.

디바이스는 일반적으로 상태 모드에서 비교적 오랜 시간 동안 열려 있으며(예: 이벤트 모니터가 디바이스 이벤트를 감시하는 경우), 데이터 모드에서는 비교적 짧은 시간 동안 열립니다(예: 이미지를 읽기 위해). 스틸 이미지 아키텍처는 한 번에 하나의 클라이언트만 데이터 모드로 디바이스를 열 수 있지만 드라이버가 디바이스 액세스에 대한 추가 제한을 적용해야 할 수 있습니다.

예를 들어 직렬 포트에 연결된 디바이스에 대한 드라이버를 작성하는 경우 디바이스가 상태 모드로 열려 있는 경우 드라이버의 IStiUSD::LockDevice 메서드 내에서 CreateFile을 호출할 수 있습니다. 이렇게 하면 상태 정보를 디바이스에서 가져오는 동안 다른 애플리케이션에서 포트(다른 디바이스를 지원할 수 있습니다)를 사용하는 것을 금지합니다.

SCSI 또는 USB 버스 디바이스와 같은 전용 포트에 연결된 디바이스의 경우 일반적으로 디바이스와 포트가 항상 하나의 클라이언트에 전용되므로 상태 모드가 지정된 경우 IStiUSD::Initialize 내에서 CreateFile을 호출할 수 있습니다.

디바이스가 데이터 모드로 열리면 일반적으로 CreateFile 은 버스 유형과 관계없이 IStiUSD:Initialize 내에서 호출됩니다.