IEEE 1394 디바이스에 대한 등시 동기화 옵션

IEEE 1394 드라이버 스택은 REQUEST_ISOCH_LISTENREQUEST_ISOCH_TALK 작업 중에 특정 유형의 동기화 및 필터링을 지원합니다.

드라이버는 버퍼의 ISOCH_DESCRIPTOR 구조체의 fulFlags 멤버에서 DESCRIPTOR_SYNCH_ON_SY 또는 DESCRIPTOR_SYNCH_ON_TAG 플래그를 설정하여 필터링을 시작할 수 있습니다. 해당 버퍼로 향하는 데이터부터 버스 드라이버는 Isoch 설명자에 표시된 Sy 또는 Tag 값과 일치하는 Sy 또는 Tag 값이 없는 데이터 스트림에서 모든 패킷을 제거합니다. 이 필터링은 DESCRIPTOR_SYNCH_ON_SY 및 DESCRIPTOR_SYNCH_ON_TAG 플래그 중 하나가 해당 버퍼의 등시 설명자에 설정되지 않더라도 다음에 오는 버퍼를 계속 수행합니다.

DESCRIPTOR_SYNCH_ON_SY 또는 DESCRIPTOR_SYNCH_ON_TAG 플래그를 설정하는 것 외에도 클라이언트 드라이버가 DESCRIPTOR_USE_SY_TAG_IN_FIRST 플래그를 설정하는 경우 버스 드라이버는 isoch 설명자의 클라이언트 드라이버에서 제공하는 Sy 또는 Tag 값을 사용하여 데이터 흐름을 동기화합니다. 이 경우 버스 드라이버는 Sy 또는 Tag 값이 isoch 설명자에 표시된 값과 일치하는 패킷을 받을 때까지 모든 데이터 패킷을 삭제합니다. 일치 항목을 찾은 후 버스 드라이버는 패킷 삭제를 중단하고 모든 패킷을 클라이언트 드라이버에 전달하기 시작합니다.

호스트 컨트롤러가 지원하는 경우 클라이언트 드라이버는 주기 시간을 사용하여 등시 데이터 스트림을 동기화할 수 있습니다. 이 컨텍스트의 "주기 시간"은 CYCLE_TIME 구조체에 의해 정의됩니다. 여기에는 128초마다 래핑되는 두 번째 개수( CL_SecondCount, 현재 초 내에 경과한 등시 주기 수를 나타내는 주기 수, CL_CycleCount) 및 현재 주기 내에서 경과된 IEEE 1394 버스 클록 틱 수를 나타내는 클록 틱 수 (CL_CycleOffset)가 포함됩니다.

클라이언트는 특정 버퍼에서 동기화 작업을 시작하거나 특정 주기 시간에 전체 데이터 스트림을 동기화할 수 있습니다.

특정 버퍼에서 동기화 작업을 시작하려면 클라이언트 드라이버가 해당 버퍼에 대한 isoch 설명자의 fulFlags 멤버에서 DESCRIPTOR_SYNCH_ON_TIME 플래그를 설정해야 합니다. 또한 데이터 스트림을 동기화하는 데 사용할 주기 시간으로 설명자의 CycleTime 멤버를 초기화해야 합니다. 버스 드라이버는 isoch 설명자를 검사한 후 표시된 주기 시간을 사용하여 동기화 작업을 시작합니다. 버스 드라이버는 표시된 주기 시간이 없는 모든 패킷을 삭제하고 올바른 주기 시간이 있는 패킷을 찾으면 패킷 배달을 다시 시작합니다.

특정 주기 시간에 전체 데이터 스트림을 동기화하려면 클라이언트 드라이버는 채널에서 시작된 모든 요청이 표시된 주기 시간을 사용하여 데이터 스트림을 자동으로 동기화하도록 채널을 구성해야 합니다. 이렇게 하면 특정 isoch 설명자의 주기 시간 설정을 기반으로 동기화를 트리거하는 대안이 제공됩니다. 이러한 방식으로 채널을 구성하려면 클라이언트 드라이버가 다음 두 단계를 수행해야 합니다.

  1. 클라이언트가 REQUEST_ISOCH_ALLOCATE_RESOURCES 요청을 사용하여 채널에 대한 리소스 핸들을 할당하는 경우 IRB의 fulFlags 멤버에서 RESOURCE_SYNCH_ON_TIME 플래그를 설정해야 합니다.

  2. 클라이언트가 채널에서 수신 대기 또는 통신 작업을 요청할 때 IRB의 StartTime 멤버에서 데이터 스트림을 동기화하는 데 사용할 주기 시간을 지정합니다. 요청 수신 대기 및 대화에 대한 자세한 내용은 REQUEST_ISOCH_LISTENREQUEST_ISOCH_TALK.

호스트 컨트롤러가 주기 시간에 동기화를 지원하는지 확인하려면 클라이언트 드라이버가 IRBnLevel 멤버를 2로 설정하여 버스 드라이버에 REQUEST_GET_LOCAL_HOST_INFO 요청을 보내야 합니다. 버스 드라이버는 이 요청에 대한 응답으로 GET_LOCAL_HOST_INFO2 구조를 반환합니다. 버스 드라이버가 GET_LOCAL_HOST_INFO2 HostCapabilities 멤버에서 HOST_INFO_SUPPORTS_START_ON_CYCLE 플래그를 설정하는 경우 호스트 컨트롤러가 주기 시간을 사용하여 등시 작업의 동기화를 지원한다는 것을 나타냅니다.