# FTDI driver.

The FTDI driver is a MODE2 driver capable of both sending and receiving data. It handles devices based on the FTDI chip e. g., as described here. It is based on the libftdi library.

lirc also includes another driver for FTDI devices called ftdix. See this page for a comparison

By default, it searches for an usb device with vendor:product matching 0x0403:0x6001. This can be changed using the device argument which is a comma-separated string of key=value assignments. The available keys are:

- vendor: Numeric idVendor value[0403]
- product: Numeric idVendor value [6001]
- serial: Numeric idSerial value [*]
- input: input pin [1]
- output: output pin [2]
- baud: rx wire speed [9600]
- txbaud: tx wire speed [65536]

The driver has support for listing available devices using e. g., using mode2 -l

There has been a long-standing bug in this driver which effectively has been using wrong timings. As of 0.10-0, this bug is fixed; however, this breaks existing lircd.conf files. Users have the option of using the driver option old-timings (the value does not matter) e. g., `-A old-timings:1`. This option is a transition helper and will be removed in a future release. The proper fix for a broken lircd.conf file is to use one of the following methods:

1. Find a lircd.conf file for your remote in the remotes database. You may need to update your .lircrc file if any of the button names are different.
2. Update the timing parameters in your existing lircd.conf file. This method is not suitable for files with raw_codes definitions. New timings can be obtained from several sources
   - a lircd.conf file for your remote (or one that uses the same protocol) from the remotes database.
   - configure the driver without the old-timings option and use irrecord to record the remote. There is no need to record any buttons, just press enter and finish.
   - use the timing data from the existing lircd.conf file and divide each value by 2.
   Open the existing lircd.conf file and the new timings lircd.conf in a text editor. Find the line 'begin remote', below this there will be lines with some of the following names
   header, three, two, one, zero, ptrail, plead, foot, repeat, pre, post, gap, repeat_gap.
   Not all of these will be present in any particular lircd.conf file. Replace these with the equivalent from the new file. If you are using the divide by 2 method just update the value, some parameters have 2 values, both need to be updated.
3. For lircd.conf files with raw_codes the only way is to configure the driver without the old-timings option and use irrecord to re-record the remote.