lufa-ftdi/README.md
2012-10-01 02:13:34 -04:00

56 lines
1.8 KiB
Markdown

FTDI serial chip emulation for LUFA
-----------------------------------
Written by Jim Paris <jim@jtan.com>
Description
-----------
This project is an example of FTDI usb-to-serial chip emulation for
LUFA. It is fully interrupt-driven. It acts as a FT232RL with id
0403:6001. On Linux, the corresponding host driver is `ftdi_sio`.
Note that it's probably against the EULA of the proprietary FTDI
Windows driver to use it with non-FTDI hardware. And using someone
else's VID will prevent you from passing USB-IF compliance tests.
Building
--------
git submodule init
git submodule update
make
Configuration
-------------
Basic configuration of the FTDI emulation is in `ftdi.h`. Read and
write buffers are maintained in a FIFO queue of length
`FTDI_TX_QUEUE_LEN` and `FTDI_RX_QUEUE_LEN`. The latter must be
greater than the endpoint size. For a smaller memory footprint,
`FTDI_TXRX_EPSIZE` can be reduced (try 16).
Initialization
--------------
Call `void ftdi_init(int flags)` after the corresponding LUFA
`USB_Init()`. Valid flags are a bitwise OR of the following:
FTDI_NO_STDIO Don't reconfigure libc's stdio
FTDI_STDIO Point stdio routines to ftdi_putchar / ftdi_getchar
FTDI_NONBLOCKING Neither ftdi_putchar nor ftdi_getchar will block.
FTDI_BLOCKING_IN ftdi_getchar will block if no data is available
FTDI_BLOCKING_OUT ftdi_putchar will block is no room in TX buffer
FTDI_BLOCKING Both ftdi_getchar and ftdi_putchar will block
When input is nonblocking, `ftdi_getchar` will return -1 if no data is
available. When output is nonblocking, `ftdi_putchar` will drop data
if no TX buffer space is available. Regardless of blocking status,
if the RX buffer is full, data received from the PC will be dropped.
License
-------
BSD 2-clause, see LICENSE