diff --git a/drivers/usb/usbftdi/ftdi.inc b/drivers/usb/usbftdi/ftdi.inc new file mode 100644 index 0000000000..90ac04eed3 --- /dev/null +++ b/drivers/usb/usbftdi/ftdi.inc @@ -0,0 +1,180 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ;; +;; Copyright (C) KolibriOS team 2004-2014. All rights reserved. ;; +;; Distributed under terms of the GNU General Public License ;; +;; ;; +;; Include file for apps which want to use FTDI device ;; +;; ;; +;; GNU GENERAL PUBLIC LICENSE ;; +;; Version 2, June 1991 ;; +;; ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;Bitmode constants +BITMODE_RESET = 0x00 ;Switch off bitbang mode, back to regular serial FIFO +BITMODE_BITBANG= 0x01 ;Classical asynchronous bitbang mode, introduced with B-type chips */ +BITMODE_MPSSE = 0x02 ;MPSSE mode, available on 2232x chips */ +BITMODE_SYNCBB = 0x04 ;Synchronous bitbang mode, available on 2232x and R-type chips */ +BITMODE_MCU = 0x08 ;MCU Host Bus Emulation mode, available on 2232x chips */ + ;CPU-style fifo mode gets set via EEPROM (cuurenntly EEPROM burn not supported in KolibriOS) +BITMODE_OPTO = 0x10 ;Fast Opto-Isolated Serial Interface Mode, available on 2232x chips */ +BITMODE_CBUS = 0x20 ;Bitbang on CBUS pins of R-type chips, configure in EEPROM before */ +BITMODE_SYNCFF = 0x40 ;Single Channel Synchronous FIFO mode, available on 2232H chips */ +BITMODE_FT1284 = 0x80 ;FT1284 mode, available on 232H chips + +;Line property constants + ;parity +NONE = 0 shl 8 +ODD = 1 shl 8 +EVEN = 2 shl 8 +MARK = 3 shl 8 +SPACE = 4 shl 8 + ;stop bits +STOP_BIT_1 = 0 shl 11 +STOP_BIT_15 = 1 shl 11 +STOP_BIT_2 = 2 shl 11 + ;break type +BREAK_OFF = 0 shl 14 +BREAK_OFF = 1 shl 14 + ;number of bits has to be at lower byte + +;Flow control +SIO_DISABLE_FLOW_CTRL = 0x0 +SIO_RTS_CTS_HS = (0x1 shl 8) +SIO_DTR_DSR_HS = (0x2 shl 8) +SIO_XON_XOFF_HS= (0x4 shl 8) + +;Chip types +TYPE_AM = 0 +TYPE_BM = 1 +TYPE_2232C = 2 +TYPE_R = 3 +TYPE_2232H = 4 +TYPE_4232H = 5 +TYPE_232H = 6 +TYPE_230X = 7 + +;IO codes +;Get list of detected ftdi chips +FTDI_GET_LIST = 1 +;Acquire lock on ftdi device +;[input+8] - none +;[output] - PID device is locked by +FTDI_LOCK = 2 +;Unlock ftdi device +;[input+8] - none +;[output] - 0 if unclock success, overwise PID device is locked by +FTDI_UNLOCK = 3 +;[output] - chunksize +FTDI_GET_WRITE_CHUNKSIZE = 4 +;[output] - chunksize +FTDI_GET_READ_CHUNKSIZE = 5 +;[input+8] - chunksize +FTDI_SET_WRITE_CHUNKSIZE = 6 +;[input+8] - chunksize +FTDI_SET_READ_CHUNKSIZE = 7 +;Writes data in chunks to the chip +;[input+8] - size of data, [input+12] - beginning of data +FTDI_WRITE_DATA = 8 +;Reads data in chunks from the chip +;[input+8] - size of data, [output] - red data +FTDI_READ_DATA = 9 +;Sets the chip baud rate +;[input+8] - baudrate +FTDI_SET_BAUDRATE = 10 +;Enable/disable bitbang modes +;[input+8] - 0xnnnnXXYY, where XX-bitmask, YY-bitmode +FTDI_SET_BITMODE = 11 +;Set rts line high +;[input+8] - none +FTDI_SET_RTS_HIGH = 12 +;Set rts line low +;[input+8] - none +FTDI_SET_RTS_LOW = 13 +;Set dtr line high +;[input+8] - none +FTDI_SET_DTR_HIGH = 14 +;Set dtr line low +;[input+8] - none +FTDI_SET_DTR_LOW = 15 +;Resets the ftdi device +;[input+8] - none +FTDI_USB_RESET = 16 +;Set flowcontrol for ftdi chip +;dword[input+8] - one of flow control constants +FTDI_SET_FLOW_CONTROL = 17 +;Set the special event character +;[input+8] - 0xnnnnXXYY, where XX-1/0(enable/disable), YY-event char +FTDI_SET_EVENT_CHAR = 18 +;Set error character +;[input+8] - 0xnnnnXXYY, where XX-1/0(enable/disable), YY-error char +FTDI_SET_ERROR_CHAR = 19 +;FTDI chip keeps data in the internal buffer for a specific +;amount of time if the buffer is not full yet to decrease +;load on the usb bus +;[input+8] - 0xnnnnXXXX, where XX-latency +FTDI_SET_LATENCY_TIMER = 20 +;Get latency timer +;[output] - latency +FTDI_GET_LATENCY_TIMER = 21 +;Directly read pin state, circumventing the read buffer. Useful for bitbang mode +;[output] - pins' values +FTDI_READ_PINS = 22 +;This function allows the retrieve the two status bytes of the device. +;The device sends these bytes also as a header for each read access +;where they are discarded by ftdi_read_data(). The chip generates +;the two stripped status bytes in the absence of data every 40 ms +; +; Layout of the first byte: +; - B0..B3 - must be 0 +; - B4 Clear to send (CTS) + ; 0 = inactive + ; 1 = active +; - B5 Data set ready (DTS) + ; 0 = inactive + ; 1 = active +; - B6 Ring indicator (RI) + ; 0 = inactive + ; 1 = active +; - B7 Receive line signal detect (RLSD) + ; 0 = inactive + ; 1 = active + +; Layout of the second byte: +; - B0 Data ready (DR) +; - B1 Overrun error (OE) +; - B2 Parity error (PE) +; - B3 Framing error (FE) +; - B4 Break interrupt (BI) +; - B5 Transmitter holding register (THRE) +; - B6 Transmitter empty (TEMT) +; - B7 Error in RCVR FIFO +;[output] - poll modem status +FTDI_POLL_MODEM_STATUS = 23 +;Set (RS232) line characteristics +;dword[input+8] - line property constants combination +FTDI_SET_LINE_PROPERTY = 24 +;Clears the read buffer on the chip +;[input+8] - none +FTDI_PURGE_RX_BUFFER = 25 +;Clears the write buffer on the chip +;[input+8] - none +FTDI_PURGE_RX_BUFFER = 26 + +;Structures + ;list layout from FTDI_GET_LIST +struct dev_list +size dd ? +nodes rd size*sizeof.node +ends + +struct node +islocked dd ? ; Will be 'LCKD', if dev is already locked; or 'NLKD', if dev is free +chip_type dd ? ; FTDI chip type (see Chip types constants) +dev_handle dd ? ; Device handle, value the same as in in_buf_map.dev_handle +ends + + ;input buffer map for requests above FTDI_GET_LIST +struc in_buf_map +pid dd ? ; Should be PID of application using this file +dev_handle dd ? ; Should be value acquired from one of dev_list's nodes