******* Printer ******* Role: device only. The Printer class provides bulk OUT data from a host print spooler, optional bulk IN data for a bidirectional printer, and standard device ID, port-status, and soft-reset requests. Configuration ============= Enable ``CFG_TUD_PRINTER`` and define the RX/TX FIFO and endpoint sizes. Add a ``TUD_PRINTER_DESCRIPTOR``; protocol 2 is the bidirectional interface used by the TinyUSB example. .. code-block:: c #define CFG_TUD_PRINTER 1 #define CFG_TUD_PRINTER_RX_BUFSIZE 64 #define CFG_TUD_PRINTER_TX_BUFSIZE 64 #define CFG_TUD_PRINTER_RX_EPSIZE 64 #define CFG_TUD_PRINTER_TX_EPSIZE 64 .. list-table:: :header-rows: 1 :widths: 42 17 41 * - Option - Default - What it controls * - ``CFG_TUD_PRINTER_RX_BUFSIZE`` / ``CFG_TUD_PRINTER_TX_BUFSIZE`` - Required when enabled - Software FIFO capacity per printer interface. TX is still allocated even if the application normally only receives print data. * - ``CFG_TUD_PRINTER_RX_EPSIZE`` / ``CFG_TUD_PRINTER_TX_EPSIZE`` - Device bulk maximum - Endpoint transfer buffer and descriptor packet size in each direction. Data received from the host is available through ``tud_printer_read_available()`` and ``tud_printer_read()``. Send status or bidirectional data with ``tud_printer_write()`` and flush when the response should leave promptly. Use the ``tud_printer_n_*`` forms for multiple interfaces. .. list-table:: :header-rows: 1 :widths: 42 58 * - Data API or callback - What it does * - ``tud_printer_n_read_available()`` / ``tud_printer_n_read()`` - Reports and removes bytes sent by the print spooler. * - ``tud_printer_n_write_available()`` / ``tud_printer_n_write()`` - Reports TX room and copies as much bidirectional response data as fits. * - ``tud_printer_n_write_flush()`` - Starts a short TX transfer and returns the number of bytes submitted. * - ``tud_printer_n_read_flush()`` / ``tud_printer_n_write_clear()`` - Discards pending receive or transmit FIFO data, for example on soft reset. * - ``tud_printer_rx_cb()`` / ``tud_printer_tx_complete_cb()`` - Announces new input or newly available TX capacity. Control callbacks ================= ``tud_printer_get_device_id_cb()`` must return an IEEE 1284 device ID. Its first two bytes are the big-endian total length, including those two bytes, and the buffer must remain valid through transfer completion. A typical text body is ``MFG:Vendor;MDL:Model;CMD:PCL;CLS:PRINTER;``. Return current online, error, and paper state from ``tud_printer_get_port_status_cb()`` using ``tusb_printer_port_status_t``. In ``tud_printer_soft_reset_cb()``, cancel the current print job and reset the class-facing parser without resetting unrelated parts of a composite device. ``tud_printer_request_complete_cb()`` marks the end of the control transfer and is the safe point to reuse request-specific application state, including a dynamically selected device-ID buffer. See :doc:`../../examples/device/printer_to_cdc` for bidirectional data and all three class requests. Specification used: *USB Device Class Definition for Printing Devices*, Version 1.1.