summaryrefslogtreecommitdiff
path: root/docs/reference/class/printer.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/reference/class/printer.rst')
-rw-r--r--docs/reference/class/printer.rst91
1 files changed, 91 insertions, 0 deletions
diff --git a/docs/reference/class/printer.rst b/docs/reference/class/printer.rst
new file mode 100644
index 000000000..d3f20dbe3
--- /dev/null
+++ b/docs/reference/class/printer.rst
@@ -0,0 +1,91 @@
+*******
+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.