bRequest: FTGETE2READ wIndex: Address of word to read Data: Will return a word of data from E2Address bRequest: FTRESET wValue: Ctl Val wIndex: Port The Reset SIO command has this effect: Sets flow control set to'none' Event char = 0 Event trigger = disabled Purge RX buffer Purge TX buffer Clear DTR Clear RTS baud and data format not reset The Purge RX and TX buffer commands affect nothing except the buffers BmRequestType: SET bRequest: FTSETBaudRate wValue: BaudDivisor value - see below wIndex: Port The BaudDivisor values are calculated as follows: - BaseClock is either 12000000 or 48000000 depending on the device. FIXME: I wish I knew how to detect old chips to select proper base clock! - BaudDivisor is a fixed point number encoded in a funny way. (--WRONG WAY OF THINKING--) BaudDivisor is a fixed point number encoded with following bit weighs: (-2)(-1)(13..0). It is a radical with a denominator of 4, so values end with 0.0 (00...), 0.25 (10...), 0.5 (01...), and 0.75 (11...). (--THE REALITY--) The both-bits-set has quite different meaning from 0.75 - the chip designers have decided it to mean 0.125 instead of 0.75. This info looked up in FT application note"FT8U232 DEVICES Data Rates and Flow Control Consideration for USB to RS232". - BaudDivisor = (BaseClock / 16) / BaudRate, where the (=) operation should automagically re-encode the resulting value to take fractions into consideration. As all values are integers, some bit twiddling is in order: BaudDivisor = (BaseClock / 16 / BaudRate) | (((BaseClock / 2 / BaudRate) & 4)? 0x4000 // 0.5 : ((BaseClock / 2 / BaudRate) & 2)? 0x8000 // 0.25 : ((BaseClock / 2 / BaudRate) & 1)? 0xc000 // 0.125 : 0) For the FT232BM, a 17th divisor bit was introduced to encode the multiples of 0.125 missing from the FT8U232AM. Bits 16 to 14 are coded as follows (the first four codes are the same as for the FT8U232AM, where bit 16 is always 0): 000 - add.000 to divisor 001 - add.500 to divisor 010 - add.250 to divisor 011 - add.125 to divisor 100 - add.375 to divisor 101 - add.625 to divisor 110 - add.750 to divisor 111 - add.875 to divisor Bits 15 to 0 of the 17-bit divisor are placed in the request value. Bit 16 is placed in bit 0 of the request index. Note that there are a couple of special cases to support the highest baud rates. If the calculated divisor value is 1, this needs to be replaced with 0. Additionally for the FT232BM, if the calculated divisor value is 0x4001 (1.5), this needs to be replaced with 0x0001 (1) (but this divisor value is not supported by the FT8U232AM). bRequest: FTSETDATA wValue: Data characteristics (see below) wIndex: Port Data characteristics B0..7 Number of data bits B8..10 Parity 0 = None 1 = Odd 2 = Even 3 = Mark 4 = Space B11..13 Stop Bits 0 = 1 1 = 1.5 2 = 2 B14 1 = TX ON (break) 0 = TX OFF (normal state) B15 Reserved bRequest: FTSETMODEMCTRL wValue: ControlValue (see below) wIndex: Port NOTE: If the device is in RTS/CTS flow control, the RTS set by this command will be IGNORED without an error being returned Also - you can not set DTR and RTS with one control message ControlValue B0 DTR state 0 = reset 1 = set B1 RTS state 0 = reset 1 = set B2..7 Reserved B8 DTR state enable 0 = ignore 1 = use DTR state B9 RTS state enable 0 = ignore 1 = use RTS state B10..15 Reserved bRequest: FTSETFLOWCTRL wValue: Xoff/Xon wIndex: Protocol/Port - hIndex is protocl / lIndex is port hIndex protocol is: B0 Output handshaking using RTS/CTS 0 = disabled 1 = enabled B1 Output handshaking using DTR/DSR 0 = disabled 1 = enabled B2 Xon/Xoff handshaking 0 = disabled 1 = enabled A value of zero in the hIndex field disables handshaking If Xon/Xoff handshaking is specified, the hValue field should contain the XOFF character and the lValue field contains the XON character. bRequest: FTGETLATENCYTIMER wIndex: Port wLength: 0 Data: latency (on return) bRequest: FTSETLATENCYTIMER wValue: Latency (milliseconds) wIndex: Port wValue: B0..7 Latency timer B8..15 0 Set the timeout interval. The FT collects data from the slave device, transmitting it to the host when either A) 62 bytes are received, or B) the timeout interval has elapsed and the buffer contains at least 1 byte. Setting this value to a small number can dramatically improve performance for applications which send small packets, since the default value is 16ms. BmRequestType: SET bRequest: FTSETEVENTCHAR wValue: EventChar wIndex: Port wValue: B0..7 Event Character B8 Event Character Processing 0 = disabled 1 = enabled B9..15 Reserved Set the special event character for the specified communications port. If the device sees this character it will immediately return the data read so far - rather than wait 40ms or until 62 bytes are read which is what normally happens. BmRequestType: SET bRequest: FTSETERRORCHAR wValue: Error Char wIndex: Port Error Char B0..7 Error Character B8 Error Character Processing 0 = disabled 1 = enabled B9..15 Reserved Set the parity error replacement character for the specified communications port BmRequestType: GET bRequest: FTGETMODEMSTATUS wIndex: Port wLength: 1 Data: Status One byte of data is returned B0..3 0 B4 CTS 0 = inactive 1 = active B5 DSR 0 = inactive 1 = active B6 Ring Indicator (RI) 0 = inactive 1 = active B7 Receive Line Signal Detect (RLSD) 0 = inactive 1 = active