다음을 통해 공유


USB Bidi Extender

Important

최신 인쇄 플랫폼은 Windows에서 프린터와 통신하는 데 선호되는 수단입니다. 프린터 장치 개발을 위해 Windows 10 및 11의 인쇄 환경을 사용자 지정하려면 MICROSOFT의 IPP 받은 편지함 클래스 드라이버와 PSA(인쇄 지원 앱)를 사용하는 것이 좋습니다.

자세한 내용은 최신 인쇄 플랫폼 및 인쇄 지원 앱 디자인 가이드를 참조하세요.

Windows를 사용하면 제조업체가 Bidi XML 파일과 USB Bidi extender라고 하는 Javascript 파일의 조합을 사용하여 USB 디바이스에 대한 양방향 통신(Bidi)을 지원할 수 있습니다.

USB Bidi extender를 사용하면 애플리케이션이 전송 메커니즘으로 USB와 함께 Bidi를 사용할 수 있습니다. Javascript 구현은 인쇄 중에 인쇄 작업을 사용하여 디바이스 흐름 제어 또는 컨트롤 정보의 멀티플렉싱을 지원하지 않습니다.

기본적으로 Bidi 쿼리 및 상태 요청은 인쇄에 사용되는 USB 디바이스 인터페이스를 통해 라우팅됩니다. 이렇게 하면 getSchemas JavaScript 메서드를 사용하여 상태에 대한 전체 양방향 통신을 수행할 수 있을 뿐만 아니라 setSchema JavaScript 메서드를 사용하여 Set 작업을 허용할 수 있습니다. 인쇄 장치로 전송되는 인쇄 작업이 없는 동안에는 전체 양방향 통신이 가능합니다.

인쇄하는 동안 쓰기는 인쇄 작업 데이터에 의해 차단되므로 getStatus 메서드는 읽기 채널만 사용하여 디바이스에서 원치 않는 상태를 가져오는 데 사용됩니다. 그러나 디바이스가 보조 USB 인터페이스 를 지원하는 경우 requestStatus 메서드 함수를 사용하여 디바이스가 인쇄되는 동안 프린터에서 상태를 가져옵니다.

Windows 8.1 v4 드라이버 모델은 호스트 기반 디바이스에 대한 지원을 제공하도록 확장되었습니다. 또한 IHV가 JavaScript 코드를 사용하여 인쇄 경로를 더 잘 제어하고 인쇄 작업 기반 작업을 수행할 수 있도록 USBMon이 업데이트되었습니다. 업데이트에는 새 Bidi JavaScript 진입점을 제공하는 API가 추가되었습니다. 이러한 API는 USBMon의 기존 함수에 맞춰집니다.

startPrintJob. 이 새 함수는 USBMon의 startDocPort와 일치합니다. 각 새 USB 인쇄 작업은 호스트 기반 인쇄 디바이스에 연결된 포트에서 시작되므로 USBMon은 필요한 모든 사전 작업 처리를 수행할 수 있도록 제공된 JavaScript에서 IHV를 호출합니다. 여기에는 작업 속성 모음에서 작업 전역 속성 설정, 디바이스에서 현재 상태 및 구성 데이터 또는 아무것도 쿼리하는 작업이 포함될 수 있습니다. 완료된 작업은 디바이스 및 IHV에 완전히 종속됩니다.

writePrintData. 이 새 함수는 USBMon의 writePort와 일치합니다. USBMon이 인쇄하는 동안 스풀러에서 각 writePort 함수 호출을 받으면 제공된 인쇄 데이터를 IHV JavaScript 함수를 통해 호스트 기반 디바이스로 보내야 합니다. 이를 통해 IHV JS는 현재 디바이스로 보낼 내용을 결정할 수 있습니다. IHV는 필요에 따라 데이터 버퍼의 일부를 제거, 추가 또는 저장할 수 있습니다. 이를 통해 IHV는 디바이스로 전송되는 시기를 완전히 제어할 수 있습니다. 이렇게 하면 IHV가 스풀러에서 모든 데이터를 받은 후 처리를 위해 인쇄 작업의 짝수 페이지에 대한 데이터를 저장할 수 있는 기회를 IHV에 제공하여 수동 이중과 같은 시나리오를 사용할 수 있습니다. IHV는 프린터BidiSchemaResponses 개체를 사용하여 작업을 처리하는 동안 인쇄 작업 상태 또는 디바이스 상태를 반환할 수도 있습니다.

endPrintJob. 이 새 함수는 USBMon의 endDocPort에 맞춥니다. USBMon이 호스트 기반 인쇄 디바이스에 연결된 포트의 각 USB 인쇄 작업에 대한 endDocPort 호출을 수신하면 USBMon은 필요한 작업 후 처리를 수행할 수 있도록 제공된 IHV 제공 JavaScript를 호출합니다. 여기에는 유지된 데이터를 디바이스로 보내고, 수동 이중 또는 IHV/디바이스에 필요한 기타 작업을 시작하기 위해 Bidi 스키마 값을 반환하는 작업이 포함될 수 있습니다.

다음 다이어그램은 USBPrint 인터페이스를 통해 디바이스에서 원치 않는 상태를 가져오는 데 getStatus 메서드를 사용하는 시나리오를 보여 주는 USB Bidi 확장 아키텍처의 개요를 제공합니다.

getstatus 메서드를 사용하는 usb bidi extender 아키텍처입니다.

USB 프린터 작업에 대한 자세한 내용은 USB 인쇄를 참조하세요.

USB Bidi extender API 참조

USB Bidi extender의 JavaScript 코드는 인쇄 디바이스와 통신하기 위해 다음 함수를 사용합니다.

  • getSchemas

  • setSchema

  • getStatus

  • requestStatus

  • startPrintJob

  • writePrintData

  • endPrintJob

이러한 API에 대한 자세한 내용은 JavaScript API 참조를 참조 하세요.

USBMon Bidi 확장 XML 스키마

USBMon Bidi 확장 파일은 SNMP Bidi 확장 파일 및 WSDMon Bidi 확장 파일과 동일한 기본 구조를 사용합니다. XML 스키마 파일은 Windows 드라이버 키트에 게시되고 USBMon Bidi 확장 파일은 INFGate WHCK 테스트 중에 자동으로 스키마 유효성을 검사합니다. Bidi 확장 스키마를 개발하고 USB 버스로 작업하는 경우 다음 정보를 적어 두는 것이 중요합니다.

  • 값은 Get, Set 또는 GetSet의 accessType을 지정할 수 있습니다. 이는 Bidi Get 또는 Set 작업 유형에서 설명된 스키마 요소가 지원되는 위치를 나타냅니다.

  • 값은 queryKey를 지정할 수 있습니다. 디바이스에서 데이터를 가져오는 데 사용되는 물리적 작업을 나타내는 데 사용해야 합니다. 동일한 queryKey의 모든 속성은 하나의 USB 읽기/쓰기 작업에서 검색할 수 있어야 합니다.

  • Bidi API 호출에서 요청된 경우 Bidi 값은 즉시 폴링됩니다. refreshInterval 값은 디바이스에서 특정 Bidi 스키마 값에 대한 업데이트를 폴링할 시기를 나타내는 초기 값입니다. 각 폴링 후에는 폴링을 중지할 때까지 refreshInterval이 증가합니다. 다음 수식은 refreshInterval이 증가되는 방법을 보여줍니다.

    currentRefreshInterval = refreshInterval * (3 * numPolls);
    

USBMon 및 USB Bidi 확장 파일 상호 작용

각 새 USB 포트가 만들어지거나 열리면 USBMon은 연결된 디바이스와 연결된 드라이버에 새 Bidi 확장 파일 및 Bidi 확장 JavaScriptfile이 포함되어 있는지 확인합니다. USBMon은 v4 드라이버 매니페스트 또는 드라이버 INI 파일을 검색하고 파일의 이름을 검색합니다. USBMon이 관련 파일을 찾은 경우 이를 사용하여 이 디바이스에서 지원하는 확장된 Bidi 스키마 값 목록을 확인한 다음 디바이스와 통신하여 해당 값을 쿼리합니다. 이 시점에서 USBMon은 기존 인쇄 스풀러 API를 통해 IHV 지정 Bidi 스키마 작업을 지원합니다.

GitHub의 Windows 드라이버 샘플

USBMon Bidi XML 파일 샘플 - USBMon Bidi 확장 XML 파일의 샘플을 제공합니다. 표준 Bidi 스키마 속성 DeviceInfo, 구성 및 메모리를 사용하며 몇 가지 사용자 지정 확장도 정의합니다.

그리고 Bidi 확장 파일에 대한 자세한 내용은 양방향 통신 스키마를 참조하세요.

USBMon Bidi JavaScript 파일 샘플입니다. 이 샘플에는 USBMon Bidi Extender JavaScript 파일이 포함되어 있습니다. Bidi SET 및 GET 작업을 지원하는 방법과 프린터가 인쇄되는 동안 이벤트를 수신 대기하는 방법을 보여 줍니다.

디버깅

다음 레지스트리 키를 만들어 대화형 디버깅을 사용하도록 설정할 수 있습니다. USB Bidi JavaScript의 경우 디버깅을 사용하도록 설정하기 전에 인쇄 스풀러를 다시 시작해야 합니다.

키 이름: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print

값 이름: EnableJavaScriptDebugging

형식: DWORD

값: 1

이전 섹션에 표시된 레지스트리 키를 만들고 호스팅 프로세스를 다시 시작한 후에는 다음과 같이 스크립트를 디버그할 수 있습니다.

  1. 호스팅 프로세스에 디버거를 연결합니다. USB Bidi JavaScript의 경우 spoolsv.exe.

  2. 디버깅 모드를 스크립팅하도록 디버거를 설정합니다.

  3. 다음 번에 스크립트를 실행할 때 모두 중단(Ctrl+ Alt + 나누기)을 선택하여 프로세스를 중단합니다.

  4. 시나리오를 실행하여 문제를 재현합니다.

  5. 디버거가 JavaScript 함수에 침입하면 필요한 중단점을 설정하고 코드를 단계별로 실행합니다.

양방향 통신 스키마

IPrinterBidiSchemaElement

IPrinterScriptContext

IPrinterScriptableSequentialStream

JavaScript API 참조

USB 인쇄

V4 프린터 드라이버 연결