Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ważne
Nowoczesna platforma drukowania jest preferowanym sposobem komunikacji z drukarkami w systemie Windows. Zalecamy używanie sterownika klasy skrzynki odbiorczej IPP firmy Microsoft wraz z aplikacjami do obsługi drukowania (PSA), aby dostosować środowisko drukowania w systemie Windows 10 i 11 na potrzeby opracowywania urządzeń drukarki.
Aby uzyskać więcej informacji, zobacz Print Support App v1 and v2 design guide (Przewodnik projektowania aplikacji do obsługi wydruku w wersji 1 i 2).
System Windows umożliwia producentom obsługę dwukierunkowej komunikacji (Bidi) dla urządzeń USB przy użyciu kombinacji pliku BIDI XML i pliku JavaScript znanego jako rozszerzenie BIDI USB.
Rozszerzenie USB Bidi pozwala aplikacjom używać Bidi z USB jako mechanizmu transportu. Implementacja języka JavaScript nie obsługuje żadnego sterowania przepływem urządzenia ani żadnego multipleksowania informacji sterujących z zadaniami drukowania podczas drukowania.
Domyślnie zapytania bidi i żądania stanu są kierowane za pośrednictwem interfejsu urządzenia USB używanego do drukowania. Umożliwia to pełną dwukierunkową komunikację ze stanem przy użyciu metody getSchemas JavaScript, a także zezwalanie na ustawianie operacji przy użyciu metody setSchema JavaScript. Komunikacja dwukierunkowa jest możliwa, gdy do urządzenia wydruku nie są wysyłane żadne zadania drukowania.
Podczas drukowania zapisy są blokowane przez dane zadania drukowania, dlatego metoda getStatus służy do uzyskiwania stanu niepożądanego z urządzenia przy użyciu tylko kanału odczytu. Jeśli jednak urządzenie obsługuje pomocniczy interfejs USB, funkcja metody requestStatus służy do uzyskiwania stanu z drukarki podczas drukowania urządzenia.
W systemie Windows 8.1 model sterowników w wersji 4 został rozszerzony w celu zapewnienia obsługi urządzeń opartych na hoście. Oprócz tego, USBMon został zaktualizowany, aby umożliwić IHV korzystanie z kodu JavaScript w celu uzyskania lepszej kontroli nad ścieżką drukowania i wykonywania akcji opartych na zadaniach drukowania. Aktualizacja obejmuje dodawanie interfejsów API, które udostępniają nowe punkty wejścia języka JavaScript dla platformy Bidi. Te interfejsy API są zgodne z istniejącymi funkcjami w narzędziu USBMon.
startPrintJob. Ta nowa funkcja jest zgodna z parametrem startDocPort w usbMon. Ponieważ każde nowe zadanie drukowania USB jest uruchamiane na porcie podłączonym do urządzenia wydruku Host-Based, USBMon wywoła kod JavaScript dostarczony przez IHV, aby umożliwić mu wykonywanie niezbędnego przetwarzania wstępnego. Może to obejmować ustawianie właściwości globalnych zadania w zbiorze właściwości zadania, przeprowadzenie zapytań do urządzenia w celu uzyskania danych dotyczących bieżącego stanu i konfiguracji lub nic. Ukończone zadania są całkowicie zależne od urządzenia i IHV.
writePrintData. Ta nowa funkcja współgra z writePort w USBMon. Gdy usbMon odbiera każde wywołanie funkcji writePort z buforu podczas drukowania, dostarczone dane drukowania muszą być wysyłane do urządzenia opartego na hoście za pośrednictwem funkcji IHV JavaScript. Dzięki temu IHV JS może zdecydować, co powinno być wysyłane do urządzenia w tej chwili. IHV może usuwać, dodawać lub zapisywać części buforu danych zgodnie z potrzebami. Dzięki temu IHV może całkowicie kontrolować, co jest wysyłane do urządzenia, kiedy. Pomoże to włączyć takie scenariusze jak ręczny dwukierunkowy, dając IHV szansę na zaoszczędzenie (w jednym z trwałych strumieni) danych dla parzystych stron zadania drukowania do przetwarzania po odebraniu wszystkich danych z buforu. IHV może również użyć obiektu printerBidiSchemaResponses, aby zwrócić stan zadania drukowania lub stan urządzenia podczas przetwarzania zadania.
endPrintJob. Ta nowa funkcja jest zgodna z endDocPort w usbMon. Gdy USBMon odbiera funkcję endDocPort dla każdego zadania drukowania USB na porcie podłączonym do urządzenia drukującego Host-Based, USBMon wywoła JavaScript dostarczone przez IHV, aby umożliwić dowolne wymagane przetwarzanie po zakończeniu zadania. Może to obejmować wysyłanie wszelkich zachowanych danych do urządzenia, zwracanie wartości schematu Bidi w celu rozpoczęcia ręcznego drukowania dwustronnego lub wykonanie dowolnych innych działań, których wymaga IHV lub urządzenie.
Na poniższym diagramie przedstawiono przegląd architektury rozszerzenia Bidi USB, pokazujący scenariusz, w którym metoda getStatus jest używana do uzyskiwania niepożądanego stanu z urządzenia za pośrednictwem interfejsu USBPrint.
Aby uzyskać więcej informacji na temat pracy z drukarką USB, zobacz Drukowanie USB.
Dokumentacja API rozszerzenia dwukierunkowego USB
Kod JavaScript w rozszerzeniu BIDI USB używa następujących funkcji do komunikowania się z urządzeniem wydruku:
getSchemas
setSchema
getStatus
requestStatus
startPrintJob
writePrintData
endPrintJob
Aby uzyskać więcej informacji na temat tych interfejsów API, zobacz Dokumentacja interfejsu API języka JavaScript.
Schemat XML rozszerzenia USBMon Bidi
Plik rozszerzenia USBMon Bidi używa tej samej podstawowej struktury co plik rozszerzenia BIDI SNMP i plik rozszerzenia WSDMon Bidi. Plik schematu XML jest publikowany w zestawie sterowników systemu Windows, a pliki rozszerzeń USBMon Bidi zostaną automatycznie zweryfikowane pod kątem zgodności ze schematem podczas testu INFGate WHCK. Podczas opracowywania schematu rozszerzenia Bidi i pracy z magistralą USB należy pamiętać o następujących informacjach:
Wartości mogą określać typ dostępu get, set lub GetSet. Wskazuje to, gdzie opisany element schematu jest obsługiwany w typach operacji Bidi Get lub Set.
Wartości mogą określać wartość queryKey. Służy do oznaczania operacji fizycznych używanych do uzyskiwania danych z urządzenia. Wszystkie właściwości w ramach tego samego klucza zapytania powinny być możliwe do pobrania w jednej operacji odczytu/zapisu USB.
Wartości bidi są natychmiast pobierane, jeśli są żądane w wywołaniu interfejsu API bidi. Wartość refreshInterval jest początkową wartością wskazującą, kiedy sondować urządzenie pod kątem aktualizacji określonej wartości schematu Bidi. Po każdym zapytaniu interwałOdświeżania jest zwiększany do momentu zatrzymania sprawdzania. Poniższa formuła pokazuje, jak refreshInterval jest inkrementowane.
currentRefreshInterval = refreshInterval * (3 * numPolls);
Interakcja pliku rozszerzenia USBMon i pliku rozszerzenia USB Bidi
Za każdym razem, gdy jest tworzony lub otwierany nowy port USB, USBMon ustali, czy dołączone urządzenie oraz skojarzony z nim sterownik zawierają nowy plik rozszerzenia Bidi oraz plik JavaScript rozszerzenia Bidi. USBMon przeszukuje manifest sterownika w wersji 4 lub plik INI sterownika i pobiera nazwę plików. Jeśli usbMon znajdzie odpowiednie pliki, używa ich do określenia listy rozszerzonych wartości schematu bidi obsługiwanych przez to urządzenie, a następnie komunikacji z urządzeniem w celu wykonywania zapytań dotyczących ich wartości. W tym momencie USBMon obsługuje określone przez IHV działania schematu bidi poprzez istniejące interfejsy API bufora wydruku.
Przykłady sterowników systemu Windows w witrynie GitHub
Przykładowy plik XML USBMon Bidi — zawiera przykład pliku XML rozszerzenia BIDI USBMon. Używa on standardowych właściwości schematu Bidi DeviceInfo, Configuration i Memory, a także definiuje kilka rozszerzeń niestandardowych.
Aby uzyskać więcej informacji na temat plików rozszerzeń Bidi, zobacz Dwukierunkowy schemat komunikacji.
Przykładowy plik JavaScript USBMon Bidi. Ten przykład zawiera plik JavaScript rozszerzenia USBMon Bidi. Pokazuje, jak obsługiwać operacje Bidi SET i GET, a także jak nasłuchiwać zdarzenia podczas drukowania.
Debugowanie
Debugowanie interakcyjne można włączyć, tworząc następujący klucz rejestru. W przypadku języka JavaScript bidi USB przed włączeniem debugowania należy ponownie uruchomić bufor wydruku.
nazwa klucza : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print
nazwa wartości : EnableJavaScriptDebugging
Typ : DWORD
Wartość : 1
Po utworzeniu klucza rejestru pokazanego w poprzedniej sekcji i ponownym uruchomieniu procesu hostingu skrypt można debugować w następujący sposób:
Dołącz debuger do procesu hostingu. W przypadku dwukierunkowego JavaScriptu USB jest to spoolsv.exe.
Ustaw debuger na tryb debugowania skryptu.
Wybierz pozycję Przerwij wszystko (Ctrl + Alt + Break), aby włamać się do procesu przy następnym uruchomieniu skryptu.
Uruchom scenariusz, aby odtworzyć problem.
Kiedy debuger przerwie działanie funkcji JavaScript, ustaw wszelkie niezbędne punkty przerwania i wykonaj kroki przez kod.
Tematy pokrewne
Schemat komunikacji dwukierunkowej
IPrinterScriptableSequentialStream