prólogo
Una aplicación integrada típica está bastante limitada en la forma en que presenta los datos al usuario. La cantidad de datos que se pueden mostrar en una pantalla LCD o gráfica es limitada, pero grandes cantidades de datos son más problemáticas. Si bien los datos a menudo se transfieren a través de interfaces eléctricas o medios de almacenamiento electrónico, como unidades de memoria USB, para un examen más detallado, a veces es útil tener una instantánea rápida de los datos. La clase de impresora USB utilizada por uno de los microcontroladores y periféricos USB OTG de Microchip permite que las aplicaciones integradas utilicen una impresora USB para proporcionar una copia impresa para una revisión rápida y un posible archivo.
Las impresoras de punto de venta (POS), a veces llamadas impresoras de recibos o impresoras de etiquetas, también son muy útiles en esta área. Su pequeño tamaño, junto con su funcionamiento a batería, a menudo móvil, permite su uso en lugares que no son aptos para impresoras de hojas completas, o incluso montado en productos finales. También ofrece beneficios adicionales, como la generación sencilla de códigos de barras. Esta implementación de la clase de impresora USB también proporciona funcionalidad para utilizar estas impresoras.
En este documento, el término “impresora de hoja completa” se usa para las impresoras que normalmente imprimen en papel estándar de 8,5″ x 11″, y el término “impresora POS” se usa para las impresoras POS.
Clase de impresora USB
La especificación “Definición de clase de dispositivo USB para dispositivos de impresión”, disponible en el Foro de implementadores de USB, define la configuración, la interfaz y los descriptores de punto final, así como el protocolo de comunicación utilizado para comunicarse con las impresoras USB. Los comandos reales utilizados para controlar la impresora no están definidos.
La clase de impresora USB, como todas las demás clases de USB, utiliza el punto final 0 para controlar las transferencias hacia y desde el host. Además, la clase de impresora utiliza un punto final Bulk OUT para enviar datos a la impresora y posiblemente un punto final Bulk IN para el estado y otros datos recibidos de la impresora.
Los especificadores de protocolo, subclase y clase de dispositivo de impresión no se incluyen en los campos bDeviceClass, bDeviceSubClass y bDeviceProtocol del descriptor de dispositivo. En su lugar, todos estos campos se establecen en 0x00 y los especificadores se especifican en los campos bInterfaceClass (0x07), bInterfaceSubClass (0x01) y bInterfaceProtocol del descriptor de interfaz. La impresora admite tres posibles protocolos de interfaz. Solo uno está habilitado en un momento dado.
- Interfaz unidireccional (0x01): esta interfaz solo admite el envío de datos a la impresora a través del punto final Bulk OUT.
- Interfaz bidireccional (0x02): esta interfaz admite el envío de datos a la impresora a través del punto final Bulk OUT y la recepción del estado y otra información de la impresora a través del punto final Bulk IN.
- Interfaz bidireccional compatible con IEEE 1284.4 (0x03): esta interfaz admite el envío de datos a la impresora a través del punto final Bulk OUT y la recepción del estado y otra información de la impresora a través del punto final Bulk IN. También especifica que los datos se envían y reciben desde el dispositivo utilizando el protocolo 1284.4.
Algunos dispositivos de impresión indican soporte de controlador personalizado en el descriptor de interfaz en lugar de soporte de clase de impresora, pero usan el mismo método básico de comunicación Bulk OUT. La implementación del controlador del cliente de impresora USB permite que las aplicaciones aprovechen la misma interfaz, con las limitaciones menores que se describen a continuación.
Arquitectura de la aplicación
La arquitectura de una aplicación que utiliza el controlador de cliente de impresora de host integrado USB de Microchip se ilustra en la Figura 1.
Seleccione el idioma de la impresora
Una aplicación puede admitir uno o más lenguajes de impresora. Si su aplicación se dirige a una sola impresora, solo puede especificar el lenguaje de impresora utilizado por esa impresora. Si es probable que utilice varias impresoras, es posible que desee incluir varios lenguajes de impresora en su aplicación. Su aplicación debe incluir al menos un lenguaje de impresora.
Un controlador de cliente de impresora primero comprueba si se ha seleccionado explícitamente un lenguaje de impresora para la impresora adjunta. Si la impresora no indica compatibilidad con la clase de impresora en su descriptor de interfaz, el lenguaje de la impresora debe especificarse explícitamente. De lo contrario, un controlador de cliente de impresora puede seleccionar automáticamente el idioma de la impresora para una impresora conectada según el idioma de la impresora incluido en la aplicación y el soporte del idioma de la impresora expuesto por la impresora en su cadena de ID de dispositivo. En este caso, la selección del idioma real es transparente para la aplicación. Si la impresora admite varios idiomas, la aplicación puede optar por especificar qué idioma usar para garantizar un comportamiento uniforme.