Mercurial > code > home > repos > light9
comparison dmx_usb_module/dmx_usb.h @ 355:4e60444605f6
add dmx_usb_module
author | drewp@bigasterisk.com |
---|---|
date | Wed, 13 Jun 2007 06:01:22 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
354:f3909c2df943 | 355:4e60444605f6 |
---|---|
1 /* | |
2 * Definitions for the FTDI USB Single Port Serial Converter - | |
3 * known as FTDI_SIO (Serial Input/Output application of the chipset) | |
4 * | |
5 * The example I have is known as the USC-1000 which is available from | |
6 * http://www.dse.co.nz - cat no XH4214 It looks similar to this: | |
7 * http://www.dansdata.com/usbser.htm but I can't be sure There are other | |
8 * USC-1000s which don't look like my device though so beware! | |
9 * | |
10 * The device is based on the FTDI FT8U100AX chip. It has a DB25 on one side, | |
11 * USB on the other. | |
12 * | |
13 * Thanx to FTDI (http://www.ftdi.co.uk) for so kindly providing details | |
14 * of the protocol required to talk to the device and ongoing assistence | |
15 * during development. | |
16 * | |
17 * Bill Ryder - bryder@sgi.com formerly of Silicon Graphics, Inc.- wrote the | |
18 * FTDI_SIO implementation. | |
19 * | |
20 * Philipp Gühring - pg@futureware.at - added the Device ID of the USB relais | |
21 * from Rudolf Gugler | |
22 * | |
23 * $Id: dmx_usb.h 40 2004-09-11 11:16:39Z erwin $ | |
24 */ | |
25 | |
26 #define FTDI_VID 0x0403 /* Vendor Id */ | |
27 #define FTDI_SIO_PID 0x8372 /* Product Id SIO application of 8U100AX */ | |
28 #define FTDI_8U232AM_PID 0x6001 /* Similar device to SIO above */ | |
29 #define FTDI_8U232AM_ALT_PID 0x6006 /* FTDI's alternate PID for above */ | |
30 #define FTDI_RELAIS_PID 0xFA10 /* Relais device from Rudolf Gugler */ | |
31 #define FTDI_NF_RIC_VID 0x0DCD /* Vendor Id */ | |
32 #define FTDI_NF_RIC_PID 0x0001 /* Product Id */ | |
33 | |
34 /* www.irtrans.de device */ | |
35 #define FTDI_IRTRANS_PID 0xFC60 /* Product Id */ | |
36 | |
37 /* www.crystalfontz.com devices - thanx for providing free devices for evaluation ! */ | |
38 /* they use the ftdi chipset for the USB interface and the vendor id is the same */ | |
39 #define FTDI_XF_632_PID 0xFC08 /* 632: 16x2 Character Display */ | |
40 #define FTDI_XF_634_PID 0xFC09 /* 634: 20x4 Character Display */ | |
41 #define FTDI_XF_547_PID 0xFC0A /* 547: Two line Display */ | |
42 #define FTDI_XF_633_PID 0xFC0B /* 633: 16x2 Character Display with Keys */ | |
43 #define FTDI_XF_631_PID 0xFC0C /* 631: 20x2 Character Display */ | |
44 #define FTDI_XF_635_PID 0xFC0D /* 635: 20x4 Character Display */ | |
45 #define FTDI_XF_640_PID 0xFC0E /* 640: Two line Display */ | |
46 #define FTDI_XF_642_PID 0xFC0F /* 642: Two line Display */ | |
47 | |
48 /* Video Networks Limited / Homechoice in the UK use an ftdi-based device for their 1Mb */ | |
49 /* broadband internet service. The following PID is exhibited by the usb device supplied */ | |
50 /* (the VID is the standard ftdi vid (FTDI_VID) */ | |
51 #define FTDI_VNHCPCUSB_D_PID 0xfe38 /* Product Id */ | |
52 | |
53 /* | |
54 * The following are the values for the Matrix Orbital LCD displays, | |
55 * which are the FT232BM ( similar to the 8U232AM ) | |
56 */ | |
57 #define FTDI_MTXORB_0_PID 0xFA00 /* Matrix Orbital Product Id */ | |
58 #define FTDI_MTXORB_1_PID 0xFA01 /* Matrix Orbital Product Id */ | |
59 #define FTDI_MTXORB_2_PID 0xFA02 /* Matrix Orbital Product Id */ | |
60 #define FTDI_MTXORB_3_PID 0xFA03 /* Matrix Orbital Product Id */ | |
61 #define FTDI_MTXORB_4_PID 0xFA04 /* Matrix Orbital Product Id */ | |
62 #define FTDI_MTXORB_5_PID 0xFA05 /* Matrix Orbital Product Id */ | |
63 #define FTDI_MTXORB_6_PID 0xFA06 /* Matrix Orbital Product Id */ | |
64 | |
65 /* | |
66 * The following are the values for the Perle Systems | |
67 * UltraPort USB serial converters | |
68 */ | |
69 #define FTDI_PERLE_ULTRAPORT_PID 0xF0C0 /* Perle UltraPort Product Id */ | |
70 | |
71 /* | |
72 * The following are the values for the Sealevel SeaLINK+ adapters. | |
73 * (Original list sent by Tuan Hoang. Ian Abbott renamed the macros and | |
74 * removed some PIDs that don't seem to match any existing products.) | |
75 */ | |
76 #define SEALEVEL_VID 0x0c52 /* Sealevel Vendor ID */ | |
77 #define SEALEVEL_2101_PID 0x2101 /* SeaLINK+232 (2101/2105) */ | |
78 #define SEALEVEL_2102_PID 0x2102 /* SeaLINK+485 (2102) */ | |
79 #define SEALEVEL_2103_PID 0x2103 /* SeaLINK+232I (2103) */ | |
80 #define SEALEVEL_2104_PID 0x2104 /* SeaLINK+485I (2104) */ | |
81 #define SEALEVEL_2201_1_PID 0x2211 /* SeaPORT+2/232 (2201) Port 1 */ | |
82 #define SEALEVEL_2201_2_PID 0x2221 /* SeaPORT+2/232 (2201) Port 2 */ | |
83 #define SEALEVEL_2202_1_PID 0x2212 /* SeaPORT+2/485 (2202) Port 1 */ | |
84 #define SEALEVEL_2202_2_PID 0x2222 /* SeaPORT+2/485 (2202) Port 2 */ | |
85 #define SEALEVEL_2203_1_PID 0x2213 /* SeaPORT+2 (2203) Port 1 */ | |
86 #define SEALEVEL_2203_2_PID 0x2223 /* SeaPORT+2 (2203) Port 2 */ | |
87 #define SEALEVEL_2401_1_PID 0x2411 /* SeaPORT+4/232 (2401) Port 1 */ | |
88 #define SEALEVEL_2401_2_PID 0x2421 /* SeaPORT+4/232 (2401) Port 2 */ | |
89 #define SEALEVEL_2401_3_PID 0x2431 /* SeaPORT+4/232 (2401) Port 3 */ | |
90 #define SEALEVEL_2401_4_PID 0x2441 /* SeaPORT+4/232 (2401) Port 4 */ | |
91 #define SEALEVEL_2402_1_PID 0x2412 /* SeaPORT+4/485 (2402) Port 1 */ | |
92 #define SEALEVEL_2402_2_PID 0x2422 /* SeaPORT+4/485 (2402) Port 2 */ | |
93 #define SEALEVEL_2402_3_PID 0x2432 /* SeaPORT+4/485 (2402) Port 3 */ | |
94 #define SEALEVEL_2402_4_PID 0x2442 /* SeaPORT+4/485 (2402) Port 4 */ | |
95 #define SEALEVEL_2403_1_PID 0x2413 /* SeaPORT+4 (2403) Port 1 */ | |
96 #define SEALEVEL_2403_2_PID 0x2423 /* SeaPORT+4 (2403) Port 2 */ | |
97 #define SEALEVEL_2403_3_PID 0x2433 /* SeaPORT+4 (2403) Port 3 */ | |
98 #define SEALEVEL_2403_4_PID 0x2443 /* SeaPORT+4 (2403) Port 4 */ | |
99 #define SEALEVEL_2801_1_PID 0X2811 /* SeaLINK+8/232 (2801) Port 1 */ | |
100 #define SEALEVEL_2801_2_PID 0X2821 /* SeaLINK+8/232 (2801) Port 2 */ | |
101 #define SEALEVEL_2801_3_PID 0X2831 /* SeaLINK+8/232 (2801) Port 3 */ | |
102 #define SEALEVEL_2801_4_PID 0X2841 /* SeaLINK+8/232 (2801) Port 4 */ | |
103 #define SEALEVEL_2801_5_PID 0X2851 /* SeaLINK+8/232 (2801) Port 5 */ | |
104 #define SEALEVEL_2801_6_PID 0X2861 /* SeaLINK+8/232 (2801) Port 6 */ | |
105 #define SEALEVEL_2801_7_PID 0X2871 /* SeaLINK+8/232 (2801) Port 7 */ | |
106 #define SEALEVEL_2801_8_PID 0X2881 /* SeaLINK+8/232 (2801) Port 8 */ | |
107 #define SEALEVEL_2802_1_PID 0X2812 /* SeaLINK+8/485 (2802) Port 1 */ | |
108 #define SEALEVEL_2802_2_PID 0X2822 /* SeaLINK+8/485 (2802) Port 2 */ | |
109 #define SEALEVEL_2802_3_PID 0X2832 /* SeaLINK+8/485 (2802) Port 3 */ | |
110 #define SEALEVEL_2802_4_PID 0X2842 /* SeaLINK+8/485 (2802) Port 4 */ | |
111 #define SEALEVEL_2802_5_PID 0X2852 /* SeaLINK+8/485 (2802) Port 5 */ | |
112 #define SEALEVEL_2802_6_PID 0X2862 /* SeaLINK+8/485 (2802) Port 6 */ | |
113 #define SEALEVEL_2802_7_PID 0X2872 /* SeaLINK+8/485 (2802) Port 7 */ | |
114 #define SEALEVEL_2802_8_PID 0X2882 /* SeaLINK+8/485 (2802) Port 8 */ | |
115 #define SEALEVEL_2803_1_PID 0X2813 /* SeaLINK+8 (2803) Port 1 */ | |
116 #define SEALEVEL_2803_2_PID 0X2823 /* SeaLINK+8 (2803) Port 2 */ | |
117 #define SEALEVEL_2803_3_PID 0X2833 /* SeaLINK+8 (2803) Port 3 */ | |
118 #define SEALEVEL_2803_4_PID 0X2843 /* SeaLINK+8 (2803) Port 4 */ | |
119 #define SEALEVEL_2803_5_PID 0X2853 /* SeaLINK+8 (2803) Port 5 */ | |
120 #define SEALEVEL_2803_6_PID 0X2863 /* SeaLINK+8 (2803) Port 6 */ | |
121 #define SEALEVEL_2803_7_PID 0X2873 /* SeaLINK+8 (2803) Port 7 */ | |
122 #define SEALEVEL_2803_8_PID 0X2883 /* SeaLINK+8 (2803) Port 8 */ | |
123 | |
124 /* | |
125 * DSS-20 Sync Station for Sony Ericsson P800 | |
126 */ | |
127 | |
128 #define FTDI_DSS20_PID 0xFC82 | |
129 | |
130 /* | |
131 * Home Electronics (www.home-electro.com) USB gadgets | |
132 */ | |
133 #define FTDI_HE_TIRA1_PID 0xFA78 /* Tira-1 IR tranceiver */ | |
134 | |
135 /* USB-UIRT - An infrared receiver and transmitter using the 8U232AM chip */ | |
136 /* http://home.earthlink.net/~jrhees/USBUIRT/index.htm */ | |
137 #define FTDI_USB_UIRT_PID 0xF850 /* Product Id */ | |
138 | |
139 /* ELV USB Module UO100 (PID sent by Stefan Frings) */ | |
140 #define FTDI_ELV_UO100_PID 0xFB58 /* Product Id */ | |
141 | |
142 /* | |
143 * Definitions for ID TECH (www.idt-net.com) devices | |
144 */ | |
145 #define IDTECH_VID 0x0ACD /* ID TECH Vendor ID */ | |
146 #define IDTECH_IDT1221U_PID 0x0300 /* IDT1221U USB to RS-232 adapter */ | |
147 | |
148 /* | |
149 * Definitions for Omnidirectional Control Technology, Inc. devices | |
150 */ | |
151 #define OCT_VID 0x0B39 /* OCT vendor ID */ | |
152 /* Note: OCT US101 is also rebadged as Dick Smith Electronics (NZ) XH6381 */ | |
153 #define OCT_US101_PID 0x0421 /* OCT US101 USB to RS-232 */ | |
154 | |
155 /* an infrared receiver for user access control with IR tags */ | |
156 #define FTDI_PIEGROUP_PID 0xF208 /* Product Id */ | |
157 | |
158 /* | |
159 * Protego product ids | |
160 */ | |
161 #define PROTEGO_SPECIAL_1 0xFC70 /* special/unknown device */ | |
162 #define PROTEGO_R2X0 0xFC71 /* R200-USB TRNG unit (R210, R220, and R230) */ | |
163 #define PROTEGO_SPECIAL_3 0xFC72 /* special/unknown device */ | |
164 #define PROTEGO_SPECIAL_4 0xFC73 /* special/unknown device */ | |
165 | |
166 /* | |
167 * Gude Analog- und Digitalsysteme GmbH | |
168 */ | |
169 #define FTDI_GUDEADS_E808_PID 0xE808 | |
170 #define FTDI_GUDEADS_E809_PID 0xE809 | |
171 #define FTDI_GUDEADS_E80A_PID 0xE80A | |
172 #define FTDI_GUDEADS_E80B_PID 0xE80B | |
173 #define FTDI_GUDEADS_E80C_PID 0xE80C | |
174 #define FTDI_GUDEADS_E80D_PID 0xE80D | |
175 #define FTDI_GUDEADS_E80E_PID 0xE80E | |
176 #define FTDI_GUDEADS_E80F_PID 0xE80F | |
177 #define FTDI_GUDEADS_E888_PID 0xE888 /* Expert ISDN Control USB */ | |
178 #define FTDI_GUDEADS_E889_PID 0xE889 /* USB RS-232 OptoBridge */ | |
179 #define FTDI_GUDEADS_E88A_PID 0xE88A | |
180 #define FTDI_GUDEADS_E88B_PID 0xE88B | |
181 #define FTDI_GUDEADS_E88C_PID 0xE88C | |
182 #define FTDI_GUDEADS_E88D_PID 0xE88D | |
183 #define FTDI_GUDEADS_E88E_PID 0xE88E | |
184 #define FTDI_GUDEADS_E88F_PID 0xE88F | |
185 | |
186 /* | |
187 * Linx Technologies product ids | |
188 */ | |
189 #define LINX_SDMUSBQSS_PID 0xF448 /* Linx SDM-USB-QS-S */ | |
190 #define LINX_MASTERDEVEL2_PID 0xF449 /* Linx Master Development 2.0 */ | |
191 #define LINX_FUTURE_0_PID 0xF44A /* Linx future device */ | |
192 #define LINX_FUTURE_1_PID 0xF44B /* Linx future device */ | |
193 #define LINX_FUTURE_2_PID 0xF44C /* Linx future device */ | |
194 #define FTDI_GUDEADS_889_PID 0xe889 /* USB RS323 OptoBridge */ | |
195 /* CCS Inc. ICDU/ICDU40 product ID - the FT232BM is used in an in-circuit-debugger */ | |
196 /* unit for PIC16's/PIC18's */ | |
197 #define FTDI_CCSICDU20_0_PID 0xF9D0 | |
198 #define FTDI_CCSICDU40_1_PID 0xF9D1 | |
199 | |
200 /* Inside Accesso contactless reader (http://www.insidefr.com) */ | |
201 #define INSIDE_ACCESSO 0xFAD0 | |
202 | |
203 /* Commands */ | |
204 #define FTDI_SIO_RESET 0 /* Reset the port */ | |
205 #define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */ | |
206 #define FTDI_SIO_SET_FLOW_CTRL 2 /* Set flow control register */ | |
207 #define FTDI_SIO_SET_BAUD_RATE 3 /* Set baud rate */ | |
208 #define FTDI_SIO_SET_DATA 4 /* Set the data characteristics of the port */ | |
209 #define FTDI_SIO_GET_MODEM_STATUS 5 /* Retrieve current value of modern status register */ | |
210 #define FTDI_SIO_SET_EVENT_CHAR 6 /* Set the event character */ | |
211 #define FTDI_SIO_SET_ERROR_CHAR 7 /* Set the error character */ | |
212 | |
213 /* Port Identifier Table */ | |
214 #define PIT_DEFAULT 0 /* SIOA */ | |
215 #define PIT_SIOA 1 /* SIOA */ | |
216 /* The device this driver is tested with one has only one port */ | |
217 #define PIT_SIOB 2 /* SIOB */ | |
218 #define PIT_PARALLEL 3 /* Parallel */ | |
219 | |
220 /* FTDI_SIO_RESET */ | |
221 #define FTDI_SIO_RESET_REQUEST FTDI_SIO_RESET | |
222 #define FTDI_SIO_RESET_REQUEST_TYPE 0x40 | |
223 #define FTDI_SIO_RESET_SIO 0 | |
224 #define FTDI_SIO_RESET_PURGE_RX 1 | |
225 #define FTDI_SIO_RESET_PURGE_TX 2 | |
226 | |
227 /* | |
228 * BmRequestType: 0100 0000B | |
229 * bRequest: FTDI_SIO_RESET | |
230 * wValue: Control Value | |
231 * 0 = Reset SIO | |
232 * 1 = Purge RX buffer | |
233 * 2 = Purge TX buffer | |
234 * wIndex: Port | |
235 * wLength: 0 | |
236 * Data: None | |
237 * | |
238 * The Reset SIO command has this effect: | |
239 * | |
240 * Sets flow control set to 'none' | |
241 * Event char = $0D | |
242 * Event trigger = disabled | |
243 * Purge RX buffer | |
244 * Purge TX buffer | |
245 * Clear DTR | |
246 * Clear RTS | |
247 * baud and data format not reset | |
248 * | |
249 * The Purge RX and TX buffer commands affect nothing except the buffers | |
250 * | |
251 */ | |
252 | |
253 /* FTDI_SIO_SET_BAUDRATE */ | |
254 #define FTDI_SIO_SET_BAUDRATE_REQUEST_TYPE 0x40 | |
255 #define FTDI_SIO_SET_BAUDRATE_REQUEST 3 | |
256 | |
257 /* | |
258 * BmRequestType: 0100 0000B | |
259 * bRequest: FTDI_SIO_SET_BAUDRATE | |
260 * wValue: BaudDivisor value - see below | |
261 * wIndex: Port | |
262 * wLength: 0 | |
263 * Data: None | |
264 * The BaudDivisor values are calculated as follows: | |
265 * - BaseClock is either 12000000 or 48000000 depending on the device. FIXME: I wish | |
266 * I knew how to detect old chips to select proper base clock! | |
267 * - BaudDivisor is a fixed point number encoded in a funny way. | |
268 * (--WRONG WAY OF THINKING--) | |
269 * BaudDivisor is a fixed point number encoded with following bit weighs: | |
270 * (-2)(-1)(13..0). It is a radical with a denominator of 4, so values | |
271 * end with 0.0 (00...), 0.25 (10...), 0.5 (01...), and 0.75 (11...). | |
272 * (--THE REALITY--) | |
273 * The both-bits-set has quite different meaning from 0.75 - the chip designers | |
274 * have decided it to mean 0.125 instead of 0.75. | |
275 * This info looked up in FTDI application note "FT8U232 DEVICES \ Data Rates | |
276 * and Flow Control Consideration for USB to RS232". | |
277 * - BaudDivisor = (BaseClock / 16) / BaudRate, where the (=) operation should | |
278 * automagically re-encode the resulting value to take fractions into consideration. | |
279 * As all values are integers, some bit twiddling is in order: | |
280 * BaudDivisor = (BaseClock / 16 / BaudRate) | | |
281 * (((BaseClock / 2 / BaudRate) & 4) ? 0x4000 // 0.5 | |
282 * : ((BaseClock / 2 / BaudRate) & 2) ? 0x8000 // 0.25 | |
283 * : ((BaseClock / 2 / BaudRate) & 1) ? 0xc000 // 0.125 | |
284 * : 0) | |
285 * | |
286 * For the FT232BM, a 17th divisor bit was introduced to encode the multiples | |
287 * of 0.125 missing from the FT8U232AM. Bits 16 to 14 are coded as follows | |
288 * (the first four codes are the same as for the FT8U232AM, where bit 16 is | |
289 * always 0): | |
290 * 000 - add .000 to divisor | |
291 * 001 - add .500 to divisor | |
292 * 010 - add .250 to divisor | |
293 * 011 - add .125 to divisor | |
294 * 100 - add .375 to divisor | |
295 * 101 - add .625 to divisor | |
296 * 110 - add .750 to divisor | |
297 * 111 - add .875 to divisor | |
298 * Bits 15 to 0 of the 17-bit divisor are placed in the urb value. Bit 16 is | |
299 * placed in bit 0 of the urb index. | |
300 * | |
301 * Note that there are a couple of special cases to support the highest baud | |
302 * rates. If the calculated divisor value is 1, this needs to be replaced with | |
303 * 0. Additionally for the FT232BM, if the calculated divisor value is 0x4001 | |
304 * (1.5), this needs to be replaced with 0x0001 (1) (but this divisor value is | |
305 * not supported by the FT8U232AM). | |
306 */ | |
307 | |
308 typedef enum { | |
309 SIO = 1, | |
310 FT8U232AM = 2, | |
311 FT232BM = 3, | |
312 } ftdi_chip_type_t; | |
313 | |
314 typedef enum { | |
315 ftdi_sio_b300 = 0, | |
316 ftdi_sio_b600 = 1, | |
317 ftdi_sio_b1200 = 2, | |
318 ftdi_sio_b2400 = 3, | |
319 ftdi_sio_b4800 = 4, | |
320 ftdi_sio_b9600 = 5, | |
321 ftdi_sio_b19200 = 6, | |
322 ftdi_sio_b38400 = 7, | |
323 ftdi_sio_b57600 = 8, | |
324 ftdi_sio_b115200 = 9 | |
325 } FTDI_SIO_baudrate_t ; | |
326 | |
327 /* | |
328 * The ftdi_8U232AM_xxMHz_byyy constants have been removed. The encoded divisor values | |
329 * are calculated internally. | |
330 */ | |
331 | |
332 #define FTDI_SIO_SET_DATA_REQUEST FTDI_SIO_SET_DATA | |
333 #define FTDI_SIO_SET_DATA_REQUEST_TYPE 0x40 | |
334 #define FTDI_SIO_SET_DATA_PARITY_NONE (0x0 << 8 ) | |
335 #define FTDI_SIO_SET_DATA_PARITY_ODD (0x1 << 8 ) | |
336 #define FTDI_SIO_SET_DATA_PARITY_EVEN (0x2 << 8 ) | |
337 #define FTDI_SIO_SET_DATA_PARITY_MARK (0x3 << 8 ) | |
338 #define FTDI_SIO_SET_DATA_PARITY_SPACE (0x4 << 8 ) | |
339 #define FTDI_SIO_SET_DATA_STOP_BITS_1 (0x0 << 11 ) | |
340 #define FTDI_SIO_SET_DATA_STOP_BITS_15 (0x1 << 11 ) | |
341 #define FTDI_SIO_SET_DATA_STOP_BITS_2 (0x2 << 11 ) | |
342 #define FTDI_SIO_SET_BREAK (0x1 << 14) | |
343 /* FTDI_SIO_SET_DATA */ | |
344 | |
345 /* | |
346 * BmRequestType: 0100 0000B | |
347 * bRequest: FTDI_SIO_SET_DATA | |
348 * wValue: Data characteristics (see below) | |
349 * wIndex: Port | |
350 * wLength: 0 | |
351 * Data: No | |
352 * | |
353 * Data characteristics | |
354 * | |
355 * B0..7 Number of data bits | |
356 * B8..10 Parity | |
357 * 0 = None | |
358 * 1 = Odd | |
359 * 2 = Even | |
360 * 3 = Mark | |
361 * 4 = Space | |
362 * B11..13 Stop Bits | |
363 * 0 = 1 | |
364 * 1 = 1.5 | |
365 * 2 = 2 | |
366 * B14 | |
367 * 1 = TX ON (break) | |
368 * 0 = TX OFF (normal state) | |
369 * B15 Reserved | |
370 * | |
371 */ | |
372 | |
373 | |
374 | |
375 /* FTDI_SIO_MODEM_CTRL */ | |
376 #define FTDI_SIO_SET_MODEM_CTRL_REQUEST_TYPE 0x40 | |
377 #define FTDI_SIO_SET_MODEM_CTRL_REQUEST FTDI_SIO_MODEM_CTRL | |
378 | |
379 /* | |
380 * BmRequestType: 0100 0000B | |
381 * bRequest: FTDI_SIO_MODEM_CTRL | |
382 * wValue: ControlValue (see below) | |
383 * wIndex: Port | |
384 * wLength: 0 | |
385 * Data: None | |
386 * | |
387 * NOTE: If the device is in RTS/CTS flow control, the RTS set by this | |
388 * command will be IGNORED without an error being returned | |
389 * Also - you can not set DTR and RTS with one control message | |
390 */ | |
391 | |
392 #define FTDI_SIO_SET_DTR_MASK 0x1 | |
393 #define FTDI_SIO_SET_DTR_HIGH ( 1 | ( FTDI_SIO_SET_DTR_MASK << 8)) | |
394 #define FTDI_SIO_SET_DTR_LOW ( 0 | ( FTDI_SIO_SET_DTR_MASK << 8)) | |
395 #define FTDI_SIO_SET_RTS_MASK 0x2 | |
396 #define FTDI_SIO_SET_RTS_HIGH ( 2 | ( FTDI_SIO_SET_RTS_MASK << 8 )) | |
397 #define FTDI_SIO_SET_RTS_LOW ( 0 | ( FTDI_SIO_SET_RTS_MASK << 8 )) | |
398 | |
399 /* | |
400 * ControlValue | |
401 * B0 DTR state | |
402 * 0 = reset | |
403 * 1 = set | |
404 * B1 RTS state | |
405 * 0 = reset | |
406 * 1 = set | |
407 * B2..7 Reserved | |
408 * B8 DTR state enable | |
409 * 0 = ignore | |
410 * 1 = use DTR state | |
411 * B9 RTS state enable | |
412 * 0 = ignore | |
413 * 1 = use RTS state | |
414 * B10..15 Reserved | |
415 */ | |
416 | |
417 /* FTDI_SIO_SET_FLOW_CTRL */ | |
418 #define FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE 0x40 | |
419 #define FTDI_SIO_SET_FLOW_CTRL_REQUEST FTDI_SIO_SET_FLOW_CTRL | |
420 #define FTDI_SIO_DISABLE_FLOW_CTRL 0x0 | |
421 #define FTDI_SIO_RTS_CTS_HS (0x1 << 8) | |
422 #define FTDI_SIO_DTR_DSR_HS (0x2 << 8) | |
423 #define FTDI_SIO_XON_XOFF_HS (0x4 << 8) | |
424 /* | |
425 * BmRequestType: 0100 0000b | |
426 * bRequest: FTDI_SIO_SET_FLOW_CTRL | |
427 * wValue: Xoff/Xon | |
428 * wIndex: Protocol/Port - hIndex is protocl / lIndex is port | |
429 * wLength: 0 | |
430 * Data: None | |
431 * | |
432 * hIndex protocol is: | |
433 * B0 Output handshaking using RTS/CTS | |
434 * 0 = disabled | |
435 * 1 = enabled | |
436 * B1 Output handshaking using DTR/DSR | |
437 * 0 = disabled | |
438 * 1 = enabled | |
439 * B2 Xon/Xoff handshaking | |
440 * 0 = disabled | |
441 * 1 = enabled | |
442 * | |
443 * A value of zero in the hIndex field disables handshaking | |
444 * | |
445 * If Xon/Xoff handshaking is specified, the hValue field should contain the XOFF character | |
446 * and the lValue field contains the XON character. | |
447 */ | |
448 | |
449 /* | |
450 * FTDI_SIO_SET_EVENT_CHAR | |
451 * | |
452 * Set the special event character for the specified communications port. | |
453 * If the device sees this character it will immediately return the | |
454 * data read so far - rather than wait 40ms or until 62 bytes are read | |
455 * which is what normally happens. | |
456 */ | |
457 | |
458 | |
459 #define FTDI_SIO_SET_EVENT_CHAR_REQUEST FTDI_SIO_SET_EVENT_CHAR | |
460 #define FTDI_SIO_SET_EVENT_CHAR_REQUEST_TYPE 0x40 | |
461 | |
462 | |
463 /* | |
464 * BmRequestType: 0100 0000b | |
465 * bRequest: FTDI_SIO_SET_EVENT_CHAR | |
466 * wValue: EventChar | |
467 * wIndex: Port | |
468 * wLength: 0 | |
469 * Data: None | |
470 * | |
471 * wValue: | |
472 * B0..7 Event Character | |
473 * B8 Event Character Processing | |
474 * 0 = disabled | |
475 * 1 = enabled | |
476 * B9..15 Reserved | |
477 * | |
478 */ | |
479 | |
480 /* FTDI_SIO_SET_ERROR_CHAR */ | |
481 | |
482 /* Set the parity error replacement character for the specified communications port */ | |
483 | |
484 /* | |
485 * BmRequestType: 0100 0000b | |
486 * bRequest: FTDI_SIO_SET_EVENT_CHAR | |
487 * wValue: Error Char | |
488 * wIndex: Port | |
489 * wLength: 0 | |
490 * Data: None | |
491 * | |
492 *Error Char | |
493 * B0..7 Error Character | |
494 * B8 Error Character Processing | |
495 * 0 = disabled | |
496 * 1 = enabled | |
497 * B9..15 Reserved | |
498 * | |
499 */ | |
500 | |
501 /* FTDI_SIO_GET_MODEM_STATUS */ | |
502 /* Retreive the current value of the modem status register */ | |
503 | |
504 #define FTDI_SIO_GET_MODEM_STATUS_REQUEST_TYPE 0xc0 | |
505 #define FTDI_SIO_GET_MODEM_STATUS_REQUEST FTDI_SIO_GET_MODEM_STATUS | |
506 #define FTDI_SIO_CTS_MASK 0x10 | |
507 #define FTDI_SIO_DSR_MASK 0x20 | |
508 #define FTDI_SIO_RI_MASK 0x40 | |
509 #define FTDI_SIO_RLSD_MASK 0x80 | |
510 /* | |
511 * BmRequestType: 1100 0000b | |
512 * bRequest: FTDI_SIO_GET_MODEM_STATUS | |
513 * wValue: zero | |
514 * wIndex: Port | |
515 * wLength: 1 | |
516 * Data: Status | |
517 * | |
518 * One byte of data is returned | |
519 * B0..3 0 | |
520 * B4 CTS | |
521 * 0 = inactive | |
522 * 1 = active | |
523 * B5 DSR | |
524 * 0 = inactive | |
525 * 1 = active | |
526 * B6 Ring Indicator (RI) | |
527 * 0 = inactive | |
528 * 1 = active | |
529 * B7 Receive Line Signal Detect (RLSD) | |
530 * 0 = inactive | |
531 * 1 = active | |
532 */ | |
533 | |
534 | |
535 | |
536 /* Descriptors returned by the device | |
537 * | |
538 * Device Descriptor | |
539 * | |
540 * Offset Field Size Value Description | |
541 * 0 bLength 1 0x12 Size of descriptor in bytes | |
542 * 1 bDescriptorType 1 0x01 DEVICE Descriptor Type | |
543 * 2 bcdUSB 2 0x0110 USB Spec Release Number | |
544 * 4 bDeviceClass 1 0x00 Class Code | |
545 * 5 bDeviceSubClass 1 0x00 SubClass Code | |
546 * 6 bDeviceProtocol 1 0x00 Protocol Code | |
547 * 7 bMaxPacketSize0 1 0x08 Maximum packet size for endpoint 0 | |
548 * 8 idVendor 2 0x0403 Vendor ID | |
549 * 10 idProduct 2 0x8372 Product ID (FTDI_SIO_PID) | |
550 * 12 bcdDevice 2 0x0001 Device release number | |
551 * 14 iManufacturer 1 0x01 Index of man. string desc | |
552 * 15 iProduct 1 0x02 Index of prod string desc | |
553 * 16 iSerialNumber 1 0x02 Index of serial nmr string desc | |
554 * 17 bNumConfigurations 1 0x01 Number of possible configurations | |
555 * | |
556 * Configuration Descriptor | |
557 * | |
558 * Offset Field Size Value | |
559 * 0 bLength 1 0x09 Size of descriptor in bytes | |
560 * 1 bDescriptorType 1 0x02 CONFIGURATION Descriptor Type | |
561 * 2 wTotalLength 2 0x0020 Total length of data | |
562 * 4 bNumInterfaces 1 0x01 Number of interfaces supported | |
563 * 5 bConfigurationValue 1 0x01 Argument for SetCOnfiguration() req | |
564 * 6 iConfiguration 1 0x02 Index of config string descriptor | |
565 * 7 bmAttributes 1 0x20 Config characteristics Remote Wakeup | |
566 * 8 MaxPower 1 0x1E Max power consumption | |
567 * | |
568 * Interface Descriptor | |
569 * | |
570 * Offset Field Size Value | |
571 * 0 bLength 1 0x09 Size of descriptor in bytes | |
572 * 1 bDescriptorType 1 0x04 INTERFACE Descriptor Type | |
573 * 2 bInterfaceNumber 1 0x00 Number of interface | |
574 * 3 bAlternateSetting 1 0x00 Value used to select alternate | |
575 * 4 bNumEndpoints 1 0x02 Number of endpoints | |
576 * 5 bInterfaceClass 1 0xFF Class Code | |
577 * 6 bInterfaceSubClass 1 0xFF Subclass Code | |
578 * 7 bInterfaceProtocol 1 0xFF Protocol Code | |
579 * 8 iInterface 1 0x02 Index of interface string description | |
580 * | |
581 * IN Endpoint Descriptor | |
582 * | |
583 * Offset Field Size Value | |
584 * 0 bLength 1 0x07 Size of descriptor in bytes | |
585 * 1 bDescriptorType 1 0x05 ENDPOINT descriptor type | |
586 * 2 bEndpointAddress 1 0x82 Address of endpoint | |
587 * 3 bmAttributes 1 0x02 Endpoint attributes - Bulk | |
588 * 4 bNumEndpoints 2 0x0040 maximum packet size | |
589 * 5 bInterval 1 0x00 Interval for polling endpoint | |
590 * | |
591 * OUT Endpoint Descriptor | |
592 * | |
593 * Offset Field Size Value | |
594 * 0 bLength 1 0x07 Size of descriptor in bytes | |
595 * 1 bDescriptorType 1 0x05 ENDPOINT descriptor type | |
596 * 2 bEndpointAddress 1 0x02 Address of endpoint | |
597 * 3 bmAttributes 1 0x02 Endpoint attributes - Bulk | |
598 * 4 bNumEndpoints 2 0x0040 maximum packet size | |
599 * 5 bInterval 1 0x00 Interval for polling endpoint | |
600 * | |
601 * DATA FORMAT | |
602 * | |
603 * IN Endpoint | |
604 * | |
605 * The device reserves the first two bytes of data on this endpoint to contain the current | |
606 * values of the modem and line status registers. In the absence of data, the device | |
607 * generates a message consisting of these two status bytes every 40 ms | |
608 * | |
609 * Byte 0: Modem Status | |
610 * | |
611 * Offset Description | |
612 * B0 Reserved - must be 1 | |
613 * B1 Reserved - must be 0 | |
614 * B2 Reserved - must be 0 | |
615 * B3 Reserved - must be 0 | |
616 * B4 Clear to Send (CTS) | |
617 * B5 Data Set Ready (DSR) | |
618 * B6 Ring Indicator (RI) | |
619 * B7 Receive Line Signal Detect (RLSD) | |
620 * | |
621 * Byte 1: Line Status | |
622 * | |
623 * Offset Description | |
624 * B0 Data Ready (DR) | |
625 * B1 Overrun Error (OE) | |
626 * B2 Parity Error (PE) | |
627 * B3 Framing Error (FE) | |
628 * B4 Break Interrupt (BI) | |
629 * B5 Transmitter Holding Register (THRE) | |
630 * B6 Transmitter Empty (TEMT) | |
631 * B7 Error in RCVR FIFO | |
632 * | |
633 */ | |
634 #define FTDI_RS0_CTS (1 << 4) | |
635 #define FTDI_RS0_DSR (1 << 5) | |
636 #define FTDI_RS0_RI (1 << 6) | |
637 #define FTDI_RS0_RLSD (1 << 7) | |
638 | |
639 #define FTDI_RS_DR 1 | |
640 #define FTDI_RS_OE (1<<1) | |
641 #define FTDI_RS_PE (1<<2) | |
642 #define FTDI_RS_FE (1<<3) | |
643 #define FTDI_RS_BI (1<<4) | |
644 #define FTDI_RS_THRE (1<<5) | |
645 #define FTDI_RS_TEMT (1<<6) | |
646 #define FTDI_RS_FIFO (1<<7) | |
647 | |
648 /* | |
649 * OUT Endpoint | |
650 * | |
651 * This device reserves the first bytes of data on this endpoint contain the length | |
652 * and port identifier of the message. For the FTDI USB Serial converter the port | |
653 * identifier is always 1. | |
654 * | |
655 * Byte 0: Line Status | |
656 * | |
657 * Offset Description | |
658 * B0 Reserved - must be 1 | |
659 * B1 Reserved - must be 0 | |
660 * B2..7 Length of message - (not including Byte 0) | |
661 * | |
662 */ | |
663 |