Stos sterowników modułów równorzędnych

Stos sterowników równorzędnych składa się ze sterowników załadowanych do reprezentowania podsystemów AV/C, które są aktywne w szynie IEEE 1394 i które można kontrolować z komputera. Zewnętrzna kontrola urządzenia musi być inicjowana za pośrednictwem stosu sterowników równorzędnych AV/C. System Windows ładuje wystąpienie Avc.sys dla każdego zewnętrznego urządzenia AV/C w magistrali IEEE 1394 za każdym razem, gdy urządzenie jest podłączone do systemu (lub występuje podczas uruchamiania systemu). Każda instancja Avc.sys, która jest ładowana w celu obsługi sterownika jednostki równorzędnej, rejestruje nową instancję interfejsu urządzenia GUID_AVC_CLASS. Aby uzyskać więcej informacji na temat interfejsu urządzenia GUID_AVC_CLASS, zobacz Korzystanie z Avc.sys oraz IOCTL_AVC_CLASS.

Sterowniki jednostek podrzędnych równorzędnych uzyskują dostęp do swoich podjednostek i sterują nimi za pośrednictwem interfejsu IOCTL_AVC_CLASS wyeksportowanego przez Avc.sys. Avc.sys obsługuje protokół sterowania i odpowiedzi AV/C, w tym wszystkie interakcje z IEC 61883 Function Control Protocol (FCP). Należy jednak pamiętać, że sterownik równorzędnej jednostki podrzędnej nie jest powstrzymywany przed komunikacją i bezpośrednim dostępem do określonych funkcji 61883.sys, gdy jest to konieczne. Sterownik podrzędny może wymagać bezpośredniej komunikacji z 61883.sys, gdy sterownik podrzędny reprezentuje podnit AV/C, który używa formatu strumienia, którego firma Microsoft nie obsługuje. Sterownik podrzędny może używać interfejsu IOCTL_61883_CLASS do bezpośredniej komunikacji z 61883.sys w razie potrzeby. Firma Microsoft dostarcza sterownik filtru dolnego, Avcstrm.sys, który może pomóc w przesyłaniu strumieniowym formatów DV i MPEG2. Aby uzyskać więcej informacji na temat Avcstrm.sys, zobacz AV/C Streaming Overview (Omówienie przesyłania strumieniowego AV/C).

Sterownik podrzędny elementu równorzędnego może zarejestrować się, aby być powiadamianym o poleceniach AV/C i je otrzymywać z zewnętrznych urządzeń AV/C. Aby się zarejestrować, sterownik podrzędny podjednostki równorzędnej wysyła pakiet żądania we/wy IRP_MJ_INTERNAL_DEVICE_CONTROL (IRP) z elementem członkowskim IoControlCode kodu sterującego we/wy IOCTL_AVC_CLASS i z podfunkcją ustawioną na AVC_FUNCTION_GET_REQUEST. Ta funkcja umożliwia sterownikowi podrzędnemu równorzędnemu odbieranie żądań AV/C z jego podjednostki i umożliwia obsługę specyfikacji, takich jak protokół Zarządzania Połączeniami i Zgodnością (CCM) oraz Digital Transmission Content Protection (DTCP). Aby uzyskać więcej informacji na temat platformy DTCP, zobacz witrynę internetową administratora licencjonowania cyfrowej transmisji.

Należy pamiętać, że ta funkcja jest przeznaczona do obsługi wirtualnego sterownika podrzędnego AV/C w celu wysyłania poleceń AV/C do komputera (gdzie sterownik podrzędny znajduje się w wirtualnym stosie urządzeń AV/C) i nie zezwala na wysyłanie poleceń AV/C na urządzeniach zewnętrznych w celu wysyłania poleceń AV/C do systemu komputerowego.

Peer Stack jako docelowy obiekt komendy AV/C

Stos sterowników jednostki równorzędnej może zawierać dodatkowe sterowniki filtrów WDM, które oferują funkcje AV/C specyficzne dla dostawcy lub urządzenia. Dzięki temu mechanizmowi rozszerzenia stosu sterowników jednostek podrzędnych równorzędnych, dostawcy zewnętrzni mogą niezależnie implementować funkcje o wartości dodanej, takie jak ochrona kopii 5C, a także rozszerzenia implementacji AV/C zapewniane przez Microsoft.

Sterowniki podrzędne mogą wykonywać tę funkcję, ale w przypadku urządzeń z wieloma podnitami preferowany jest sterownik filtru WDM. Komputer jest widoczny jako cel AV/C tylko wtedy, gdy sterownik nadrzędny (podjednostka lub sterownik filtru) rejestruje się do odbierania żądań przychodzących za pośrednictwem AVC_FUNCTION_GET_REQUEST. Aby uzyskać więcej informacji na temat poleceń jednostki AV/C, zobacz AVC_FUNCTION.

Ładowanie sterownika jest oparte na identyfikatorach urządzeń; w związku z tym funkcjonalność urządzenia może być ładowana selektywnie na podstawie konkretnego urządzenia lub producenta. Wirtualny stos sterowników podrzędnych obsługuje ten mechanizm w sposób ogólny (nie w sposób specyficzny dla urządzenia).

Należy pamiętać, że jeśli stos sterowników jednostki podrzędnej równorzędnej implementuje rozszerzenia jednostek specyficznych dla urządzenia, wszystkie nieobsługiwane polecenia jednostki, jak i wszystkie przychodzące polecenia podjednostki, są kierowane do stosu sterowników wirtualnych podjednostek.

Mechanizm rozszerzenia polecenia jednostki

W kontekście pakietu sterowników równorzędnych, funkcja docelowa jest ograniczona do obsługi poleceń jednostki AV/C. Jeśli sterownik podrzędnej jednostki (dla jednostki wirtualnej lub jednostki równorzędnej) rejestruje się w celu odbierania żądań AV/C, Avc.sys bezpośrednio obsługuje tylko kody operacyjne SUBUNIT_INFO (0x31) i UNIT_INFO (0x30). Aby uzyskać więcej informacji na temat opcode, zobacz Specyfikację ogólną zestawu poleceń interfejsu cyfrowego AV/C, Rev 3.0 . Aby obsługiwać dodatkowe polecenia jednostki, takie jak dla protokołu CCM lub DTCP, Avc.sys zapewnia mechanizm rozszerzeń wtyczek. Dowolna liczba sterowników filtrów podrzędnych lub sterowników WDM może zarejestrować kody operacyjne jednostki, które obsługują, poprzez element członkowski AlternateOpcodes struktury AVC_COMMAND_IRB, przesłanej za pośrednictwem funkcji AVC_FUNCTION_GET_REQUEST. AlternateOpcodes jest tablicą bajtów o określonej liczbie; element 0 to liczba alternatywnych kodów operacji w pozostałych bajtach. alternatywne opcodes jest ignorowane przy wysyłaniu odpowiedzi, więc alternatywne kody operacyjne nie muszą być ukryte podczas przetwarzania żądania jednostki.

Aby użyć wbudowanego mechanizmu rozszerzenia, określ adres jednostki jako 0xff w SubunitAddress składowej struktury AVC_COMMAND_IRB. Członek SubunitAddress zostaje pozostawiony w kontekście poleceń jednostki (adres jednostki dostarczony przez sterownik podrzędny nadal istnieje). Sterownik podnitu wirtualnego jest zawsze w stanie wyłączyć element członkowski SubunitAddress.