root / trunk / code / projects / colonet / lib / usb_dev_board_drivers / ftdi_sio.h @ 11
History | View | Annotate | Download (14.3 KB)
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 of Silicon Graphics, Inc.- wrote the
|
18 |
* FTDI_SIO implementation.
|
19 |
*
|
20 |
*/
|
21 |
|
22 |
#define FTDI_VID 0x0403 /* Vendor Id */ |
23 |
#define FTDI_SIO_PID 0x8372 /* Product Id SIO application of 8U100AX */ |
24 |
#define FTDI_8U232AM_PID 0x6001 /* Similar device to SIO above */ |
25 |
#define FTDI_NF_RIC_VID 0x0DCD /* Vendor Id */ |
26 |
#define FTDI_NF_RIC_PID 0x0001 /* Product Id */ |
27 |
|
28 |
#define FTDI_SIO_RESET 0 /* Reset the port */ |
29 |
#define FTDI_SIO_MODEM_CTRL 1 /* Set the modem control register */ |
30 |
#define FTDI_SIO_SET_FLOW_CTRL 2 /* Set flow control register */ |
31 |
#define FTDI_SIO_SET_BAUD_RATE 3 /* Set baud rate */ |
32 |
#define FTDI_SIO_SET_DATA 4 /* Set the data characteristics of the port */ |
33 |
#define FTDI_SIO_GET_MODEM_STATUS 5 /* Retrieve current value of modern status register */ |
34 |
#define FTDI_SIO_SET_EVENT_CHAR 6 /* Set the event character */ |
35 |
#define FTDI_SIO_SET_ERROR_CHAR 7 /* Set the error character */ |
36 |
|
37 |
/* Port Identifier Table */
|
38 |
#define PIT_DEFAULT 0 /* SIOA */ |
39 |
#define PIT_SIOA 1 /* SIOA */ |
40 |
/* The device this driver is tested with one has only one port */
|
41 |
#define PIT_SIOB 2 /* SIOB */ |
42 |
#define PIT_PARALLEL 3 /* Parallel */ |
43 |
|
44 |
/* FTDI_SIO_RESET */
|
45 |
#define FTDI_SIO_RESET_REQUEST FTDI_SIO_RESET
|
46 |
#define FTDI_SIO_RESET_REQUEST_TYPE 0x40 |
47 |
#define FTDI_SIO_RESET_SIO 0 |
48 |
#define FTDI_SIO_RESET_PURGE_RX 1 |
49 |
#define FTDI_SIO_RESET_PURGE_TX 2 |
50 |
|
51 |
/*
|
52 |
* BmRequestType: 0100 0000B
|
53 |
* bRequest: FTDI_SIO_RESET
|
54 |
* wValue: Control Value
|
55 |
* 0 = Reset SIO
|
56 |
* 1 = Purge RX buffer
|
57 |
* 2 = Purge TX buffer
|
58 |
* wIndex: Port
|
59 |
* wLength: 0
|
60 |
* Data: None
|
61 |
*
|
62 |
* The Reset SIO command has this effect:
|
63 |
*
|
64 |
* Sets flow control set to 'none'
|
65 |
* Event char = $0D
|
66 |
* Event trigger = disabled
|
67 |
* Purge RX buffer
|
68 |
* Purge TX buffer
|
69 |
* Clear DTR
|
70 |
* Clear RTS
|
71 |
* baud and data format not reset
|
72 |
*
|
73 |
* The Purge RX and TX buffer commands affect nothing except the buffers
|
74 |
*
|
75 |
*/
|
76 |
|
77 |
/* FTDI_SIO_SET_BAUDRATE */
|
78 |
#define FTDI_SIO_SET_BAUDRATE_REQUEST_TYPE 0x40 |
79 |
#define FTDI_SIO_SET_BAUDRATE_REQUEST 3 |
80 |
|
81 |
/*
|
82 |
* BmRequestType: 0100 0000B
|
83 |
* bRequest: FTDI_SIO_SET_BAUDRATE
|
84 |
* wValue: BaudDivisor value - see below
|
85 |
* wIndex: Port
|
86 |
* wLength: 0
|
87 |
* Data: None
|
88 |
* The BaudDivisor values are calculated as follows:
|
89 |
* - BaseClock is either 12000000 or 48000000 depending on the device. FIXME: I wish
|
90 |
* I knew how to detect old chips to select proper base clock!
|
91 |
* - BaudDivisor is a fixed point number encoded in a funny way.
|
92 |
* (--WRONG WAY OF THINKING--)
|
93 |
* BaudDivisor is a fixed point number encoded with following bit weighs:
|
94 |
* (-2)(-1)(13..0). It is a radical with a denominator of 4, so values
|
95 |
* end with 0.0 (00...), 0.25 (10...), 0.5 (01...), and 0.75 (11...).
|
96 |
* (--THE REALITY--)
|
97 |
* The both-bits-set has quite different meaning from 0.75 - the chip designers
|
98 |
* have decided it to mean 0.125 instead of 0.75.
|
99 |
* This info looked up in FTDI application note "FT8U232 DEVICES \ Data Rates
|
100 |
* and Flow Control Consideration for USB to RS232".
|
101 |
* - BaudDivisor = (BaseClock / 16) / BaudRate, where the (=) operation should
|
102 |
* automagically re-encode the resulting value to take fractions into consideration.
|
103 |
* As all values are integers, some bit twiddling is in order:
|
104 |
* BaudDivisor = (BaseClock / 16 / BaudRate) |
|
105 |
* (((BaseClock / 2 / BaudRate) & 2) ? 0x8000 : 0) | // 0.25
|
106 |
* (((BaseClock / 2 / BaudRate) & 4) ? 0x4000 : 0) | // 0.5
|
107 |
* (((BaseClock / 2 / BaudRate) & 0x7) == 1 ? 0xc000) // 0.125 - this line due to funny encoding only
|
108 |
*/
|
109 |
|
110 |
typedef enum { |
111 |
SIO = 1,
|
112 |
FT8U232AM = 2,
|
113 |
} ftdi_chip_type_t; |
114 |
|
115 |
typedef enum { |
116 |
ftdi_sio_b300 = 0,
|
117 |
ftdi_sio_b600 = 1,
|
118 |
ftdi_sio_b1200 = 2,
|
119 |
ftdi_sio_b2400 = 3,
|
120 |
ftdi_sio_b4800 = 4,
|
121 |
ftdi_sio_b9600 = 5,
|
122 |
ftdi_sio_b19200 = 6,
|
123 |
ftdi_sio_b38400 = 7,
|
124 |
ftdi_sio_b57600 = 8,
|
125 |
ftdi_sio_b115200 = 9
|
126 |
} FTDI_SIO_baudrate_t ; |
127 |
|
128 |
#define FTDI_SIO_BASE_BAUD_TO_DIVISOR(base, baud) ( \
|
129 |
((base/2/baud) >> 3) | \ |
130 |
(((base/2/baud) & 2) ? 0x8000 : 0) | \ |
131 |
(((base/2/baud) & 4) ? 0x4000 : 0) | \ |
132 |
((((base/2/baud) & 0x7) == 1) ? 0xc000 : 0) ) |
133 |
|
134 |
#define FTDI_SIO_BAUD_TO_DIVISOR(baud) FTDI_SIO_BASE_BAUD_TO_DIVISOR(48000000, baud) |
135 |
|
136 |
/*
|
137 |
* The ftdi_8U232AM_xxMHz_byyy constans have been removed. Their values can
|
138 |
* be calculated as follows: FTDI_SIO_BAUD_TO_DIVISOR(xx000000, yyy)
|
139 |
*/
|
140 |
|
141 |
#define FTDI_SIO_SET_DATA_REQUEST FTDI_SIO_SET_DATA
|
142 |
#define FTDI_SIO_SET_DATA_REQUEST_TYPE 0x40 |
143 |
#define FTDI_SIO_SET_DATA_PARITY_NONE (0x0 << 8 ) |
144 |
#define FTDI_SIO_SET_DATA_PARITY_ODD (0x1 << 8 ) |
145 |
#define FTDI_SIO_SET_DATA_PARITY_EVEN (0x2 << 8 ) |
146 |
#define FTDI_SIO_SET_DATA_PARITY_MARK (0x3 << 8 ) |
147 |
#define FTDI_SIO_SET_DATA_PARITY_SPACE (0x4 << 8 ) |
148 |
#define FTDI_SIO_SET_DATA_STOP_BITS_1 (0x0 << 11 ) |
149 |
#define FTDI_SIO_SET_DATA_STOP_BITS_15 (0x1 << 11 ) |
150 |
#define FTDI_SIO_SET_DATA_STOP_BITS_2 (0x2 << 11 ) |
151 |
#define FTDI_SIO_SET_BREAK (0x1 << 14) |
152 |
/* FTDI_SIO_SET_DATA */
|
153 |
|
154 |
/*
|
155 |
* BmRequestType: 0100 0000B
|
156 |
* bRequest: FTDI_SIO_SET_DATA
|
157 |
* wValue: Data characteristics (see below)
|
158 |
* wIndex: Port
|
159 |
* wLength: 0
|
160 |
* Data: No
|
161 |
*
|
162 |
* Data characteristics
|
163 |
*
|
164 |
* B0..7 Number of data bits
|
165 |
* B8..10 Parity
|
166 |
* 0 = None
|
167 |
* 1 = Odd
|
168 |
* 2 = Even
|
169 |
* 3 = Mark
|
170 |
* 4 = Space
|
171 |
* B11..13 Stop Bits
|
172 |
* 0 = 1
|
173 |
* 1 = 1.5
|
174 |
* 2 = 2
|
175 |
* B14
|
176 |
* 1 = TX ON (break)
|
177 |
* 0 = TX OFF (normal state)
|
178 |
* B15 Reserved
|
179 |
*
|
180 |
*/
|
181 |
|
182 |
|
183 |
|
184 |
/* FTDI_SIO_MODEM_CTRL */
|
185 |
#define FTDI_SIO_SET_MODEM_CTRL_REQUEST_TYPE 0x40 |
186 |
#define FTDI_SIO_SET_MODEM_CTRL_REQUEST FTDI_SIO_MODEM_CTRL
|
187 |
|
188 |
/*
|
189 |
* BmRequestType: 0100 0000B
|
190 |
* bRequest: FTDI_SIO_MODEM_CTRL
|
191 |
* wValue: ControlValue (see below)
|
192 |
* wIndex: Port
|
193 |
* wLength: 0
|
194 |
* Data: None
|
195 |
*
|
196 |
* NOTE: If the device is in RTS/CTS flow control, the RTS set by this
|
197 |
* command will be IGNORED without an error being returned
|
198 |
* Also - you can not set DTR and RTS with one control message
|
199 |
*/
|
200 |
|
201 |
#define FTDI_SIO_SET_DTR_MASK 0x1 |
202 |
#define FTDI_SIO_SET_DTR_HIGH ( 1 | ( FTDI_SIO_SET_DTR_MASK << 8)) |
203 |
#define FTDI_SIO_SET_DTR_LOW ( 0 | ( FTDI_SIO_SET_DTR_MASK << 8)) |
204 |
#define FTDI_SIO_SET_RTS_MASK 0x2 |
205 |
#define FTDI_SIO_SET_RTS_HIGH ( 2 | ( FTDI_SIO_SET_RTS_MASK << 8 )) |
206 |
#define FTDI_SIO_SET_RTS_LOW ( 0 | ( FTDI_SIO_SET_RTS_MASK << 8 )) |
207 |
|
208 |
/*
|
209 |
* ControlValue
|
210 |
* B0 DTR state
|
211 |
* 0 = reset
|
212 |
* 1 = set
|
213 |
* B1 RTS state
|
214 |
* 0 = reset
|
215 |
* 1 = set
|
216 |
* B2..7 Reserved
|
217 |
* B8 DTR state enable
|
218 |
* 0 = ignore
|
219 |
* 1 = use DTR state
|
220 |
* B9 RTS state enable
|
221 |
* 0 = ignore
|
222 |
* 1 = use RTS state
|
223 |
* B10..15 Reserved
|
224 |
*/
|
225 |
|
226 |
/* FTDI_SIO_SET_FLOW_CTRL */
|
227 |
#define FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE 0x40 |
228 |
#define FTDI_SIO_SET_FLOW_CTRL_REQUEST FTDI_SIO_SET_FLOW_CTRL
|
229 |
#define FTDI_SIO_DISABLE_FLOW_CTRL 0x0 |
230 |
#define FTDI_SIO_RTS_CTS_HS (0x1 << 8) |
231 |
#define FTDI_SIO_DTR_DSR_HS (0x2 << 8) |
232 |
#define FTDI_SIO_XON_XOFF_HS (0x4 << 8) |
233 |
/*
|
234 |
* BmRequestType: 0100 0000b
|
235 |
* bRequest: FTDI_SIO_SET_FLOW_CTRL
|
236 |
* wValue: Xoff/Xon
|
237 |
* wIndex: Protocol/Port - hIndex is protocl / lIndex is port
|
238 |
* wLength: 0
|
239 |
* Data: None
|
240 |
*
|
241 |
* hIndex protocol is:
|
242 |
* B0 Output handshaking using RTS/CTS
|
243 |
* 0 = disabled
|
244 |
* 1 = enabled
|
245 |
* B1 Output handshaking using DTR/DSR
|
246 |
* 0 = disabled
|
247 |
* 1 = enabled
|
248 |
* B2 Xon/Xoff handshaking
|
249 |
* 0 = disabled
|
250 |
* 1 = enabled
|
251 |
*
|
252 |
* A value of zero in the hIndex field disables handshaking
|
253 |
*
|
254 |
* If Xon/Xoff handshaking is specified, the hValue field should contain the XOFF character
|
255 |
* and the lValue field contains the XON character.
|
256 |
*/
|
257 |
|
258 |
/*
|
259 |
* FTDI_SIO_SET_EVENT_CHAR
|
260 |
*
|
261 |
* Set the special event character for the specified communications port.
|
262 |
* If the device sees this character it will immediately return the
|
263 |
* data read so far - rather than wait 40ms or until 62 bytes are read
|
264 |
* which is what normally happens.
|
265 |
*/
|
266 |
|
267 |
|
268 |
#define FTDI_SIO_SET_EVENT_CHAR_REQUEST FTDI_SIO_SET_EVENT_CHAR
|
269 |
#define FTDI_SIO_SET_EVENT_CHAR_REQUEST_TYPE 0x40 |
270 |
|
271 |
|
272 |
/*
|
273 |
* BmRequestType: 0100 0000b
|
274 |
* bRequest: FTDI_SIO_SET_EVENT_CHAR
|
275 |
* wValue: EventChar
|
276 |
* wIndex: Port
|
277 |
* wLength: 0
|
278 |
* Data: None
|
279 |
*
|
280 |
* wValue:
|
281 |
* B0..7 Event Character
|
282 |
* B8 Event Character Processing
|
283 |
* 0 = disabled
|
284 |
* 1 = enabled
|
285 |
* B9..15 Reserved
|
286 |
*
|
287 |
*/
|
288 |
|
289 |
/* FTDI_SIO_SET_ERROR_CHAR */
|
290 |
|
291 |
/* Set the parity error replacement character for the specified communications port */
|
292 |
|
293 |
/*
|
294 |
* BmRequestType: 0100 0000b
|
295 |
* bRequest: FTDI_SIO_SET_EVENT_CHAR
|
296 |
* wValue: Error Char
|
297 |
* wIndex: Port
|
298 |
* wLength: 0
|
299 |
* Data: None
|
300 |
*
|
301 |
*Error Char
|
302 |
* B0..7 Error Character
|
303 |
* B8 Error Character Processing
|
304 |
* 0 = disabled
|
305 |
* 1 = enabled
|
306 |
* B9..15 Reserved
|
307 |
*
|
308 |
*/
|
309 |
|
310 |
/* FTDI_SIO_GET_MODEM_STATUS */
|
311 |
/* Retreive the current value of the modem status register */
|
312 |
|
313 |
#define FTDI_SIO_GET_MODEM_STATUS_REQUEST_TYPE 0xc0 |
314 |
#define FTDI_SIO_GET_MODEM_STATUS_REQUEST FTDI_SIO_GET_MODEM_STATUS
|
315 |
#define FTDI_SIO_CTS_MASK 0x10 |
316 |
#define FTDI_SIO_DSR_MASK 0x20 |
317 |
#define FTDI_SIO_RI_MASK 0x40 |
318 |
#define FTDI_SIO_RLSD_MASK 0x80 |
319 |
/*
|
320 |
* BmRequestType: 1100 0000b
|
321 |
* bRequest: FTDI_SIO_GET_MODEM_STATUS
|
322 |
* wValue: zero
|
323 |
* wIndex: Port
|
324 |
* wLength: 1
|
325 |
* Data: Status
|
326 |
*
|
327 |
* One byte of data is returned
|
328 |
* B0..3 0
|
329 |
* B4 CTS
|
330 |
* 0 = inactive
|
331 |
* 1 = active
|
332 |
* B5 DSR
|
333 |
* 0 = inactive
|
334 |
* 1 = active
|
335 |
* B6 Ring Indicator (RI)
|
336 |
* 0 = inactive
|
337 |
* 1 = active
|
338 |
* B7 Receive Line Signal Detect (RLSD)
|
339 |
* 0 = inactive
|
340 |
* 1 = active
|
341 |
*/
|
342 |
|
343 |
|
344 |
|
345 |
/* Descriptors returned by the device
|
346 |
*
|
347 |
* Device Descriptor
|
348 |
*
|
349 |
* Offset Field Size Value Description
|
350 |
* 0 bLength 1 0x12 Size of descriptor in bytes
|
351 |
* 1 bDescriptorType 1 0x01 DEVICE Descriptor Type
|
352 |
* 2 bcdUSB 2 0x0110 USB Spec Release Number
|
353 |
* 4 bDeviceClass 1 0x00 Class Code
|
354 |
* 5 bDeviceSubClass 1 0x00 SubClass Code
|
355 |
* 6 bDeviceProtocol 1 0x00 Protocol Code
|
356 |
* 7 bMaxPacketSize0 1 0x08 Maximum packet size for endpoint 0
|
357 |
* 8 idVendor 2 0x0403 Vendor ID
|
358 |
* 10 idProduct 2 0x8372 Product ID (FTDI_SIO_PID)
|
359 |
* 12 bcdDevice 2 0x0001 Device release number
|
360 |
* 14 iManufacturer 1 0x01 Index of man. string desc
|
361 |
* 15 iProduct 1 0x02 Index of prod string desc
|
362 |
* 16 iSerialNumber 1 0x02 Index of serial nmr string desc
|
363 |
* 17 bNumConfigurations 1 0x01 Number of possible configurations
|
364 |
*
|
365 |
* Configuration Descriptor
|
366 |
*
|
367 |
* Offset Field Size Value
|
368 |
* 0 bLength 1 0x09 Size of descriptor in bytes
|
369 |
* 1 bDescriptorType 1 0x02 CONFIGURATION Descriptor Type
|
370 |
* 2 wTotalLength 2 0x0020 Total length of data
|
371 |
* 4 bNumInterfaces 1 0x01 Number of interfaces supported
|
372 |
* 5 bConfigurationValue 1 0x01 Argument for SetCOnfiguration() req
|
373 |
* 6 iConfiguration 1 0x02 Index of config string descriptor
|
374 |
* 7 bmAttributes 1 0x20 Config characteristics Remote Wakeup
|
375 |
* 8 MaxPower 1 0x1E Max power consumption
|
376 |
*
|
377 |
* Interface Descriptor
|
378 |
*
|
379 |
* Offset Field Size Value
|
380 |
* 0 bLength 1 0x09 Size of descriptor in bytes
|
381 |
* 1 bDescriptorType 1 0x04 INTERFACE Descriptor Type
|
382 |
* 2 bInterfaceNumber 1 0x00 Number of interface
|
383 |
* 3 bAlternateSetting 1 0x00 Value used to select alternate
|
384 |
* 4 bNumEndpoints 1 0x02 Number of endpoints
|
385 |
* 5 bInterfaceClass 1 0xFF Class Code
|
386 |
* 6 bInterfaceSubClass 1 0xFF Subclass Code
|
387 |
* 7 bInterfaceProtocol 1 0xFF Protocol Code
|
388 |
* 8 iInterface 1 0x02 Index of interface string description
|
389 |
*
|
390 |
* IN Endpoint Descriptor
|
391 |
*
|
392 |
* Offset Field Size Value
|
393 |
* 0 bLength 1 0x07 Size of descriptor in bytes
|
394 |
* 1 bDescriptorType 1 0x05 ENDPOINT descriptor type
|
395 |
* 2 bEndpointAddress 1 0x82 Address of endpoint
|
396 |
* 3 bmAttributes 1 0x02 Endpoint attributes - Bulk
|
397 |
* 4 bNumEndpoints 2 0x0040 maximum packet size
|
398 |
* 5 bInterval 1 0x00 Interval for polling endpoint
|
399 |
*
|
400 |
* OUT Endpoint Descriptor
|
401 |
*
|
402 |
* Offset Field Size Value
|
403 |
* 0 bLength 1 0x07 Size of descriptor in bytes
|
404 |
* 1 bDescriptorType 1 0x05 ENDPOINT descriptor type
|
405 |
* 2 bEndpointAddress 1 0x02 Address of endpoint
|
406 |
* 3 bmAttributes 1 0x02 Endpoint attributes - Bulk
|
407 |
* 4 bNumEndpoints 2 0x0040 maximum packet size
|
408 |
* 5 bInterval 1 0x00 Interval for polling endpoint
|
409 |
*
|
410 |
* DATA FORMAT
|
411 |
*
|
412 |
* IN Endpoint
|
413 |
*
|
414 |
* The device reserves the first two bytes of data on this endpoint to contain the current
|
415 |
* values of the modem and line status registers. In the absence of data, the device
|
416 |
* generates a message consisting of these two status bytes every 40 ms
|
417 |
*
|
418 |
* Byte 0: Modem Status
|
419 |
*
|
420 |
* Offset Description
|
421 |
* B0 Reserved - must be 1
|
422 |
* B1 Reserved - must be 0
|
423 |
* B2 Reserved - must be 0
|
424 |
* B3 Reserved - must be 0
|
425 |
* B4 Clear to Send (CTS)
|
426 |
* B5 Data Set Ready (DSR)
|
427 |
* B6 Ring Indicator (RI)
|
428 |
* B7 Receive Line Signal Detect (RLSD)
|
429 |
*
|
430 |
* Byte 1: Line Status
|
431 |
*
|
432 |
* Offset Description
|
433 |
* B0 Data Ready (DR)
|
434 |
* B1 Overrun Error (OE)
|
435 |
* B2 Parity Error (PE)
|
436 |
* B3 Framing Error (FE)
|
437 |
* B4 Break Interrupt (BI)
|
438 |
* B5 Transmitter Holding Register (THRE)
|
439 |
* B6 Transmitter Empty (TEMT)
|
440 |
* B7 Error in RCVR FIFO
|
441 |
*
|
442 |
*/
|
443 |
#define FTDI_RS0_CTS (1 << 4) |
444 |
#define FTDI_RS0_DSR (1 << 5) |
445 |
#define FTDI_RS0_RI (1 << 6) |
446 |
#define FTDI_RS0_RLSD (1 << 7) |
447 |
|
448 |
#define FTDI_RS_DR 1 |
449 |
#define FTDI_RS_OE (1<<1) |
450 |
#define FTDI_RS_PE (1<<2) |
451 |
#define FTDI_RS_FE (1<<3) |
452 |
#define FTDI_RS_BI (1<<4) |
453 |
#define FTDI_RS_THRE (1<<5) |
454 |
#define FTDI_RS_TEMT (1<<6) |
455 |
#define FTDI_RS_FIFO (1<<7) |
456 |
|
457 |
/*
|
458 |
* OUT Endpoint
|
459 |
*
|
460 |
* This device reserves the first bytes of data on this endpoint contain the length
|
461 |
* and port identifier of the message. For the FTDI USB Serial converter the port
|
462 |
* identifier is always 1.
|
463 |
*
|
464 |
* Byte 0: Line Status
|
465 |
*
|
466 |
* Offset Description
|
467 |
* B0 Reserved - must be 1
|
468 |
* B1 Reserved - must be 0
|
469 |
* B2..7 Length of message - (not including Byte 0)
|
470 |
*
|
471 |
*/
|
472 |
|