USB Bidi-förlängare

Viktigt!

Den moderna utskriftsplattformen är Windows bästa sätt att kommunicera med skrivare. Vi rekommenderar att du använder Microsofts IPP-drivrutin för inkorgsklass tillsammans med Print Support Apps (PSA) för att anpassa utskriftsupplevelsen i Windows 10 och 11 för enhetsutveckling av skrivare.

Mer information finns i designguiden för utskriftssupportapp v1 och v2.

Windows gör det möjligt för tillverkare att stödja dubbelriktad kommunikation (Bidi) för USB-enheter med hjälp av en kombination av en Bidi XML-fil och en JavaScript-fil som kallas en USB Bidi-förlängare.

Med USB Bidi-förlängaren kan program använda Bidi med USB som transportmekanism. JavaScript-implementeringen stöder inte någon enhetsflödeskontroll eller någon multiplexering av kontrollinformation med utskriftsjobb under utskrift.

Som standard dirigeras Bidi-frågor och statusbegäranden via USB-enhetsgränssnittet som används för utskrift. Detta möjliggör fullständig dubbelriktad kommunikation för status med hjälp av metoden getSchemas JavaScript, samt att ange åtgärder med hjälp av metoden setSchema JavaScript. Fullständig dubbelriktad kommunikation är möjlig medan inga utskriftsjobb skickas till utskriftsenheten.

Under utskriften blockeras skrivningar av utskriftsjobbets data, så metoden getStatus används för att hämta ospecificerad status från enheten, med endast läsekanalen. Men om enheten stöder ett sekundärt USB-gränssnitt används metoden requestStatus för att hämta status från en skrivare medan enheten skriver ut.

I Windows 8.1 har v4-drivrutinsmodellen utökats för att ge stöd för värdbaserade enheter. Utöver detta har USBMon uppdaterats så att IHV:er kan använda JavaScript-kod för att få bättre kontroll över utskriftssökvägen och utföra utskriftsjobbbaserade åtgärder. Uppdateringen innehåller tillägg av API:er som tillhandahåller nya Bidi JavaScript-startpunkter. Dessa API:er är anpassade till befintliga funktioner i USBMon.

startPrintJob. Den här nya funktionen överensstämmer med startDocPort i USBMon. Eftersom varje nytt USB-utskriftsjobb startas på en port som är ansluten till en Host-Based-utskriftsenhet kommer USBMon att anropa den av IHV tillhandahållna JavaScripten för att utföra alla nödvändiga förjobbsbearbetningar. Detta kan inkludera att ange globala egenskaper för jobb i jobbegenskapsväskan, fråga enheten efter aktuell status och konfigurationsdata eller ingenting. De uppgifter som slutförts är helt beroende av enheten och IHV.

writePrintData. Den här nya funktionen överensstämmer med writePort i USBMon. När USBMon tar emot varje writePort-funktionsanrop från bufferten under utskriften behöver den angivna utskriftsdatan skickas till den värdbaserade enheten via IHV JavaScript-funktionen. Detta gör att IHV JS kan bestämma vad som ska skickas till enheten just nu. IHV kan ta bort, lägga till eller spara delar av databufferten efter behov. På så sätt kan IHV:n helt styra vad som skickas till enheten när. Detta hjälper till att aktivera sådana scenarier som manuell duplex genom att ge IHV en chans att spara (inom en av de beständiga strömmarna) data för jämna sidor i utskriftsjobbet för bearbetning när alla data har tagits emot från spolaren. IHV kan också använda objektet printerBidiSchemaResponses för att returnera utskriftsjobbets status eller enhetsstatus under bearbetningen av jobbet.

endPrintJob. Den här nya funktionen överensstämmer med endDocPort i USBMon. När USBMon tar emot endDocPort-anropet för varje USB-utskriftsjobb på en port som är ansluten till en Host-Based utskriftsenhet anropar USBMon den IHV som tillhandahålls av JavaScript så att den kan utföra alla bearbetningar efter jobbet som krävs. Detta kan inkludera att skicka behållna data till enheten, returnera Bidi-schemavärden för att starta manuell duplex eller något annat som IHV/enheten kräver.

Följande diagram innehåller en översikt över arkitekturen för USB Bidi-tillägget som visar scenariot där metoden getStatus används för att hämta oönskad status från enheten via USBPrint-gränssnittet.

usb bidi extender-arkitektur med getstatus-metoden.

Mer information om hur du arbetar med en USB-skrivare finns i USB-utskrift.

API-referens för USB Bidi-förlängaren

JavaScript-koden i USB Bidi-förlängaren använder följande funktioner för att kommunicera med utskriftsenheten:

  • getSchemas

  • setSchema

  • getStatus

  • requestStatus

  • startaUtskriftsjobb

  • writePrintData

  • avslutaUtskriftsjobb

Mer information om dessa API:er finns i JavaScript API-referens.

XML-schema för USBMon Bidi-tillägg

Filen med USBMon Bidi-tillägget använder samma grundläggande struktur som SNMP Bidi-tilläggsfilen och filen med WSDMon Bidi-tillägget. XML-schemafilen publiceras i Windows Driver Kit- och USBMon Bidi-tilläggsfilerna schemavalideras automatiskt under INFGate WHCK-testet. När du utvecklar ett Bidi-tilläggsschema och arbetar med USB-bussen är det viktigt att notera följande information:

  • Värden kan ange antingen en accessType av Get, Set eller GetSet. Detta anger var det beskrivna schemaelementet stöds i åtgärdstyperna Bidi Get eller Set.

  • Värden kan ange en frågenyckel. Detta bör användas för att ange de fysiska åtgärder som används för att hämta data från enheten. Alla egenskaper under samma queryKey ska kunna hämtas i en USB-läs-/skrivåtgärd.

  • Bidi-värden avsöks omedelbart om de begärs i ett Bidi API-anrop. RefreshInterval-värdet är det initiala värdet som anger när enheten ska avsökas efter uppdateringar av ett visst Bidi-schemavärde. Efter varje avsökning ökar refreshInterval tills vi stoppar avsökningen. Följande formel visar hur refreshInterval ökas:

    currentRefreshInterval = refreshInterval * (3 * numPolls);
    

UsbMon- och USB Bidi-tilläggsfilinteraktion

När varje ny USB-port skapas eller öppnas avgör USBMon om den anslutna enheten och den associerade drivrutinen innehåller en ny Bidi-tilläggsfil och en JavaScriptfile för Bidi-tillägget. USBMon söker i V4-drivrutinsmanifestet eller drivrutins-INI-filen och hämtar namnet på filerna. Om USBMon hittar relevanta filer använder den dem för att fastställa listan över utökade Bidi-schemavärden som stöds av den här enheten och kommunicerar sedan med enheten för att fråga efter deras värden. I det här läget stöder USBMon de IHV-angivna Bidi-schemaåtgärderna via befintliga API:er för utskriftspooler.

Windows-drivrutinsexempel på GitHub

XML-filexempel för USBMon Bidi – det här är ett exempel på en XML-fil för USBMon Bidi-tillägget. Den använder standardegenskaperna för Bidi-schema deviceinfo, konfiguration och minne och definierar även några anpassade tillägg.

Mer information om Bidi-tilläggsfiler finns i Dubbelriktat kommunikationsschema.

USBMon Bidi JavaScript-filexempel. Det här exemplet innehåller en JAVAScript-fil för USBMon Bidi Extender. Den visar hur du stöder Bidi SET- och GET-åtgärder samt hur du lyssnar efter händelser medan skrivaren skriver ut.

Felsökning

Interaktiv felsökning kan aktiveras genom att skapa följande registernyckel. För USB Bidi JavaScript måste utskriftshanteraren startas om innan felsökning aktiveras.

nyckelnamn: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print

värdenamn: EnableJavaScriptDebugging

typ: DWORD

värde: 1

När registernyckeln som visas i föregående avsnitt har skapats och värdprocessen har startats om kan skriptet felsökas på följande sätt:

  1. Koppla felsökningsprogrammet till värdprocessen. För USB Bidi JavaScript är detta spoolsv.exe.

  2. Ställ in felsökaren på skriptfelsökningsläge.

  3. Välj Bryt alla (Ctrl + Alt + Break) för att bryta in i processen nästa gång ett skript körs.

  4. Kör scenariot för att återskapa problemet.

  5. När felsökningsprogrammet har brutit sig in i en JavaScript-funktion anger du eventuella nödvändiga brytpunkter och går igenom koden.

Dubbelriktad kommunikationsschema

IPrinterBidiSchemaElement

IPrinterScriptContext

IPrinterScriptableSequentialStream

Api-referens för JavaScript

USB-utskrift

V4-skrivardrivrutinsanslutning