Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Importante
A moderna plataforma de impressão é o meio preferido do Windows para comunicar com as impressoras. Recomendamos que utilize o controlador de classe da caixa de entrada IPP da Microsoft, juntamente com as Aplicações de Suporte de Impressão (PSA), para personalizar a experiência de impressão no Windows 10 e 11 para o desenvolvimento de dispositivos de impressora.
Para obter mais informações, consulte Guia de design do aplicativo de suporte de impressão v1 e v2.
O Windows permite que os fabricantes suportem comunicação bidirecional (Bidi) para dispositivos USB usando uma combinação de um arquivo XML Bidi e um arquivo JavaScript conhecido como extensor Bidi USB.
O extensor USB Bidi permite que as aplicações usem Bidi com USB como mecanismo de transporte. A implementação JavaScript não suporta qualquer controle de fluxo de dispositivo ou qualquer multiplexação de informações de controle com trabalhos de impressão durante a impressão.
Por padrão, as consultas Bidi e as solicitações de status são roteadas pela interface do dispositivo USB usada para impressão. Isso permite a comunicação bidirecional completa para status usando o método getSchemas JavaScript, bem como permite operações de set usando o método setSchema JavaScript. A comunicação bidirecional completa é possível enquanto não há trabalhos de impressão sendo enviados para o dispositivo de impressão.
Durante a impressão, as operações de gravação são bloqueadas pelos dados do trabalho de impressão, de modo que o método getStatus é usado para obter o estado não solicitado do dispositivo, utilizando apenas o canal de leitura. Mas se o dispositivo suporta uma interface USB secundária, então a função de método requestStatus é usada para obter o status de uma impressora enquanto o dispositivo está imprimindo.
No Windows 8.1, o modelo de driver v4 foi estendido para fornecer suporte para dispositivos baseados em host. Além disso, o USBMon foi atualizado para permitir que IHVs usem código JavaScript para obter um melhor controle do caminho de impressão e executar ações baseadas em trabalhos de impressão. A atualização inclui a adição de APIs que fornecem novos pontos de entrada Bidi JavaScript. Essas APIs estão alinhadas com as funções existentes no USBMon.
iniciarTarefaDeImpressão. Esta nova função alinha-se com startDocPort em USBMon. À medida que cada novo trabalho de impressão USB é iniciado numa porta conectada a um dispositivo de impressão Host-Based, o USBMon chamará o JavaScript fornecido pelo IHV para permitir qualquer processamento necessário antes do trabalho. Isso pode incluir definir propriedades globais do trabalho no Job Property Bag, consultar o dispositivo para obter dados de status e configuração atuais ou nada. As tarefas concluídas são completamente dependentes do dispositivo e do IHV.
writePrintData. Esta nova função alinha-se com writePort em USBMon. Quando o USBMon recebe cada chamada de função writePort do spooler durante o ato de impressão, os dados de impressão fornecidos precisam ser enviados para o dispositivo gerido por host através da função JavaScript IHV. Isso permite que o IHV JS decida o que deve ser enviado para o dispositivo neste momento. O IHV pode remover, adicionar ou salvar partes do buffer de dados conforme necessário. Isso permite que o IHV controle completamente quando e o que é enviado para o dispositivo. Isso ajudará a habilitar cenários como o duplex manual, dando ao IHV a chance de guardar (dentro de um dos fluxos persistentes) dados para as páginas pares do trabalho de impressão para processamento, uma vez que todos os dados tenham sido recebidos do spooler. O IHV poderá também usar o objeto printerBidiSchemaResponses para retornar o estado do trabalho de impressão ou do dispositivo durante o processamento do trabalho.
endPrintJob. Esta nova função alinha-se com endDocPort em USBMon. Quando o USBMon recebe a chamada endDocPort para cada trabalho de impressão USB em uma porta conectada a um dispositivo de impressão Host-Based, o USBMon chamará o JavaScript fornecido pelo IHV para permitir que ele faça qualquer processamento pós-trabalho necessário. Isso pode incluir o envio de quaisquer dados retidos para o dispositivo, o retorno de valores do esquema Bidi para iniciar o duplex manual ou qualquer outra coisa que o IHV/dispositivo exija.
O diagrama a seguir fornece uma visão geral da arquitetura de extensão USB Bidi, mostrando o cenário onde o método getStatus é usado para obter status não solicitado do dispositivo através da interface USBPrint.
Para obter mais informações sobre como trabalhar com uma impressora USB, consulte de impressão USB .
Referência da API do extensor USB Bidi
O código JavaScript no extensor USB Bidi utiliza as seguintes funções para comunicar com o dispositivo de impressão:
getSchemas
setSchema
getStatus
requestStatus
iniciarTrabalhoDeImpressão
writePrintData
terminarTrabalhoDeImpressão
Para obter mais informações sobre essas APIs, consulte Referência da API JavaScript.
Esquema XML da extensão USBMon Bidi
O arquivo USBMon Bidi Extension usa a mesma estrutura básica que o arquivo SNMP Bidi Extension e o arquivo WSDMon Bidi Extension. O arquivo de esquema XML é publicado no Windows Driver Kit e os arquivos de extensão USBMon Bidi serão automaticamente validados durante o teste INFGate WHCK. Quando se está a desenvolver um esquema de extensão Bidi e a trabalhar com o barramento USB, é importante ter em conta as seguintes informações:
Os valores podem especificar um accessType de "Get", "Set" ou "GetSet". Isso indica onde o elemento de esquema descrito é suportado nos tipos de operação Bidi Get ou set.
Os valores podem especificar uma queryKey. Isso deve ser usado para indicar as operações físicas usadas para obter dados do seu dispositivo. Todas as propriedades sob a mesma queryKey devem ser recuperáveis em uma operação de leitura/gravação USB.
Os valores Bidi são imediatamente pesquisados se forem solicitados numa chamada de API Bidi. O valor refreshInterval é o valor inicial que indica quando interrogar o dispositivo para atualizações de um determinado valor de esquema Bidi. Após cada sondagem, o refreshInterval aumenta até pararmos a sondagem. A fórmula a seguir mostra como refreshInterval é incrementado:
currentRefreshInterval = refreshInterval * (3 * numPolls);
Interação de arquivos de extensão USBMon e USB Bidi
À medida que cada nova porta USB é criada ou aberta, o USBMon determinará se o dispositivo conectado e o driver associado incluem um novo arquivo de extensão Bidi e um arquivo JavaScript de extensão Bidi. USBMon pesquisa o manifesto do driver v4 ou o arquivo INI do driver e recupera o nome dos arquivos. Se o USBMon encontrar os arquivos relevantes, ele os usará para determinar a lista de valores estendidos do esquema Bidi suportados por este dispositivo e, em seguida, se comunicar com o dispositivo para consultar seus valores. Neste ponto, o USBMon suporta as ações do esquema Bidi especificadas pelo IHV por meio de APIs de spooler de impressão existentes.
Exemplos de driver do Windows no GitHub
USBMon Bidi XML File Sample - fornece uma amostra de um arquivo XML USBMon Bidi Extension. Ele usa as propriedades padrão do esquema Bidi DeviceInfo, Configuration e Memory e também define algumas extensões personalizadas.
E para obter mais informações sobre os ficheiros de extensão Bidi, consulte o Esquema de Comunicação Bidirecional .
Exemplo de arquivo JavaScript USBMon Bidi. Este exemplo inclui um arquivo JavaScript USBMon Bidi Extender. Ele demonstra como suportar operações Bidi SET e GET, bem como ouvir eventos enquanto a impressora está imprimindo.
Depuração
A depuração interativa pode ser ativada criando a seguinte chave de registo. Para o JavaScript USB Bidi, o spooler de impressão deve ser reiniciado antes que a depuração seja ativada.
Nome da chave: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print
Nome do valor: EnableJavaScriptDebugging
Tipo: DWORD
Valor: 1
Depois que a chave do Registro mostrada na seção anterior for criada e o processo de hospedagem tiver sido reiniciado, o script poderá ser depurado da seguinte maneira:
Anexe seu depurador ao processo de hospedagem. Para USB Bidi JavaScript, este é spoolsv.exe.
Configure o depurador para o modo de depuração de script.
Selecione Interromper tudo (Ctrl + Alt + Interromper) para interromper o processo na próxima vez que um script for executado.
Execute o cenário para reproduzir o problema.
Uma vez que o depurador entra numa função JavaScript, coloque os pontos de interrupção necessários e percorra o código.
Tópicos relacionados
Esquema de comunicação bidirecional