Introduce ftdi_set_module_detach_mode()
[libftdi] / src / ftdi.c
1 /***************************************************************************
2                           ftdi.c  -  description
3                              -------------------
4     begin                : Fri Apr 4 2003
5     copyright            : (C) 2003-2020 by Intra2net AG and the libftdi developers
6     email                : opensource@intra2net.com
7     SPDX-License-Identifier: LGPL-2.1-only
8  ***************************************************************************/
9
10 /***************************************************************************
11  *                                                                         *
12  *   This program is free software; you can redistribute it and/or modify  *
13  *   it under the terms of the GNU Lesser General Public License           *
14  *   version 2.1 as published by the Free Software Foundation;             *
15  *                                                                         *
16  ***************************************************************************/
17
18 /**
19     \mainpage libftdi API documentation
20
21     Library to talk to FTDI chips. You find the latest versions of libftdi at
22     https://www.intra2net.com/en/developer/libftdi/
23
24     The library is easy to use. Have a look at this short example:
25     \include simple.c
26
27     More examples can be found in the "examples" directory.
28 */
29 /** \addtogroup libftdi */
30 /* @{ */
31
32 #include <libusb.h>
33 #include <string.h>
34 #include <errno.h>
35 #include <stdio.h>
36 #include <stdlib.h>
37
38 #include "ftdi_i.h"
39 /* Prevent deprecated messages when building library */
40 #define _FTDI_DISABLE_DEPRECATED
41 #include "ftdi.h"
42 #include "ftdi_version_i.h"
43
44 #define ftdi_error_return(code, str) do {  \
45         if ( ftdi )                        \
46             ftdi->error_str = str;         \
47         else                               \
48             fprintf(stderr, str);          \
49         return code;                       \
50    } while(0);
51
52 #define ftdi_error_return_free_device_list(code, str, devs) do {    \
53         libusb_free_device_list(devs,1);   \
54         ftdi->error_str = str;             \
55         return code;                       \
56    } while(0);
57
58
59 /**
60     Internal function to close usb device pointer.
61     Sets ftdi->usb_dev to NULL.
62     \internal
63
64     \param ftdi pointer to ftdi_context
65
66     \retval none
67 */
68 static void ftdi_usb_close_internal (struct ftdi_context *ftdi)
69 {
70     if (ftdi && ftdi->usb_dev)
71     {
72         libusb_close (ftdi->usb_dev);
73         ftdi->usb_dev = NULL;
74         if(ftdi->eeprom)
75             ftdi->eeprom->initialized_for_connected_device = 0;
76     }
77 }
78
79 /**
80     Initializes a ftdi_context.
81
82     \param ftdi pointer to ftdi_context
83
84     \retval  0: all fine
85     \retval -1: couldn't allocate read buffer
86     \retval -2: couldn't allocate struct buffer
87     \retval -3: libusb_init() failed
88
89     \remark This should be called before all functions
90 */
91 int ftdi_init(struct ftdi_context *ftdi)
92 {
93     struct ftdi_eeprom* eeprom;
94     ftdi->usb_ctx = NULL;
95     ftdi->usb_dev = NULL;
96     ftdi->usb_read_timeout = 5000;
97     ftdi->usb_write_timeout = 5000;
98
99     ftdi->type = TYPE_BM;    /* chip type */
100     ftdi->baudrate = -1;
101     ftdi->bitbang_enabled = 0;  /* 0: normal mode 1: any of the bitbang modes enabled */
102
103     ftdi->readbuffer = NULL;
104     ftdi->readbuffer_offset = 0;
105     ftdi->readbuffer_remaining = 0;
106     ftdi->writebuffer_chunksize = 4096;
107     ftdi->max_packet_size = 0;
108     ftdi->error_str = NULL;
109     ftdi->module_detach_mode = AUTO_DETACH_SIO_MODULE;
110
111     if (libusb_init(&ftdi->usb_ctx) < 0)
112         ftdi_error_return(-3, "libusb_init() failed");
113
114     ftdi_set_interface(ftdi, INTERFACE_ANY);
115     ftdi->bitbang_mode = 1; /* when bitbang is enabled this holds the number of the mode */
116
117     eeprom = (struct ftdi_eeprom *)malloc(sizeof(struct ftdi_eeprom));
118     if (eeprom == 0)
119         ftdi_error_return(-2, "Can't malloc struct ftdi_eeprom");
120     memset(eeprom, 0, sizeof(struct ftdi_eeprom));
121     ftdi->eeprom = eeprom;
122
123     /* All fine. Now allocate the readbuffer */
124     return ftdi_read_data_set_chunksize(ftdi, 4096);
125 }
126
127 /**
128     Allocate and initialize a new ftdi_context
129
130     \return a pointer to a new ftdi_context, or NULL on failure
131 */
132 struct ftdi_context *ftdi_new(void)
133 {
134     struct ftdi_context * ftdi = (struct ftdi_context *)malloc(sizeof(struct ftdi_context));
135
136     if (ftdi == NULL)
137     {
138         return NULL;
139     }
140
141     if (ftdi_init(ftdi) != 0)
142     {
143         free(ftdi);
144         return NULL;
145     }
146
147     return ftdi;
148 }
149
150 /**
151     Open selected channels on a chip, otherwise use first channel.
152
153     \param ftdi pointer to ftdi_context
154     \param interface Interface to use for FT2232C/2232H/4232H chips.
155
156     \retval  0: all fine
157     \retval -1: unknown interface
158     \retval -2: USB device unavailable
159     \retval -3: Device already open, interface can't be set in that state
160 */
161 int ftdi_set_interface(struct ftdi_context *ftdi, enum ftdi_interface interface)
162 {
163     if (ftdi == NULL)
164         ftdi_error_return(-2, "USB device unavailable");
165
166     if (ftdi->usb_dev != NULL)
167     {
168         int check_interface = interface;
169         if (check_interface == INTERFACE_ANY)
170             check_interface = INTERFACE_A;
171
172         if (ftdi->index != check_interface)
173             ftdi_error_return(-3, "Interface can not be changed on an already open device");
174     }
175
176     switch (interface)
177     {
178         case INTERFACE_ANY:
179         case INTERFACE_A:
180             ftdi->interface = 0;
181             ftdi->index     = INTERFACE_A;
182             ftdi->in_ep     = 0x02;
183             ftdi->out_ep    = 0x81;
184             break;
185         case INTERFACE_B:
186             ftdi->interface = 1;
187             ftdi->index     = INTERFACE_B;
188             ftdi->in_ep     = 0x04;
189             ftdi->out_ep    = 0x83;
190             break;
191         case INTERFACE_C:
192             ftdi->interface = 2;
193             ftdi->index     = INTERFACE_C;
194             ftdi->in_ep     = 0x06;
195             ftdi->out_ep    = 0x85;
196             break;
197         case INTERFACE_D:
198             ftdi->interface = 3;
199             ftdi->index     = INTERFACE_D;
200             ftdi->in_ep     = 0x08;
201             ftdi->out_ep    = 0x87;
202             break;
203         default:
204             ftdi_error_return(-1, "Unknown interface");
205     }
206     return 0;
207 }
208
209 /**
210     Deinitializes a ftdi_context.
211
212     \param ftdi pointer to ftdi_context
213 */
214 void ftdi_deinit(struct ftdi_context *ftdi)
215 {
216     if (ftdi == NULL)
217         return;
218
219     ftdi_usb_close_internal (ftdi);
220
221     if (ftdi->readbuffer != NULL)
222     {
223         free(ftdi->readbuffer);
224         ftdi->readbuffer = NULL;
225     }
226
227     if (ftdi->eeprom != NULL)
228     {
229         if (ftdi->eeprom->manufacturer != 0)
230         {
231             free(ftdi->eeprom->manufacturer);
232             ftdi->eeprom->manufacturer = 0;
233         }
234         if (ftdi->eeprom->product != 0)
235         {
236             free(ftdi->eeprom->product);
237             ftdi->eeprom->product = 0;
238         }
239         if (ftdi->eeprom->serial != 0)
240         {
241             free(ftdi->eeprom->serial);
242             ftdi->eeprom->serial = 0;
243         }
244         free(ftdi->eeprom);
245         ftdi->eeprom = NULL;
246     }
247
248     if (ftdi->usb_ctx)
249     {
250         libusb_exit(ftdi->usb_ctx);
251         ftdi->usb_ctx = NULL;
252     }
253 }
254
255 /**
256     Deinitialize and free an ftdi_context.
257
258     \param ftdi pointer to ftdi_context
259 */
260 void ftdi_free(struct ftdi_context *ftdi)
261 {
262     ftdi_deinit(ftdi);
263     free(ftdi);
264 }
265
266 /**
267     Use an already open libusb device.
268
269     \param ftdi pointer to ftdi_context
270     \param usb libusb libusb_device_handle to use
271 */
272 void ftdi_set_usbdev (struct ftdi_context *ftdi, libusb_device_handle *usb)
273 {
274     if (ftdi == NULL)
275         return;
276
277     ftdi->usb_dev = usb;
278 }
279
280 /**
281  * @brief Get libftdi library version
282  *
283  * @return ftdi_version_info Library version information
284  **/
285 struct ftdi_version_info ftdi_get_library_version(void)
286 {
287     struct ftdi_version_info ver;
288
289     ver.major = FTDI_MAJOR_VERSION;
290     ver.minor = FTDI_MINOR_VERSION;
291     ver.micro = FTDI_MICRO_VERSION;
292     ver.version_str = FTDI_VERSION_STRING;
293     ver.snapshot_str = FTDI_SNAPSHOT_VERSION;
294
295     return ver;
296 }
297
298 /**
299     Finds all ftdi devices with given VID:PID on the usb bus. Creates a new
300     ftdi_device_list which needs to be deallocated by ftdi_list_free() after
301     use. With VID:PID 0:0, search for the default devices
302     (0x403:0x6001, 0x403:0x6010, 0x403:0x6011, 0x403:0x6014, 0x403:0x6015)
303
304     \param ftdi pointer to ftdi_context
305     \param devlist Pointer where to store list of found devices
306     \param vendor Vendor ID to search for
307     \param product Product ID to search for
308
309     \retval >0: number of devices found
310     \retval -3: out of memory
311     \retval -5: libusb_get_device_list() failed
312     \retval -6: libusb_get_device_descriptor() failed
313 */
314 int ftdi_usb_find_all(struct ftdi_context *ftdi, struct ftdi_device_list **devlist, int vendor, int product)
315 {
316     struct ftdi_device_list **curdev;
317     libusb_device *dev;
318     libusb_device **devs;
319     int count = 0;
320     int i = 0;
321
322     if (libusb_get_device_list(ftdi->usb_ctx, &devs) < 0)
323         ftdi_error_return(-5, "libusb_get_device_list() failed");
324
325     curdev = devlist;
326     *curdev = NULL;
327
328     while ((dev = devs[i++]) != NULL)
329     {
330         struct libusb_device_descriptor desc;
331
332         if (libusb_get_device_descriptor(dev, &desc) < 0)
333             ftdi_error_return_free_device_list(-6, "libusb_get_device_descriptor() failed", devs);
334
335         if (((vendor || product) &&
336                 desc.idVendor == vendor && desc.idProduct == product) ||
337                 (!(vendor || product) &&
338                  (desc.idVendor == 0x403) && (desc.idProduct == 0x6001 || desc.idProduct == 0x6010
339                                               || desc.idProduct == 0x6011 || desc.idProduct == 0x6014
340                                               || desc.idProduct == 0x6015)))
341         {
342             *curdev = (struct ftdi_device_list*)malloc(sizeof(struct ftdi_device_list));
343             if (!*curdev)
344                 ftdi_error_return_free_device_list(-3, "out of memory", devs);
345
346             (*curdev)->next = NULL;
347             (*curdev)->dev = dev;
348             libusb_ref_device(dev);
349             curdev = &(*curdev)->next;
350             count++;
351         }
352     }
353     libusb_free_device_list(devs,1);
354     return count;
355 }
356
357 /**
358     Frees a usb device list.
359
360     \param devlist USB device list created by ftdi_usb_find_all()
361 */
362 void ftdi_list_free(struct ftdi_device_list **devlist)
363 {
364     struct ftdi_device_list *curdev, *next;
365
366     for (curdev = *devlist; curdev != NULL;)
367     {
368         next = curdev->next;
369         libusb_unref_device(curdev->dev);
370         free(curdev);
371         curdev = next;
372     }
373
374     *devlist = NULL;
375 }
376
377 /**
378     Frees a usb device list.
379
380     \param devlist USB device list created by ftdi_usb_find_all()
381 */
382 void ftdi_list_free2(struct ftdi_device_list *devlist)
383 {
384     ftdi_list_free(&devlist);
385 }
386
387 /**
388     Return device ID strings from the usb device.
389
390     The parameters manufacturer, description and serial may be NULL
391     or pointer to buffers to store the fetched strings.
392
393     \note Use this function only in combination with ftdi_usb_find_all()
394           as it closes the internal "usb_dev" after use.
395
396     \param ftdi pointer to ftdi_context
397     \param dev libusb usb_dev to use
398     \param manufacturer Store manufacturer string here if not NULL
399     \param mnf_len Buffer size of manufacturer string
400     \param description Store product description string here if not NULL
401     \param desc_len Buffer size of product description string
402     \param serial Store serial string here if not NULL
403     \param serial_len Buffer size of serial string
404
405     \retval   0: all fine
406     \retval  -1: wrong arguments
407     \retval  -4: unable to open device
408     \retval  -7: get product manufacturer failed
409     \retval  -8: get product description failed
410     \retval  -9: get serial number failed
411     \retval -11: libusb_get_device_descriptor() failed
412 */
413 int ftdi_usb_get_strings(struct ftdi_context *ftdi,
414                          struct libusb_device *dev,
415                          char *manufacturer, int mnf_len,
416                          char *description, int desc_len,
417                          char *serial, int serial_len)
418 {
419     int ret;
420
421     if ((ftdi==NULL) || (dev==NULL))
422         return -1;
423
424     if (ftdi->usb_dev == NULL && libusb_open(dev, &ftdi->usb_dev) < 0)
425         ftdi_error_return(-4, "libusb_open() failed");
426
427     // ftdi->usb_dev will not be NULL when entering ftdi_usb_get_strings2(), so
428     // it won't be closed either. This allows us to close it whether we actually
429     // called libusb_open() up above or not. This matches the expected behavior
430     // (and note) for ftdi_usb_get_strings().
431     ret = ftdi_usb_get_strings2(ftdi, dev,
432                                 manufacturer, mnf_len,
433                                 description, desc_len,
434                                 serial, serial_len);
435
436     // only close it if it was successful, as all other return codes close
437     // before returning already.
438     if (ret == 0)
439         ftdi_usb_close_internal(ftdi);
440
441     return ret;
442 }
443
444 /**
445     Return device ID strings from the usb device.
446
447     The parameters manufacturer, description and serial may be NULL
448     or pointer to buffers to store the fetched strings.
449
450     \note The old function ftdi_usb_get_strings() always closes the device.
451           This version only closes the device if it was opened by it.
452
453     \param ftdi pointer to ftdi_context
454     \param dev libusb usb_dev to use
455     \param manufacturer Store manufacturer string here if not NULL
456     \param mnf_len Buffer size of manufacturer string
457     \param description Store product description string here if not NULL
458     \param desc_len Buffer size of product description string
459     \param serial Store serial string here if not NULL
460     \param serial_len Buffer size of serial string
461
462     \retval   0: all fine
463     \retval  -1: wrong arguments
464     \retval  -4: unable to open device
465     \retval  -7: get product manufacturer failed
466     \retval  -8: get product description failed
467     \retval  -9: get serial number failed
468     \retval -11: libusb_get_device_descriptor() failed
469 */
470 int ftdi_usb_get_strings2(struct ftdi_context *ftdi, struct libusb_device *dev,
471                           char *manufacturer, int mnf_len,
472                           char *description, int desc_len,
473                           char *serial, int serial_len)
474 {
475     struct libusb_device_descriptor desc;
476     char need_open;
477
478     if ((ftdi==NULL) || (dev==NULL))
479         return -1;
480
481     need_open = (ftdi->usb_dev == NULL);
482     if (need_open && libusb_open(dev, &ftdi->usb_dev) < 0)
483         ftdi_error_return(-4, "libusb_open() failed");
484
485     if (libusb_get_device_descriptor(dev, &desc) < 0)
486         ftdi_error_return(-11, "libusb_get_device_descriptor() failed");
487
488     if (manufacturer != NULL && mnf_len > 0)
489     {
490         if (desc.iManufacturer == 0)
491         {
492             manufacturer[0] = '\0';
493         }
494         else if (libusb_get_string_descriptor_ascii(ftdi->usb_dev, desc.iManufacturer, (unsigned char *)manufacturer, mnf_len) < 0)
495         {
496             ftdi_usb_close_internal (ftdi);
497             ftdi_error_return(-7, "libusb_get_string_descriptor_ascii() failed");
498         }
499     }
500
501     if (description != NULL && desc_len > 0)
502     {
503         if (desc.iProduct == 0)
504         {
505             description[0] = '\0';
506         }
507         else if (libusb_get_string_descriptor_ascii(ftdi->usb_dev, desc.iProduct, (unsigned char *)description, desc_len) < 0)
508         {
509             ftdi_usb_close_internal (ftdi);
510             ftdi_error_return(-8, "libusb_get_string_descriptor_ascii() failed");
511         }
512     }
513
514     if (serial != NULL && serial_len > 0)
515     {
516         if (desc.iSerialNumber == 0)
517         {
518             serial[0] = '\0';
519         }
520         else if (libusb_get_string_descriptor_ascii(ftdi->usb_dev, desc.iSerialNumber, (unsigned char *)serial, serial_len) < 0)
521         {
522             ftdi_usb_close_internal (ftdi);
523             ftdi_error_return(-9, "libusb_get_string_descriptor_ascii() failed");
524         }
525     }
526
527     if (need_open)
528         ftdi_usb_close_internal (ftdi);
529
530     return 0;
531 }
532
533 /**
534  * Internal function to determine the maximum packet size.
535  * \param ftdi pointer to ftdi_context
536  * \param dev libusb usb_dev to use
537  * \retval Maximum packet size for this device
538  */
539 static unsigned int _ftdi_determine_max_packet_size(struct ftdi_context *ftdi, libusb_device *dev)
540 {
541     struct libusb_device_descriptor desc;
542     struct libusb_config_descriptor *config0;
543     unsigned int packet_size;
544
545     // Sanity check
546     if (ftdi == NULL || dev == NULL)
547         return 64;
548
549     // Determine maximum packet size. Init with default value.
550     // New hi-speed devices from FTDI use a packet size of 512 bytes
551     // but could be connected to a normal speed USB hub -> 64 bytes packet size.
552     if (ftdi->type == TYPE_2232H || ftdi->type == TYPE_4232H || ftdi->type == TYPE_232H)
553         packet_size = 512;
554     else
555         packet_size = 64;
556
557     if (libusb_get_device_descriptor(dev, &desc) < 0)
558         return packet_size;
559
560     if (libusb_get_config_descriptor(dev, 0, &config0) < 0)
561         return packet_size;
562
563     if (desc.bNumConfigurations > 0)
564     {
565         if (ftdi->interface < config0->bNumInterfaces)
566         {
567             struct libusb_interface interface = config0->interface[ftdi->interface];
568             if (interface.num_altsetting > 0)
569             {
570                 struct libusb_interface_descriptor descriptor = interface.altsetting[0];
571                 if (descriptor.bNumEndpoints > 0)
572                 {
573                     packet_size = descriptor.endpoint[0].wMaxPacketSize;
574                 }
575             }
576         }
577     }
578
579     libusb_free_config_descriptor (config0);
580     return packet_size;
581 }
582
583 /**
584     Opens a ftdi device given by an usb_device.
585
586     \param ftdi pointer to ftdi_context
587     \param dev libusb usb_dev to use
588
589     \retval  0: all fine
590     \retval -3: unable to config device
591     \retval -4: unable to open device
592     \retval -5: unable to claim device
593     \retval -6: reset failed
594     \retval -7: set baudrate failed
595     \retval -8: ftdi context invalid
596     \retval -9: libusb_get_device_descriptor() failed
597     \retval -10: libusb_get_config_descriptor() failed
598     \retval -11: libusb_detach_kernel_driver() failed
599     \retval -12: libusb_get_configuration() failed
600 */
601 int ftdi_usb_open_dev(struct ftdi_context *ftdi, libusb_device *dev)
602 {
603     struct libusb_device_descriptor desc;
604     struct libusb_config_descriptor *config0;
605     int cfg, cfg0, detach_errno = 0;
606
607     if (ftdi == NULL)
608         ftdi_error_return(-8, "ftdi context invalid");
609
610     if (libusb_open(dev, &ftdi->usb_dev) < 0)
611         ftdi_error_return(-4, "libusb_open() failed");
612
613     if (libusb_get_device_descriptor(dev, &desc) < 0)
614         ftdi_error_return(-9, "libusb_get_device_descriptor() failed");
615
616     if (libusb_get_config_descriptor(dev, 0, &config0) < 0)
617         ftdi_error_return(-10, "libusb_get_config_descriptor() failed");
618     cfg0 = config0->bConfigurationValue;
619     libusb_free_config_descriptor (config0);
620
621     // Try to detach ftdi_sio kernel module.
622     //
623     // The return code is kept in a separate variable and only parsed
624     // if usb_set_configuration() or usb_claim_interface() fails as the
625     // detach operation might be denied and everything still works fine.
626     // Likely scenario is a static ftdi_sio kernel module.
627     if (ftdi->module_detach_mode == AUTO_DETACH_SIO_MODULE)
628     {
629         if (libusb_detach_kernel_driver(ftdi->usb_dev, ftdi->interface) !=0)
630             detach_errno = errno;
631     }
632     else if (ftdi->module_detach_mode == AUTO_DETACH_REATACH_SIO_MODULE)
633     {
634         if (libusb_set_auto_detach_kernel_driver(ftdi->usb_dev, 1) != LIBUSB_SUCCESS)
635             detach_errno = errno;
636     }
637
638     if (libusb_get_configuration (ftdi->usb_dev, &cfg) < 0)
639         ftdi_error_return(-12, "libusb_get_configuration () failed");
640     // set configuration (needed especially for windows)
641     // tolerate EBUSY: one device with one configuration, but two interfaces
642     // and libftdi sessions to both interfaces (e.g. FT2232)
643     if (desc.bNumConfigurations > 0 && cfg != cfg0)
644     {
645         if (libusb_set_configuration(ftdi->usb_dev, cfg0) < 0)
646         {
647             ftdi_usb_close_internal (ftdi);
648             if (detach_errno == EPERM)
649             {
650                 ftdi_error_return(-8, "inappropriate permissions on device!");
651             }
652             else
653             {
654                 ftdi_error_return(-3, "unable to set usb configuration. Make sure the default FTDI driver is not in use");
655             }
656         }
657     }
658
659     if (libusb_claim_interface(ftdi->usb_dev, ftdi->interface) < 0)
660     {
661         ftdi_usb_close_internal (ftdi);
662         if (detach_errno == EPERM)
663         {
664             ftdi_error_return(-8, "inappropriate permissions on device!");
665         }
666         else
667         {
668             ftdi_error_return(-5, "unable to claim usb device. Make sure the default FTDI driver is not in use");
669         }
670     }
671
672     if (ftdi_usb_reset (ftdi) != 0)
673     {
674         ftdi_usb_close_internal (ftdi);
675         ftdi_error_return(-6, "ftdi_usb_reset failed");
676     }
677
678     // Try to guess chip type
679     // Bug in the BM type chips: bcdDevice is 0x200 for serial == 0
680     if (desc.bcdDevice == 0x400 || (desc.bcdDevice == 0x200
681                                     && desc.iSerialNumber == 0))
682         ftdi->type = TYPE_BM;
683     else if (desc.bcdDevice == 0x200)
684         ftdi->type = TYPE_AM;
685     else if (desc.bcdDevice == 0x500)
686         ftdi->type = TYPE_2232C;
687     else if (desc.bcdDevice == 0x600)
688         ftdi->type = TYPE_R;
689     else if (desc.bcdDevice == 0x700)
690         ftdi->type = TYPE_2232H;
691     else if (desc.bcdDevice == 0x800)
692         ftdi->type = TYPE_4232H;
693     else if (desc.bcdDevice == 0x900)
694         ftdi->type = TYPE_232H;
695     else if (desc.bcdDevice == 0x1000)
696         ftdi->type = TYPE_230X;
697
698     // Determine maximum packet size
699     ftdi->max_packet_size = _ftdi_determine_max_packet_size(ftdi, dev);
700
701     if (ftdi_set_baudrate (ftdi, 9600) != 0)
702     {
703         ftdi_usb_close_internal (ftdi);
704         ftdi_error_return(-7, "set baudrate failed");
705     }
706
707     ftdi_error_return(0, "all fine");
708 }
709
710 /**
711     Opens the first device with a given vendor and product ids.
712
713     \param ftdi pointer to ftdi_context
714     \param vendor Vendor ID
715     \param product Product ID
716
717     \retval same as ftdi_usb_open_desc()
718 */
719 int ftdi_usb_open(struct ftdi_context *ftdi, int vendor, int product)
720 {
721     return ftdi_usb_open_desc(ftdi, vendor, product, NULL, NULL);
722 }
723
724 /**
725     Opens the first device with a given, vendor id, product id,
726     description and serial.
727
728     \param ftdi pointer to ftdi_context
729     \param vendor Vendor ID
730     \param product Product ID
731     \param description Description to search for. Use NULL if not needed.
732     \param serial Serial to search for. Use NULL if not needed.
733
734     \retval  0: all fine
735     \retval -3: usb device not found
736     \retval -4: unable to open device
737     \retval -5: unable to claim device
738     \retval -6: reset failed
739     \retval -7: set baudrate failed
740     \retval -8: get product description failed
741     \retval -9: get serial number failed
742     \retval -12: libusb_get_device_list() failed
743     \retval -13: libusb_get_device_descriptor() failed
744 */
745 int ftdi_usb_open_desc(struct ftdi_context *ftdi, int vendor, int product,
746                        const char* description, const char* serial)
747 {
748     return ftdi_usb_open_desc_index(ftdi,vendor,product,description,serial,0);
749 }
750
751 /**
752     Opens the index-th device with a given, vendor id, product id,
753     description and serial.
754
755     \param ftdi pointer to ftdi_context
756     \param vendor Vendor ID
757     \param product Product ID
758     \param description Description to search for. Use NULL if not needed.
759     \param serial Serial to search for. Use NULL if not needed.
760     \param index Number of matching device to open if there are more than one, starts with 0.
761
762     \retval  0: all fine
763     \retval -1: usb_find_busses() failed
764     \retval -2: usb_find_devices() failed
765     \retval -3: usb device not found
766     \retval -4: unable to open device
767     \retval -5: unable to claim device
768     \retval -6: reset failed
769     \retval -7: set baudrate failed
770     \retval -8: get product description failed
771     \retval -9: get serial number failed
772     \retval -10: unable to close device
773     \retval -11: ftdi context invalid
774     \retval -12: libusb_get_device_list() failed
775 */
776 int ftdi_usb_open_desc_index(struct ftdi_context *ftdi, int vendor, int product,
777                              const char* description, const char* serial, unsigned int index)
778 {
779     libusb_device *dev;
780     libusb_device **devs;
781     char string[256];
782     int i = 0;
783
784     if (ftdi == NULL)
785         ftdi_error_return(-11, "ftdi context invalid");
786
787     if (libusb_get_device_list(ftdi->usb_ctx, &devs) < 0)
788         ftdi_error_return(-12, "libusb_get_device_list() failed");
789
790     while ((dev = devs[i++]) != NULL)
791     {
792         struct libusb_device_descriptor desc;
793         int res;
794
795         if (libusb_get_device_descriptor(dev, &desc) < 0)
796             ftdi_error_return_free_device_list(-13, "libusb_get_device_descriptor() failed", devs);
797
798         if (desc.idVendor == vendor && desc.idProduct == product)
799         {
800             if (libusb_open(dev, &ftdi->usb_dev) < 0)
801                 ftdi_error_return_free_device_list(-4, "usb_open() failed", devs);
802
803             if (description != NULL)
804             {
805                 if (libusb_get_string_descriptor_ascii(ftdi->usb_dev, desc.iProduct, (unsigned char *)string, sizeof(string)) < 0)
806                 {
807                     ftdi_usb_close_internal (ftdi);
808                     ftdi_error_return_free_device_list(-8, "unable to fetch product description", devs);
809                 }
810                 if (strncmp(string, description, sizeof(string)) != 0)
811                 {
812                     ftdi_usb_close_internal (ftdi);
813                     continue;
814                 }
815             }
816             if (serial != NULL)
817             {
818                 if (libusb_get_string_descriptor_ascii(ftdi->usb_dev, desc.iSerialNumber, (unsigned char *)string, sizeof(string)) < 0)
819                 {
820                     ftdi_usb_close_internal (ftdi);
821                     ftdi_error_return_free_device_list(-9, "unable to fetch serial number", devs);
822                 }
823                 if (strncmp(string, serial, sizeof(string)) != 0)
824                 {
825                     ftdi_usb_close_internal (ftdi);
826                     continue;
827                 }
828             }
829
830             ftdi_usb_close_internal (ftdi);
831
832             if (index > 0)
833             {
834                 index--;
835                 continue;
836             }
837
838             res = ftdi_usb_open_dev(ftdi, dev);
839             libusb_free_device_list(devs,1);
840             return res;
841         }
842     }
843
844     // device not found
845     ftdi_error_return_free_device_list(-3, "device not found", devs);
846 }
847
848 /**
849     Opens the device at a given USB bus and device address.
850
851     \param ftdi pointer to ftdi_context
852     \param bus Bus number
853     \param addr Device address
854
855     \retval  0: all fine
856     \retval -1: usb_find_busses() failed
857     \retval -2: usb_find_devices() failed
858     \retval -3: usb device not found
859     \retval -4: unable to open device
860     \retval -5: unable to claim device
861     \retval -6: reset failed
862     \retval -7: set baudrate failed
863     \retval -8: get product description failed
864     \retval -9: get serial number failed
865     \retval -10: unable to close device
866     \retval -11: ftdi context invalid
867     \retval -12: libusb_get_device_list() failed
868 */
869 int ftdi_usb_open_bus_addr(struct ftdi_context *ftdi, uint8_t bus, uint8_t addr)
870 {
871     libusb_device *dev;
872     libusb_device **devs;
873     int i = 0;
874
875     if (ftdi == NULL)
876         ftdi_error_return(-11, "ftdi context invalid");
877
878     if (libusb_get_device_list(ftdi->usb_ctx, &devs) < 0)
879         ftdi_error_return(-12, "libusb_get_device_list() failed");
880
881     while ((dev = devs[i++]) != NULL)
882     {
883         if (libusb_get_bus_number(dev) == bus && libusb_get_device_address(dev) == addr)
884         {
885             int res;
886             res = ftdi_usb_open_dev(ftdi, dev);
887             libusb_free_device_list(devs,1);
888             return res;
889         }
890     }
891
892     // device not found
893     ftdi_error_return_free_device_list(-3, "device not found", devs);
894 }
895
896 /**
897     Opens the ftdi-device described by a description-string.
898     Intended to be used for parsing a device-description given as commandline argument.
899
900     \param ftdi pointer to ftdi_context
901     \param description NULL-terminated description-string, using this format:
902         \li <tt>d:\<devicenode></tt> path of bus and device-node (e.g. "003/001") within usb device tree (usually at /proc/bus/usb/)
903         \li <tt>i:\<vendor>:\<product></tt> first device with given vendor and product id, ids can be decimal, octal (preceded by "0") or hex (preceded by "0x")
904         \li <tt>i:\<vendor>:\<product>:\<index></tt> as above with index being the number of the device (starting with 0) if there are more than one
905         \li <tt>s:\<vendor>:\<product>:\<serial></tt> first device with given vendor id, product id and serial string
906
907     \note The description format may be extended in later versions.
908
909     \retval  0: all fine
910     \retval -2: libusb_get_device_list() failed
911     \retval -3: usb device not found
912     \retval -4: unable to open device
913     \retval -5: unable to claim device
914     \retval -6: reset failed
915     \retval -7: set baudrate failed
916     \retval -8: get product description failed
917     \retval -9: get serial number failed
918     \retval -10: unable to close device
919     \retval -11: illegal description format
920     \retval -12: ftdi context invalid
921 */
922 int ftdi_usb_open_string(struct ftdi_context *ftdi, const char* description)
923 {
924     if (ftdi == NULL)
925         ftdi_error_return(-12, "ftdi context invalid");
926
927     if (description[0] == 0 || description[1] != ':')
928         ftdi_error_return(-11, "illegal description format");
929
930     if (description[0] == 'd')
931     {
932         libusb_device *dev;
933         libusb_device **devs;
934         unsigned int bus_number, device_address;
935         int i = 0;
936
937         if (libusb_get_device_list(ftdi->usb_ctx, &devs) < 0)
938             ftdi_error_return(-2, "libusb_get_device_list() failed");
939
940         /* XXX: This doesn't handle symlinks/odd paths/etc... */
941         if (sscanf (description + 2, "%u/%u", &bus_number, &device_address) != 2)
942             ftdi_error_return_free_device_list(-11, "illegal description format", devs);
943
944         while ((dev = devs[i++]) != NULL)
945         {
946             int ret;
947             if (bus_number == libusb_get_bus_number (dev)
948                     && device_address == libusb_get_device_address (dev))
949             {
950                 ret = ftdi_usb_open_dev(ftdi, dev);
951                 libusb_free_device_list(devs,1);
952                 return ret;
953             }
954         }
955
956         // device not found
957         ftdi_error_return_free_device_list(-3, "device not found", devs);
958     }
959     else if (description[0] == 'i' || description[0] == 's')
960     {
961         unsigned int vendor;
962         unsigned int product;
963         unsigned int index=0;
964         const char *serial=NULL;
965         const char *startp, *endp;
966
967         errno=0;
968         startp=description+2;
969         vendor=strtoul((char*)startp,(char**)&endp,0);
970         if (*endp != ':' || endp == startp || errno != 0)
971             ftdi_error_return(-11, "illegal description format");
972
973         startp=endp+1;
974         product=strtoul((char*)startp,(char**)&endp,0);
975         if (endp == startp || errno != 0)
976             ftdi_error_return(-11, "illegal description format");
977
978         if (description[0] == 'i' && *endp != 0)
979         {
980             /* optional index field in i-mode */
981             if (*endp != ':')
982                 ftdi_error_return(-11, "illegal description format");
983
984             startp=endp+1;
985             index=strtoul((char*)startp,(char**)&endp,0);
986             if (*endp != 0 || endp == startp || errno != 0)
987                 ftdi_error_return(-11, "illegal description format");
988         }
989         if (description[0] == 's')
990         {
991             if (*endp != ':')
992                 ftdi_error_return(-11, "illegal description format");
993
994             /* rest of the description is the serial */
995             serial=endp+1;
996         }
997
998         return ftdi_usb_open_desc_index(ftdi, vendor, product, NULL, serial, index);
999     }
1000     else
1001     {
1002         ftdi_error_return(-11, "illegal description format");
1003     }
1004 }
1005
1006 /**
1007     Resets the ftdi device.
1008
1009     \param ftdi pointer to ftdi_context
1010
1011     \retval  0: all fine
1012     \retval -1: FTDI reset failed
1013     \retval -2: USB device unavailable
1014 */
1015 int ftdi_usb_reset(struct ftdi_context *ftdi)
1016 {
1017     if (ftdi == NULL || ftdi->usb_dev == NULL)
1018         ftdi_error_return(-2, "USB device unavailable");
1019
1020     if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE,
1021                                 SIO_RESET_REQUEST, SIO_RESET_SIO,
1022                                 ftdi->index, NULL, 0, ftdi->usb_write_timeout) < 0)
1023         ftdi_error_return(-1,"FTDI reset failed");
1024
1025     // Invalidate data in the readbuffer
1026     ftdi->readbuffer_offset = 0;
1027     ftdi->readbuffer_remaining = 0;
1028
1029     return 0;
1030 }
1031
1032 /**
1033     Clears the read buffer on the chip and the internal read buffer.
1034     This is the correct behavior for an RX flush.
1035
1036     \param ftdi pointer to ftdi_context
1037
1038     \retval  0: all fine
1039     \retval -1: read buffer purge failed
1040     \retval -2: USB device unavailable
1041 */
1042 int ftdi_tciflush(struct ftdi_context *ftdi)
1043 {
1044     if (ftdi == NULL || ftdi->usb_dev == NULL)
1045         ftdi_error_return(-2, "USB device unavailable");
1046
1047     if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE,
1048                                 SIO_RESET_REQUEST, SIO_TCIFLUSH,
1049                                 ftdi->index, NULL, 0, ftdi->usb_write_timeout) < 0)
1050         ftdi_error_return(-1, "FTDI purge of RX buffer failed");
1051
1052     // Invalidate data in the readbuffer
1053     ftdi->readbuffer_offset = 0;
1054     ftdi->readbuffer_remaining = 0;
1055
1056     return 0;
1057 }
1058
1059
1060 /**
1061     Clears the write buffer on the chip and the internal read buffer.
1062     This is incorrect behavior for an RX flush.
1063
1064     \param ftdi pointer to ftdi_context
1065
1066     \retval  0: all fine
1067     \retval -1: write buffer purge failed
1068     \retval -2: USB device unavailable
1069
1070     \deprecated Use \ref ftdi_tciflush(struct ftdi_context *ftdi)
1071 */
1072 int ftdi_usb_purge_rx_buffer(struct ftdi_context *ftdi)
1073 {
1074     if (ftdi == NULL || ftdi->usb_dev == NULL)
1075         ftdi_error_return(-2, "USB device unavailable");
1076
1077     if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE,
1078                                 SIO_RESET_REQUEST, SIO_RESET_PURGE_RX,
1079                                 ftdi->index, NULL, 0, ftdi->usb_write_timeout) < 0)
1080         ftdi_error_return(-1, "FTDI purge of RX buffer failed");
1081
1082     // Invalidate data in the readbuffer
1083     ftdi->readbuffer_offset = 0;
1084     ftdi->readbuffer_remaining = 0;
1085
1086     return 0;
1087 }
1088
1089 /**
1090     Clears the write buffer on the chip.
1091     This is correct behavior for a TX flush.
1092
1093     \param ftdi pointer to ftdi_context
1094
1095     \retval  0: all fine
1096     \retval -1: write buffer purge failed
1097     \retval -2: USB device unavailable
1098 */
1099 int ftdi_tcoflush(struct ftdi_context *ftdi)
1100 {
1101     if (ftdi == NULL || ftdi->usb_dev == NULL)
1102         ftdi_error_return(-2, "USB device unavailable");
1103
1104     if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE,
1105                                 SIO_RESET_REQUEST, SIO_TCOFLUSH,
1106                                 ftdi->index, NULL, 0, ftdi->usb_write_timeout) < 0)
1107         ftdi_error_return(-1, "FTDI purge of TX buffer failed");
1108
1109     return 0;
1110 }
1111
1112
1113 /**
1114     Clears the read buffer on the chip.
1115     This is incorrect behavior for a TX flush.
1116
1117     \param ftdi pointer to ftdi_context
1118
1119     \retval  0: all fine
1120     \retval -1: read buffer purge failed
1121     \retval -2: USB device unavailable
1122
1123     \deprecated Use \ref ftdi_tcoflush(struct ftdi_context *ftdi)
1124 */
1125 int ftdi_usb_purge_tx_buffer(struct ftdi_context *ftdi)
1126 {
1127     if (ftdi == NULL || ftdi->usb_dev == NULL)
1128         ftdi_error_return(-2, "USB device unavailable");
1129
1130     if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE,
1131                                 SIO_RESET_REQUEST, SIO_RESET_PURGE_TX,
1132                                 ftdi->index, NULL, 0, ftdi->usb_write_timeout) < 0)
1133         ftdi_error_return(-1, "FTDI purge of TX buffer failed");
1134
1135     return 0;
1136 }
1137
1138 /**
1139     Clears the RX and TX FIFOs on the chip and the internal read buffer.
1140     This is correct behavior for both RX and TX flush.
1141
1142     \param ftdi pointer to ftdi_context
1143
1144     \retval  0: all fine
1145     \retval -1: read buffer purge failed
1146     \retval -2: write buffer purge failed
1147     \retval -3: USB device unavailable
1148 */
1149 int ftdi_tcioflush(struct ftdi_context *ftdi)
1150 {
1151     int result;
1152
1153     if (ftdi == NULL || ftdi->usb_dev == NULL)
1154         ftdi_error_return(-3, "USB device unavailable");
1155
1156     result = ftdi_tcoflush(ftdi);
1157     if (result < 0)
1158         return -1;
1159
1160     result = ftdi_tciflush(ftdi);
1161     if (result < 0)
1162         return -2;
1163
1164     return 0;
1165 }
1166
1167 /**
1168     Clears the buffers on the chip and the internal read buffer.
1169     While coded incorrectly, the result is satisfactory.
1170
1171     \param ftdi pointer to ftdi_context
1172
1173     \retval  0: all fine
1174     \retval -1: read buffer purge failed
1175     \retval -2: write buffer purge failed
1176     \retval -3: USB device unavailable
1177
1178     \deprecated Use \ref ftdi_tcioflush(struct ftdi_context *ftdi)
1179 */
1180 int ftdi_usb_purge_buffers(struct ftdi_context *ftdi)
1181 {
1182     int result;
1183
1184     if (ftdi == NULL || ftdi->usb_dev == NULL)
1185         ftdi_error_return(-3, "USB device unavailable");
1186
1187     result = ftdi_usb_purge_rx_buffer(ftdi);
1188     if (result < 0)
1189         return -1;
1190
1191     result = ftdi_usb_purge_tx_buffer(ftdi);
1192     if (result < 0)
1193         return -2;
1194
1195     return 0;
1196 }
1197
1198
1199
1200 /**
1201     Closes the ftdi device. Call ftdi_deinit() if you're cleaning up.
1202
1203     \param ftdi pointer to ftdi_context
1204
1205     \retval  0: all fine
1206     \retval -1: usb_release failed
1207     \retval -3: ftdi context invalid
1208 */
1209 int ftdi_usb_close(struct ftdi_context *ftdi)
1210 {
1211     int rtn = 0;
1212
1213     if (ftdi == NULL)
1214         ftdi_error_return(-3, "ftdi context invalid");
1215
1216     if (ftdi->usb_dev != NULL)
1217         if (libusb_release_interface(ftdi->usb_dev, ftdi->interface) < 0)
1218             rtn = -1;
1219
1220     ftdi_usb_close_internal (ftdi);
1221
1222     return rtn;
1223 }
1224
1225 /*  ftdi_to_clkbits_AM For the AM device, convert a requested baudrate
1226                     to encoded divisor and the achievable baudrate
1227     Function is only used internally
1228     \internal
1229
1230     See AN120
1231    clk/1   -> 0
1232    clk/1.5 -> 1
1233    clk/2   -> 2
1234    From /2, 0.125/ 0.25 and 0.5 steps may be taken
1235    The fractional part has frac_code encoding
1236 */
1237 static int ftdi_to_clkbits_AM(int baudrate, unsigned long *encoded_divisor)
1238
1239 {
1240     static const char frac_code[8] = {0, 3, 2, 4, 1, 5, 6, 7};
1241     static const char am_adjust_up[8] = {0, 0, 0, 1, 0, 3, 2, 1};
1242     static const char am_adjust_dn[8] = {0, 0, 0, 1, 0, 1, 2, 3};
1243     int divisor, best_divisor, best_baud, best_baud_diff;
1244     int i;
1245     divisor = 24000000 / baudrate;
1246
1247     // Round down to supported fraction (AM only)
1248     divisor -= am_adjust_dn[divisor & 7];
1249
1250     // Try this divisor and the one above it (because division rounds down)
1251     best_divisor = 0;
1252     best_baud = 0;
1253     best_baud_diff = 0;
1254     for (i = 0; i < 2; i++)
1255     {
1256         int try_divisor = divisor + i;
1257         int baud_estimate;
1258         int baud_diff;
1259
1260         // Round up to supported divisor value
1261         if (try_divisor <= 8)
1262         {
1263             // Round up to minimum supported divisor
1264             try_divisor = 8;
1265         }
1266         else if (divisor < 16)
1267         {
1268             // AM doesn't support divisors 9 through 15 inclusive
1269             try_divisor = 16;
1270         }
1271         else
1272         {
1273             // Round up to supported fraction (AM only)
1274             try_divisor += am_adjust_up[try_divisor & 7];
1275             if (try_divisor > 0x1FFF8)
1276             {
1277                 // Round down to maximum supported divisor value (for AM)
1278                 try_divisor = 0x1FFF8;
1279             }
1280         }
1281         // Get estimated baud rate (to nearest integer)
1282         baud_estimate = (24000000 + (try_divisor / 2)) / try_divisor;
1283         // Get absolute difference from requested baud rate
1284         if (baud_estimate < baudrate)
1285         {
1286             baud_diff = baudrate - baud_estimate;
1287         }
1288         else
1289         {
1290             baud_diff = baud_estimate - baudrate;
1291         }
1292         if (i == 0 || baud_diff < best_baud_diff)
1293         {
1294             // Closest to requested baud rate so far
1295             best_divisor = try_divisor;
1296             best_baud = baud_estimate;
1297             best_baud_diff = baud_diff;
1298             if (baud_diff == 0)
1299             {
1300                 // Spot on! No point trying
1301                 break;
1302             }
1303         }
1304     }
1305     // Encode the best divisor value
1306     *encoded_divisor = (best_divisor >> 3) | (frac_code[best_divisor & 7] << 14);
1307     // Deal with special cases for encoded value
1308     if (*encoded_divisor == 1)
1309     {
1310         *encoded_divisor = 0;    // 3000000 baud
1311     }
1312     else if (*encoded_divisor == 0x4001)
1313     {
1314         *encoded_divisor = 1;    // 2000000 baud (BM only)
1315     }
1316     return best_baud;
1317 }
1318
1319 /*  ftdi_to_clkbits Convert a requested baudrate for a given system clock and predivisor
1320                     to encoded divisor and the achievable baudrate
1321     Function is only used internally
1322     \internal
1323
1324     See AN120
1325    clk/1   -> 0
1326    clk/1.5 -> 1
1327    clk/2   -> 2
1328    From /2, 0.125 steps may be taken.
1329    The fractional part has frac_code encoding
1330
1331    value[13:0] of value is the divisor
1332    index[9] mean 12 MHz Base(120 MHz/10) rate versus 3 MHz (48 MHz/16) else
1333
1334    H Type have all features above with
1335    {index[8],value[15:14]} is the encoded subdivisor
1336
1337    FT232R, FT2232 and FT232BM have no option for 12 MHz and with
1338    {index[0],value[15:14]} is the encoded subdivisor
1339
1340    AM Type chips have only four fractional subdivisors at value[15:14]
1341    for subdivisors 0, 0.5, 0.25, 0.125
1342 */
1343 static int ftdi_to_clkbits(int baudrate, int clk, int clk_div, unsigned long *encoded_divisor)
1344 {
1345     static const char frac_code[8] = {0, 3, 2, 4, 1, 5, 6, 7};
1346     int best_baud = 0;
1347     int divisor, best_divisor;
1348     if (baudrate >=  clk/clk_div)
1349     {
1350         *encoded_divisor = 0;
1351         best_baud = clk/clk_div;
1352     }
1353     else if (baudrate >=  clk/(clk_div + clk_div/2))
1354     {
1355         *encoded_divisor = 1;
1356         best_baud = clk/(clk_div + clk_div/2);
1357     }
1358     else if (baudrate >=  clk/(2*clk_div))
1359     {
1360         *encoded_divisor = 2;
1361         best_baud = clk/(2*clk_div);
1362     }
1363     else
1364     {
1365         /* We divide by 16 to have 3 fractional bits and one bit for rounding */
1366         divisor = clk*16/clk_div / baudrate;
1367         if (divisor & 1) /* Decide if to round up or down*/
1368             best_divisor = divisor /2 +1;
1369         else
1370             best_divisor = divisor/2;
1371         if(best_divisor > 0x20000)
1372             best_divisor = 0x1ffff;
1373         best_baud = clk*16/clk_div/best_divisor;
1374         if (best_baud & 1) /* Decide if to round up or down*/
1375             best_baud = best_baud /2 +1;
1376         else
1377             best_baud = best_baud /2;
1378         *encoded_divisor = (best_divisor >> 3) | (frac_code[best_divisor & 0x7] << 14);
1379     }
1380     return best_baud;
1381 }
1382 /**
1383     ftdi_convert_baudrate returns nearest supported baud rate to that requested.
1384     Function is only used internally
1385     \internal
1386 */
1387 static int ftdi_convert_baudrate(int baudrate, struct ftdi_context *ftdi,
1388                                  unsigned short *value, unsigned short *index)
1389 {
1390     int best_baud;
1391     unsigned long encoded_divisor;
1392
1393     if (baudrate <= 0)
1394     {
1395         // Return error
1396         return -1;
1397     }
1398
1399 #define H_CLK 120000000
1400 #define C_CLK  48000000
1401     if ((ftdi->type == TYPE_2232H) || (ftdi->type == TYPE_4232H) || (ftdi->type == TYPE_232H))
1402     {
1403         if(baudrate*10 > H_CLK /0x3fff)
1404         {
1405             /* On H Devices, use 12 000 000 Baudrate when possible
1406                We have a 14 bit divisor, a 1 bit divisor switch (10 or 16)
1407                three fractional bits and a 120 MHz clock
1408                Assume AN_120 "Sub-integer divisors between 0 and 2 are not allowed" holds for
1409                DIV/10 CLK too, so /1, /1.5 and /2 can be handled the same*/
1410             best_baud = ftdi_to_clkbits(baudrate, H_CLK, 10, &encoded_divisor);
1411             encoded_divisor |= 0x20000; /* switch on CLK/10*/
1412         }
1413         else
1414             best_baud = ftdi_to_clkbits(baudrate, C_CLK, 16, &encoded_divisor);
1415     }
1416     else if ((ftdi->type == TYPE_BM) || (ftdi->type == TYPE_2232C) || (ftdi->type == TYPE_R) || (ftdi->type == TYPE_230X))
1417     {
1418         best_baud = ftdi_to_clkbits(baudrate, C_CLK, 16, &encoded_divisor);
1419     }
1420     else
1421     {
1422         best_baud = ftdi_to_clkbits_AM(baudrate, &encoded_divisor);
1423     }
1424     // Split into "value" and "index" values
1425     *value = (unsigned short)(encoded_divisor & 0xFFFF);
1426     if (ftdi->type == TYPE_2232H || ftdi->type == TYPE_4232H || ftdi->type == TYPE_232H)
1427     {
1428         *index = (unsigned short)(encoded_divisor >> 8);
1429         *index &= 0xFF00;
1430         *index |= ftdi->index;
1431     }
1432     else
1433         *index = (unsigned short)(encoded_divisor >> 16);
1434
1435     // Return the nearest baud rate
1436     return best_baud;
1437 }
1438
1439 /**
1440  * @brief Wrapper function to export ftdi_convert_baudrate() to the unit test
1441  * Do not use, it's only for the unit test framework
1442  **/
1443 int convert_baudrate_UT_export(int baudrate, struct ftdi_context *ftdi,
1444                                unsigned short *value, unsigned short *index)
1445 {
1446     return ftdi_convert_baudrate(baudrate, ftdi, value, index);
1447 }
1448
1449 /**
1450     Sets the chip baud rate
1451
1452     \param ftdi pointer to ftdi_context
1453     \param baudrate baud rate to set
1454
1455     \retval  0: all fine
1456     \retval -1: invalid baudrate
1457     \retval -2: setting baudrate failed
1458     \retval -3: USB device unavailable
1459 */
1460 int ftdi_set_baudrate(struct ftdi_context *ftdi, int baudrate)
1461 {
1462     unsigned short value, index;
1463     int actual_baudrate;
1464
1465     if (ftdi == NULL || ftdi->usb_dev == NULL)
1466         ftdi_error_return(-3, "USB device unavailable");
1467
1468     if (ftdi->bitbang_enabled)
1469     {
1470         baudrate = baudrate*4;
1471     }
1472
1473     actual_baudrate = ftdi_convert_baudrate(baudrate, ftdi, &value, &index);
1474     if (actual_baudrate <= 0)
1475         ftdi_error_return (-1, "Silly baudrate <= 0.");
1476
1477     // Check within tolerance (about 5%)
1478     if ((actual_baudrate * 2 < baudrate /* Catch overflows */ )
1479             || ((actual_baudrate < baudrate)
1480                 ? (actual_baudrate * 21 < baudrate * 20)
1481                 : (baudrate * 21 < actual_baudrate * 20)))
1482         ftdi_error_return (-1, "Unsupported baudrate. Note: bitbang baudrates are automatically multiplied by 4");
1483
1484     if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE,
1485                                 SIO_SET_BAUDRATE_REQUEST, value,
1486                                 index, NULL, 0, ftdi->usb_write_timeout) < 0)
1487         ftdi_error_return (-2, "Setting new baudrate failed");
1488
1489     ftdi->baudrate = baudrate;
1490     return 0;
1491 }
1492
1493 /**
1494     Set (RS232) line characteristics.
1495     The break type can only be set via ftdi_set_line_property2()
1496     and defaults to "off".
1497
1498     \param ftdi pointer to ftdi_context
1499     \param bits Number of bits
1500     \param sbit Number of stop bits
1501     \param parity Parity mode
1502
1503     \retval  0: all fine
1504     \retval -1: Setting line property failed
1505 */
1506 int ftdi_set_line_property(struct ftdi_context *ftdi, enum ftdi_bits_type bits,
1507                            enum ftdi_stopbits_type sbit, enum ftdi_parity_type parity)
1508 {
1509     return ftdi_set_line_property2(ftdi, bits, sbit, parity, BREAK_OFF);
1510 }
1511
1512 /**
1513     Set (RS232) line characteristics
1514
1515     \param ftdi pointer to ftdi_context
1516     \param bits Number of bits
1517     \param sbit Number of stop bits
1518     \param parity Parity mode
1519     \param break_type Break type
1520
1521     \retval  0: all fine
1522     \retval -1: Setting line property failed
1523     \retval -2: USB device unavailable
1524 */
1525 int ftdi_set_line_property2(struct ftdi_context *ftdi, enum ftdi_bits_type bits,
1526                             enum ftdi_stopbits_type sbit, enum ftdi_parity_type parity,
1527                             enum ftdi_break_type break_type)
1528 {
1529     unsigned short value = bits;
1530
1531     if (ftdi == NULL || ftdi->usb_dev == NULL)
1532         ftdi_error_return(-2, "USB device unavailable");
1533
1534     switch (parity)
1535     {
1536         case NONE:
1537             value |= (0x00 << 8);
1538             break;
1539         case ODD:
1540             value |= (0x01 << 8);
1541             break;
1542         case EVEN:
1543             value |= (0x02 << 8);
1544             break;
1545         case MARK:
1546             value |= (0x03 << 8);
1547             break;
1548         case SPACE:
1549             value |= (0x04 << 8);
1550             break;
1551     }
1552
1553     switch (sbit)
1554     {
1555         case STOP_BIT_1:
1556             value |= (0x00 << 11);
1557             break;
1558         case STOP_BIT_15:
1559             value |= (0x01 << 11);
1560             break;
1561         case STOP_BIT_2:
1562             value |= (0x02 << 11);
1563             break;
1564     }
1565
1566     switch (break_type)
1567     {
1568         case BREAK_OFF:
1569             value |= (0x00 << 14);
1570             break;
1571         case BREAK_ON:
1572             value |= (0x01 << 14);
1573             break;
1574     }
1575
1576     if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE,
1577                                 SIO_SET_DATA_REQUEST, value,
1578                                 ftdi->index, NULL, 0, ftdi->usb_write_timeout) < 0)
1579         ftdi_error_return (-1, "Setting new line property failed");
1580
1581     return 0;
1582 }
1583
1584 /**
1585     Writes data in chunks (see ftdi_write_data_set_chunksize()) to the chip
1586
1587     \param ftdi pointer to ftdi_context
1588     \param buf Buffer with the data
1589     \param size Size of the buffer
1590
1591     \retval -666: USB device unavailable
1592     \retval <0: error code from usb_bulk_write()
1593     \retval >0: number of bytes written
1594 */
1595 int ftdi_write_data(struct ftdi_context *ftdi, const unsigned char *buf, int size)
1596 {
1597     int offset = 0;
1598     int actual_length;
1599
1600     if (ftdi == NULL || ftdi->usb_dev == NULL)
1601         ftdi_error_return(-666, "USB device unavailable");
1602
1603     while (offset < size)
1604     {
1605         int write_size = ftdi->writebuffer_chunksize;
1606
1607         if (offset+write_size > size)
1608             write_size = size-offset;
1609
1610         if (libusb_bulk_transfer(ftdi->usb_dev, ftdi->in_ep, (unsigned char *)buf+offset, write_size, &actual_length, ftdi->usb_write_timeout) < 0)
1611             ftdi_error_return(-1, "usb bulk write failed");
1612
1613         offset += actual_length;
1614     }
1615
1616     return offset;
1617 }
1618
1619 static void LIBUSB_CALL ftdi_read_data_cb(struct libusb_transfer *transfer)
1620 {
1621     struct ftdi_transfer_control *tc = (struct ftdi_transfer_control *) transfer->user_data;
1622     struct ftdi_context *ftdi = tc->ftdi;
1623     int packet_size, actual_length, num_of_chunks, chunk_remains, i, ret;
1624
1625     packet_size = ftdi->max_packet_size;
1626
1627     actual_length = transfer->actual_length;
1628
1629     if (actual_length > 2)
1630     {
1631         // skip FTDI status bytes.
1632         // Maybe stored in the future to enable modem use
1633         num_of_chunks = actual_length / packet_size;
1634         chunk_remains = actual_length % packet_size;
1635         //printf("actual_length = %X, num_of_chunks = %X, chunk_remains = %X, readbuffer_offset = %X\n", actual_length, num_of_chunks, chunk_remains, ftdi->readbuffer_offset);
1636
1637         ftdi->readbuffer_offset += 2;
1638         actual_length -= 2;
1639
1640         if (actual_length > packet_size - 2)
1641         {
1642             for (i = 1; i < num_of_chunks; i++)
1643                 memmove (ftdi->readbuffer+ftdi->readbuffer_offset+(packet_size - 2)*i,
1644                          ftdi->readbuffer+ftdi->readbuffer_offset+packet_size*i,
1645                          packet_size - 2);
1646             if (chunk_remains > 2)
1647             {
1648                 memmove (ftdi->readbuffer+ftdi->readbuffer_offset+(packet_size - 2)*i,
1649                          ftdi->readbuffer+ftdi->readbuffer_offset+packet_size*i,
1650                          chunk_remains-2);
1651                 actual_length -= 2*num_of_chunks;
1652             }
1653             else
1654                 actual_length -= 2*(num_of_chunks-1)+chunk_remains;
1655         }
1656
1657         if (actual_length > 0)
1658         {
1659             // data still fits in buf?
1660             if (tc->offset + actual_length <= tc->size)
1661             {
1662                 memcpy (tc->buf + tc->offset, ftdi->readbuffer + ftdi->readbuffer_offset, actual_length);
1663                 //printf("buf[0] = %X, buf[1] = %X\n", buf[0], buf[1]);
1664                 tc->offset += actual_length;
1665
1666                 ftdi->readbuffer_offset = 0;
1667                 ftdi->readbuffer_remaining = 0;
1668
1669                 /* Did we read exactly the right amount of bytes? */
1670                 if (tc->offset == tc->size)
1671                 {
1672                     //printf("read_data exact rem %d offset %d\n",
1673                     //ftdi->readbuffer_remaining, offset);
1674                     tc->completed = 1;
1675                     return;
1676                 }
1677             }
1678             else
1679             {
1680                 // only copy part of the data or size <= readbuffer_chunksize
1681                 int part_size = tc->size - tc->offset;
1682                 memcpy (tc->buf + tc->offset, ftdi->readbuffer + ftdi->readbuffer_offset, part_size);
1683                 tc->offset += part_size;
1684
1685                 ftdi->readbuffer_offset += part_size;
1686                 ftdi->readbuffer_remaining = actual_length - part_size;
1687
1688                 /* printf("Returning part: %d - size: %d - offset: %d - actual_length: %d - remaining: %d\n",
1689                 part_size, size, offset, actual_length, ftdi->readbuffer_remaining); */
1690                 tc->completed = 1;
1691                 return;
1692             }
1693         }
1694     }
1695
1696     if (transfer->status == LIBUSB_TRANSFER_CANCELLED)
1697         tc->completed = LIBUSB_TRANSFER_CANCELLED;
1698     else
1699     {
1700         ret = libusb_submit_transfer (transfer);
1701         if (ret < 0)
1702             tc->completed = 1;
1703     }
1704 }
1705
1706
1707 static void LIBUSB_CALL ftdi_write_data_cb(struct libusb_transfer *transfer)
1708 {
1709     struct ftdi_transfer_control *tc = (struct ftdi_transfer_control *) transfer->user_data;
1710     struct ftdi_context *ftdi = tc->ftdi;
1711
1712     tc->offset += transfer->actual_length;
1713
1714     if (tc->offset == tc->size)
1715     {
1716         tc->completed = 1;
1717     }
1718     else
1719     {
1720         int write_size = ftdi->writebuffer_chunksize;
1721         int ret;
1722
1723         if (tc->offset + write_size > tc->size)
1724             write_size = tc->size - tc->offset;
1725
1726         transfer->length = write_size;
1727         transfer->buffer = tc->buf + tc->offset;
1728
1729         if (transfer->status == LIBUSB_TRANSFER_CANCELLED)
1730             tc->completed = LIBUSB_TRANSFER_CANCELLED;
1731         else
1732         {
1733             ret = libusb_submit_transfer (transfer);
1734             if (ret < 0)
1735                 tc->completed = 1;
1736         }
1737     }
1738 }
1739
1740
1741 /**
1742     Writes data to the chip. Does not wait for completion of the transfer
1743     nor does it make sure that the transfer was successful.
1744
1745     Use libusb 1.0 asynchronous API.
1746
1747     \param ftdi pointer to ftdi_context
1748     \param buf Buffer with the data
1749     \param size Size of the buffer
1750
1751     \retval NULL: Some error happens when submit transfer
1752     \retval !NULL: Pointer to a ftdi_transfer_control
1753 */
1754
1755 struct ftdi_transfer_control *ftdi_write_data_submit(struct ftdi_context *ftdi, unsigned char *buf, int size)
1756 {
1757     struct ftdi_transfer_control *tc;
1758     struct libusb_transfer *transfer;
1759     int write_size, ret;
1760
1761     if (ftdi == NULL || ftdi->usb_dev == NULL)
1762         return NULL;
1763
1764     tc = (struct ftdi_transfer_control *) malloc (sizeof (*tc));
1765     if (!tc)
1766         return NULL;
1767
1768     transfer = libusb_alloc_transfer(0);
1769     if (!transfer)
1770     {
1771         free(tc);
1772         return NULL;
1773     }
1774
1775     tc->ftdi = ftdi;
1776     tc->completed = 0;
1777     tc->buf = buf;
1778     tc->size = size;
1779     tc->offset = 0;
1780
1781     if (size < (int)ftdi->writebuffer_chunksize)
1782         write_size = size;
1783     else
1784         write_size = ftdi->writebuffer_chunksize;
1785
1786     libusb_fill_bulk_transfer(transfer, ftdi->usb_dev, ftdi->in_ep, buf,
1787                               write_size, ftdi_write_data_cb, tc,
1788                               ftdi->usb_write_timeout);
1789     transfer->type = LIBUSB_TRANSFER_TYPE_BULK;
1790
1791     ret = libusb_submit_transfer(transfer);
1792     if (ret < 0)
1793     {
1794         libusb_free_transfer(transfer);
1795         free(tc);
1796         return NULL;
1797     }
1798     tc->transfer = transfer;
1799
1800     return tc;
1801 }
1802
1803 /**
1804     Reads data from the chip. Does not wait for completion of the transfer
1805     nor does it make sure that the transfer was successful.
1806
1807     Use libusb 1.0 asynchronous API.
1808
1809     \param ftdi pointer to ftdi_context
1810     \param buf Buffer with the data
1811     \param size Size of the buffer
1812
1813     \retval NULL: Some error happens when submit transfer
1814     \retval !NULL: Pointer to a ftdi_transfer_control
1815 */
1816
1817 struct ftdi_transfer_control *ftdi_read_data_submit(struct ftdi_context *ftdi, unsigned char *buf, int size)
1818 {
1819     struct ftdi_transfer_control *tc;
1820     struct libusb_transfer *transfer;
1821     int ret;
1822
1823     if (ftdi == NULL || ftdi->usb_dev == NULL)
1824         return NULL;
1825
1826     tc = (struct ftdi_transfer_control *) malloc (sizeof (*tc));
1827     if (!tc)
1828         return NULL;
1829
1830     tc->ftdi = ftdi;
1831     tc->buf = buf;
1832     tc->size = size;
1833
1834     if (size <= (int)ftdi->readbuffer_remaining)
1835     {
1836         memcpy (buf, ftdi->readbuffer+ftdi->readbuffer_offset, size);
1837
1838         // Fix offsets
1839         ftdi->readbuffer_remaining -= size;
1840         ftdi->readbuffer_offset += size;
1841
1842         /* printf("Returning bytes from buffer: %d - remaining: %d\n", size, ftdi->readbuffer_remaining); */
1843
1844         tc->completed = 1;
1845         tc->offset = size;
1846         tc->transfer = NULL;
1847         return tc;
1848     }
1849
1850     tc->completed = 0;
1851     if (ftdi->readbuffer_remaining != 0)
1852     {
1853         memcpy (buf, ftdi->readbuffer+ftdi->readbuffer_offset, ftdi->readbuffer_remaining);
1854
1855         tc->offset = ftdi->readbuffer_remaining;
1856     }
1857     else
1858         tc->offset = 0;
1859
1860     transfer = libusb_alloc_transfer(0);
1861     if (!transfer)
1862     {
1863         free (tc);
1864         return NULL;
1865     }
1866
1867     ftdi->readbuffer_remaining = 0;
1868     ftdi->readbuffer_offset = 0;
1869
1870     libusb_fill_bulk_transfer(transfer, ftdi->usb_dev, ftdi->out_ep, ftdi->readbuffer, ftdi->readbuffer_chunksize, ftdi_read_data_cb, tc, ftdi->usb_read_timeout);
1871     transfer->type = LIBUSB_TRANSFER_TYPE_BULK;
1872
1873     ret = libusb_submit_transfer(transfer);
1874     if (ret < 0)
1875     {
1876         libusb_free_transfer(transfer);
1877         free (tc);
1878         return NULL;
1879     }
1880     tc->transfer = transfer;
1881
1882     return tc;
1883 }
1884
1885 /**
1886     Wait for completion of the transfer.
1887
1888     Use libusb 1.0 asynchronous API.
1889
1890     \param tc pointer to ftdi_transfer_control
1891
1892     \retval < 0: Some error happens
1893     \retval >= 0: Data size transferred
1894 */
1895
1896 int ftdi_transfer_data_done(struct ftdi_transfer_control *tc)
1897 {
1898     int ret;
1899     struct timeval to = { 0, 0 };
1900     while (!tc->completed)
1901     {
1902         ret = libusb_handle_events_timeout_completed(tc->ftdi->usb_ctx,
1903                 &to, &tc->completed);
1904         if (ret < 0)
1905         {
1906             if (ret == LIBUSB_ERROR_INTERRUPTED)
1907                 continue;
1908             libusb_cancel_transfer(tc->transfer);
1909             while (!tc->completed)
1910                 if (libusb_handle_events_timeout_completed(tc->ftdi->usb_ctx,
1911                         &to, &tc->completed) < 0)
1912                     break;
1913             libusb_free_transfer(tc->transfer);
1914             free (tc);
1915             return ret;
1916         }
1917     }
1918
1919     ret = tc->offset;
1920     /**
1921      * tc->transfer could be NULL if "(size <= ftdi->readbuffer_remaining)"
1922      * at ftdi_read_data_submit(). Therefore, we need to check it here.
1923      **/
1924     if (tc->transfer)
1925     {
1926         if (tc->transfer->status != LIBUSB_TRANSFER_COMPLETED)
1927             ret = -1;
1928         libusb_free_transfer(tc->transfer);
1929     }
1930     free(tc);
1931     return ret;
1932 }
1933
1934 /**
1935     Cancel transfer and wait for completion.
1936
1937     Use libusb 1.0 asynchronous API.
1938
1939     \param tc pointer to ftdi_transfer_control
1940     \param to pointer to timeout value or NULL for infinite
1941 */
1942
1943 void ftdi_transfer_data_cancel(struct ftdi_transfer_control *tc,
1944                                struct timeval * to)
1945 {
1946     struct timeval tv = { 0, 0 };
1947
1948     if (!tc->completed && tc->transfer != NULL)
1949     {
1950         if (to == NULL)
1951             to = &tv;
1952
1953         libusb_cancel_transfer(tc->transfer);
1954         while (!tc->completed)
1955         {
1956             if (libusb_handle_events_timeout_completed(tc->ftdi->usb_ctx, to, &tc->completed) < 0)
1957                 break;
1958         }
1959     }
1960
1961     if (tc->transfer)
1962         libusb_free_transfer(tc->transfer);
1963
1964     free (tc);
1965 }
1966
1967 /**
1968     Configure write buffer chunk size.
1969     Default is 4096.
1970
1971     \param ftdi pointer to ftdi_context
1972     \param chunksize Chunk size
1973
1974     \retval 0: all fine
1975     \retval -1: ftdi context invalid
1976 */
1977 int ftdi_write_data_set_chunksize(struct ftdi_context *ftdi, unsigned int chunksize)
1978 {
1979     if (ftdi == NULL)
1980         ftdi_error_return(-1, "ftdi context invalid");
1981
1982     ftdi->writebuffer_chunksize = chunksize;
1983     return 0;
1984 }
1985
1986 /**
1987     Get write buffer chunk size.
1988
1989     \param ftdi pointer to ftdi_context
1990     \param chunksize Pointer to store chunk size in
1991
1992     \retval 0: all fine
1993     \retval -1: ftdi context invalid
1994 */
1995 int ftdi_write_data_get_chunksize(struct ftdi_context *ftdi, unsigned int *chunksize)
1996 {
1997     if (ftdi == NULL)
1998         ftdi_error_return(-1, "ftdi context invalid");
1999
2000     *chunksize = ftdi->writebuffer_chunksize;
2001     return 0;
2002 }
2003
2004 /**
2005     Reads data in chunks (see ftdi_read_data_set_chunksize()) from the chip.
2006
2007     Automatically strips the two modem status bytes transferred during every read.
2008
2009     \param ftdi pointer to ftdi_context
2010     \param buf Buffer to store data in
2011     \param size Size of the buffer
2012
2013     \retval -666: USB device unavailable
2014     \retval <0: error code from libusb_bulk_transfer()
2015     \retval  0: no data was available
2016     \retval >0: number of bytes read
2017
2018 */
2019 int ftdi_read_data(struct ftdi_context *ftdi, unsigned char *buf, int size)
2020 {
2021     int offset = 0, ret, i, num_of_chunks, chunk_remains;
2022     int packet_size;
2023     int actual_length = 1;
2024
2025     if (ftdi == NULL || ftdi->usb_dev == NULL)
2026         ftdi_error_return(-666, "USB device unavailable");
2027
2028     // Packet size sanity check (avoid division by zero)
2029     packet_size = ftdi->max_packet_size;
2030     if (packet_size == 0)
2031         ftdi_error_return(-1, "max_packet_size is bogus (zero)");
2032
2033     // everything we want is still in the readbuffer?
2034     if (size <= (int)ftdi->readbuffer_remaining)
2035     {
2036         memcpy (buf, ftdi->readbuffer+ftdi->readbuffer_offset, size);
2037
2038         // Fix offsets
2039         ftdi->readbuffer_remaining -= size;
2040         ftdi->readbuffer_offset += size;
2041
2042         /* printf("Returning bytes from buffer: %d - remaining: %d\n", size, ftdi->readbuffer_remaining); */
2043
2044         return size;
2045     }
2046     // something still in the readbuffer, but not enough to satisfy 'size'?
2047     if (ftdi->readbuffer_remaining != 0)
2048     {
2049         memcpy (buf, ftdi->readbuffer+ftdi->readbuffer_offset, ftdi->readbuffer_remaining);
2050
2051         // Fix offset
2052         offset += ftdi->readbuffer_remaining;
2053     }
2054     // do the actual USB read
2055     while (offset < size && actual_length > 0)
2056     {
2057         ftdi->readbuffer_remaining = 0;
2058         ftdi->readbuffer_offset = 0;
2059         /* returns how much received */
2060         ret = libusb_bulk_transfer (ftdi->usb_dev, ftdi->out_ep, ftdi->readbuffer, ftdi->readbuffer_chunksize, &actual_length, ftdi->usb_read_timeout);
2061         if (ret < 0)
2062             ftdi_error_return(ret, "usb bulk read failed");
2063
2064         if (actual_length > 2)
2065         {
2066             // skip FTDI status bytes.
2067             // Maybe stored in the future to enable modem use
2068             num_of_chunks = actual_length / packet_size;
2069             chunk_remains = actual_length % packet_size;
2070             //printf("actual_length = %X, num_of_chunks = %X, chunk_remains = %X, readbuffer_offset = %X\n", actual_length, num_of_chunks, chunk_remains, ftdi->readbuffer_offset);
2071
2072             ftdi->readbuffer_offset += 2;
2073             actual_length -= 2;
2074
2075             if (actual_length > packet_size - 2)
2076             {
2077                 for (i = 1; i < num_of_chunks; i++)
2078                     memmove (ftdi->readbuffer+ftdi->readbuffer_offset+(packet_size - 2)*i,
2079                              ftdi->readbuffer+ftdi->readbuffer_offset+packet_size*i,
2080                              packet_size - 2);
2081                 if (chunk_remains > 2)
2082                 {
2083                     memmove (ftdi->readbuffer+ftdi->readbuffer_offset+(packet_size - 2)*i,
2084                              ftdi->readbuffer+ftdi->readbuffer_offset+packet_size*i,
2085                              chunk_remains-2);
2086                     actual_length -= 2*num_of_chunks;
2087                 }
2088                 else
2089                     actual_length -= 2*(num_of_chunks-1)+chunk_remains;
2090             }
2091         }
2092         else if (actual_length <= 2)
2093         {
2094             // no more data to read?
2095             return offset;
2096         }
2097         if (actual_length > 0)
2098         {
2099             // data still fits in buf?
2100             if (offset+actual_length <= size)
2101             {
2102                 memcpy (buf+offset, ftdi->readbuffer+ftdi->readbuffer_offset, actual_length);
2103                 //printf("buf[0] = %X, buf[1] = %X\n", buf[0], buf[1]);
2104                 offset += actual_length;
2105
2106                 /* Did we read exactly the right amount of bytes? */
2107                 if (offset == size)
2108                     //printf("read_data exact rem %d offset %d\n",
2109                     //ftdi->readbuffer_remaining, offset);
2110                     return offset;
2111             }
2112             else
2113             {
2114                 // only copy part of the data or size <= readbuffer_chunksize
2115                 int part_size = size-offset;
2116                 memcpy (buf+offset, ftdi->readbuffer+ftdi->readbuffer_offset, part_size);
2117
2118                 ftdi->readbuffer_offset += part_size;
2119                 ftdi->readbuffer_remaining = actual_length-part_size;
2120                 offset += part_size;
2121
2122                 /* printf("Returning part: %d - size: %d - offset: %d - actual_length: %d - remaining: %d\n",
2123                 part_size, size, offset, actual_length, ftdi->readbuffer_remaining); */
2124
2125                 return offset;
2126             }
2127         }
2128     }
2129     // never reached
2130     return -127;
2131 }
2132
2133 /**
2134     Configure read buffer chunk size.
2135     Default is 4096.
2136
2137     Automatically reallocates the buffer.
2138
2139     \param ftdi pointer to ftdi_context
2140     \param chunksize Chunk size
2141
2142     \retval 0: all fine
2143     \retval -1: ftdi context invalid
2144 */
2145 int ftdi_read_data_set_chunksize(struct ftdi_context *ftdi, unsigned int chunksize)
2146 {
2147     unsigned char *new_buf;
2148
2149     if (ftdi == NULL)
2150         ftdi_error_return(-1, "ftdi context invalid");
2151
2152     // Invalidate all remaining data
2153     ftdi->readbuffer_offset = 0;
2154     ftdi->readbuffer_remaining = 0;
2155 #ifdef __linux__
2156     /* We can't set readbuffer_chunksize larger than MAX_BULK_BUFFER_LENGTH,
2157        which is defined in libusb-1.0.  Otherwise, each USB read request will
2158        be divided into multiple URBs.  This will cause issues on Linux kernel
2159        older than 2.6.32.  */
2160     if (chunksize > 16384)
2161         chunksize = 16384;
2162 #endif
2163
2164     if ((new_buf = (unsigned char *)realloc(ftdi->readbuffer, chunksize)) == NULL)
2165         ftdi_error_return(-1, "out of memory for readbuffer");
2166
2167     ftdi->readbuffer = new_buf;
2168     ftdi->readbuffer_chunksize = chunksize;
2169
2170     return 0;
2171 }
2172
2173 /**
2174     Get read buffer chunk size.
2175
2176     \param ftdi pointer to ftdi_context
2177     \param chunksize Pointer to store chunk size in
2178
2179     \retval 0: all fine
2180     \retval -1: FTDI context invalid
2181 */
2182 int ftdi_read_data_get_chunksize(struct ftdi_context *ftdi, unsigned int *chunksize)
2183 {
2184     if (ftdi == NULL)
2185         ftdi_error_return(-1, "FTDI context invalid");
2186
2187     *chunksize = ftdi->readbuffer_chunksize;
2188     return 0;
2189 }
2190
2191 /**
2192     Enable/disable bitbang modes.
2193
2194     \param ftdi pointer to ftdi_context
2195     \param bitmask Bitmask to configure lines.
2196            HIGH/ON value configures a line as output.
2197     \param mode Bitbang mode: use the values defined in \ref ftdi_mpsse_mode
2198
2199     \retval  0: all fine
2200     \retval -1: can't enable bitbang mode
2201     \retval -2: USB device unavailable
2202 */
2203 int ftdi_set_bitmode(struct ftdi_context *ftdi, unsigned char bitmask, unsigned char mode)
2204 {
2205     unsigned short usb_val;
2206
2207     if (ftdi == NULL || ftdi->usb_dev == NULL)
2208         ftdi_error_return(-2, "USB device unavailable");
2209
2210     usb_val = bitmask; // low byte: bitmask
2211     usb_val |= (mode << 8);
2212     if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE, SIO_SET_BITMODE_REQUEST, usb_val, ftdi->index, NULL, 0, ftdi->usb_write_timeout) < 0)
2213         ftdi_error_return(-1, "unable to configure bitbang mode. Perhaps not a BM/2232C type chip?");
2214
2215     ftdi->bitbang_mode = mode;
2216     ftdi->bitbang_enabled = (mode == BITMODE_RESET) ? 0 : 1;
2217     return 0;
2218 }
2219
2220 /**
2221     Set module detach mode.
2222
2223     \param ftdi pointer to ftdi_context
2224     \param mode detach mode to use.
2225
2226     \retval  0: all fine
2227     \retval -1: can't enable bitbang mode
2228 */
2229 int ftdi_set_module_detach_mode(struct ftdi_context *ftdi, enum ftdi_module_detach_mode mode)
2230 {
2231     if (ftdi == NULL)
2232         ftdi_error_return(-1, "FTDI context invalid");
2233
2234     ftdi->module_detach_mode = mode;
2235     return 0;
2236 }
2237
2238 /**
2239     Disable bitbang mode.
2240
2241     \param ftdi pointer to ftdi_context
2242
2243     \retval  0: all fine
2244     \retval -1: can't disable bitbang mode
2245     \retval -2: USB device unavailable
2246 */
2247 int ftdi_disable_bitbang(struct ftdi_context *ftdi)
2248 {
2249     if (ftdi == NULL || ftdi->usb_dev == NULL)
2250         ftdi_error_return(-2, "USB device unavailable");
2251
2252     if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE, SIO_SET_BITMODE_REQUEST, 0, ftdi->index, NULL, 0, ftdi->usb_write_timeout) < 0)
2253         ftdi_error_return(-1, "unable to leave bitbang mode. Perhaps not a BM type chip?");
2254
2255     ftdi->bitbang_enabled = 0;
2256     return 0;
2257 }
2258
2259
2260 /**
2261     Directly read pin state, circumventing the read buffer. Useful for bitbang mode.
2262
2263     \param ftdi pointer to ftdi_context
2264     \param pins Pointer to store pins into
2265
2266     \retval  0: all fine
2267     \retval -1: read pins failed
2268     \retval -2: USB device unavailable
2269 */
2270 int ftdi_read_pins(struct ftdi_context *ftdi, unsigned char *pins)
2271 {
2272     if (ftdi == NULL || ftdi->usb_dev == NULL)
2273         ftdi_error_return(-2, "USB device unavailable");
2274
2275     if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_IN_REQTYPE, SIO_READ_PINS_REQUEST, 0, ftdi->index, (unsigned char *)pins, 1, ftdi->usb_read_timeout) != 1)
2276         ftdi_error_return(-1, "read pins failed");
2277
2278     return 0;
2279 }
2280
2281 /**
2282     Set latency timer
2283
2284     The FTDI chip keeps data in the internal buffer for a specific
2285     amount of time if the buffer is not full yet to decrease
2286     load on the usb bus.
2287
2288     \param ftdi pointer to ftdi_context
2289     \param latency Value between 1 and 255
2290
2291     \retval  0: all fine
2292     \retval -1: latency out of range
2293     \retval -2: unable to set latency timer
2294     \retval -3: USB device unavailable
2295 */
2296 int ftdi_set_latency_timer(struct ftdi_context *ftdi, unsigned char latency)
2297 {
2298     unsigned short usb_val;
2299
2300     if (latency < 1)
2301         ftdi_error_return(-1, "latency out of range. Only valid for 1-255");
2302
2303     if (ftdi == NULL || ftdi->usb_dev == NULL)
2304         ftdi_error_return(-3, "USB device unavailable");
2305
2306     usb_val = latency;
2307     if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE, SIO_SET_LATENCY_TIMER_REQUEST, usb_val, ftdi->index, NULL, 0, ftdi->usb_write_timeout) < 0)
2308         ftdi_error_return(-2, "unable to set latency timer");
2309
2310     return 0;
2311 }
2312
2313 /**
2314     Get latency timer
2315
2316     \param ftdi pointer to ftdi_context
2317     \param latency Pointer to store latency value in
2318
2319     \retval  0: all fine
2320     \retval -1: unable to get latency timer
2321     \retval -2: USB device unavailable
2322 */
2323 int ftdi_get_latency_timer(struct ftdi_context *ftdi, unsigned char *latency)
2324 {
2325     unsigned short usb_val;
2326
2327     if (ftdi == NULL || ftdi->usb_dev == NULL)
2328         ftdi_error_return(-2, "USB device unavailable");
2329
2330     if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_IN_REQTYPE, SIO_GET_LATENCY_TIMER_REQUEST, 0, ftdi->index, (unsigned char *)&usb_val, 1, ftdi->usb_read_timeout) != 1)
2331         ftdi_error_return(-1, "reading latency timer failed");
2332
2333     *latency = (unsigned char)usb_val;
2334     return 0;
2335 }
2336
2337 /**
2338     Poll modem status information
2339
2340     This function allows the retrieve the two status bytes of the device.
2341     The device sends these bytes also as a header for each read access
2342     where they are discarded by ftdi_read_data(). The chip generates
2343     the two stripped status bytes in the absence of data every 40 ms.
2344
2345     Layout of the first byte:
2346     - B0..B3 - must be 0
2347     - B4       Clear to send (CTS)
2348                  0 = inactive
2349                  1 = active
2350     - B5       Data set ready (DTS)
2351                  0 = inactive
2352                  1 = active
2353     - B6       Ring indicator (RI)
2354                  0 = inactive
2355                  1 = active
2356     - B7       Receive line signal detect (RLSD)
2357                  0 = inactive
2358                  1 = active
2359
2360     Layout of the second byte:
2361     - B0       Data ready (DR)
2362     - B1       Overrun error (OE)
2363     - B2       Parity error (PE)
2364     - B3       Framing error (FE)
2365     - B4       Break interrupt (BI)
2366     - B5       Transmitter holding register (THRE)
2367     - B6       Transmitter empty (TEMT)
2368     - B7       Error in RCVR FIFO
2369
2370     \param ftdi pointer to ftdi_context
2371     \param status Pointer to store status information in. Must be two bytes.
2372
2373     \retval  0: all fine
2374     \retval -1: unable to retrieve status information
2375     \retval -2: USB device unavailable
2376 */
2377 int ftdi_poll_modem_status(struct ftdi_context *ftdi, unsigned short *status)
2378 {
2379     char usb_val[2];
2380
2381     if (ftdi == NULL || ftdi->usb_dev == NULL)
2382         ftdi_error_return(-2, "USB device unavailable");
2383
2384     if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_IN_REQTYPE, SIO_POLL_MODEM_STATUS_REQUEST, 0, ftdi->index, (unsigned char *)usb_val, 2, ftdi->usb_read_timeout) != 2)
2385         ftdi_error_return(-1, "getting modem status failed");
2386
2387     *status = (usb_val[1] << 8) | (usb_val[0] & 0xFF);
2388
2389     return 0;
2390 }
2391
2392 /**
2393     Set flowcontrol for ftdi chip
2394
2395     Note: Do not use this function to enable XON/XOFF mode, use ftdi_setflowctrl_xonxoff() instead.
2396
2397     \param ftdi pointer to ftdi_context
2398     \param flowctrl flow control to use. should be
2399            SIO_DISABLE_FLOW_CTRL, SIO_RTS_CTS_HS, SIO_DTR_DSR_HS
2400
2401     \retval  0: all fine
2402     \retval -1: set flow control failed
2403     \retval -2: USB device unavailable
2404 */
2405 int ftdi_setflowctrl(struct ftdi_context *ftdi, int flowctrl)
2406 {
2407     if (ftdi == NULL || ftdi->usb_dev == NULL)
2408         ftdi_error_return(-2, "USB device unavailable");
2409
2410     if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE,
2411                                 SIO_SET_FLOW_CTRL_REQUEST, 0, (flowctrl | ftdi->index),
2412                                 NULL, 0, ftdi->usb_write_timeout) < 0)
2413         ftdi_error_return(-1, "set flow control failed");
2414
2415     return 0;
2416 }
2417
2418 /**
2419     Set XON/XOFF flowcontrol for ftdi chip
2420
2421     \param ftdi pointer to ftdi_context
2422     \param xon character code used to resume transmission
2423     \param xoff character code used to pause transmission
2424
2425     \retval  0: all fine
2426     \retval -1: set flow control failed
2427     \retval -2: USB device unavailable
2428 */
2429 int ftdi_setflowctrl_xonxoff(struct ftdi_context *ftdi, unsigned char xon, unsigned char xoff)
2430 {
2431     if (ftdi == NULL || ftdi->usb_dev == NULL)
2432         ftdi_error_return(-2, "USB device unavailable");
2433
2434     uint16_t xonxoff = xon | (xoff << 8);
2435     if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE,
2436                                 SIO_SET_FLOW_CTRL_REQUEST, xonxoff, (SIO_XON_XOFF_HS | ftdi->index),
2437                                 NULL, 0, ftdi->usb_write_timeout) < 0)
2438         ftdi_error_return(-1, "set flow control failed");
2439
2440     return 0;
2441 }
2442
2443 /**
2444     Set dtr line
2445
2446     \param ftdi pointer to ftdi_context
2447     \param state state to set line to (1 or 0)
2448
2449     \retval  0: all fine
2450     \retval -1: set dtr failed
2451     \retval -2: USB device unavailable
2452 */
2453 int ftdi_setdtr(struct ftdi_context *ftdi, int state)
2454 {
2455     unsigned short usb_val;
2456
2457     if (ftdi == NULL || ftdi->usb_dev == NULL)
2458         ftdi_error_return(-2, "USB device unavailable");
2459
2460     if (state)
2461         usb_val = SIO_SET_DTR_HIGH;
2462     else
2463         usb_val = SIO_SET_DTR_LOW;
2464
2465     if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE,
2466                                 SIO_SET_MODEM_CTRL_REQUEST, usb_val, ftdi->index,
2467                                 NULL, 0, ftdi->usb_write_timeout) < 0)
2468         ftdi_error_return(-1, "set dtr failed");
2469
2470     return 0;
2471 }
2472
2473 /**
2474     Set rts line
2475
2476     \param ftdi pointer to ftdi_context
2477     \param state state to set line to (1 or 0)
2478
2479     \retval  0: all fine
2480     \retval -1: set rts failed
2481     \retval -2: USB device unavailable
2482 */
2483 int ftdi_setrts(struct ftdi_context *ftdi, int state)
2484 {
2485     unsigned short usb_val;
2486
2487     if (ftdi == NULL || ftdi->usb_dev == NULL)
2488         ftdi_error_return(-2, "USB device unavailable");
2489
2490     if (state)
2491         usb_val = SIO_SET_RTS_HIGH;
2492     else
2493         usb_val = SIO_SET_RTS_LOW;
2494
2495     if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE,
2496                                 SIO_SET_MODEM_CTRL_REQUEST, usb_val, ftdi->index,
2497                                 NULL, 0, ftdi->usb_write_timeout) < 0)
2498         ftdi_error_return(-1, "set of rts failed");
2499
2500     return 0;
2501 }
2502
2503 /**
2504     Set dtr and rts line in one pass
2505
2506     \param ftdi pointer to ftdi_context
2507     \param dtr  DTR state to set line to (1 or 0)
2508     \param rts  RTS state to set line to (1 or 0)
2509
2510     \retval  0: all fine
2511     \retval -1: set dtr/rts failed
2512     \retval -2: USB device unavailable
2513  */
2514 int ftdi_setdtr_rts(struct ftdi_context *ftdi, int dtr, int rts)
2515 {
2516     unsigned short usb_val;
2517
2518     if (ftdi == NULL || ftdi->usb_dev == NULL)
2519         ftdi_error_return(-2, "USB device unavailable");
2520
2521     if (dtr)
2522         usb_val = SIO_SET_DTR_HIGH;
2523     else
2524         usb_val = SIO_SET_DTR_LOW;
2525
2526     if (rts)
2527         usb_val |= SIO_SET_RTS_HIGH;
2528     else
2529         usb_val |= SIO_SET_RTS_LOW;
2530
2531     if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE,
2532                                 SIO_SET_MODEM_CTRL_REQUEST, usb_val, ftdi->index,
2533                                 NULL, 0, ftdi->usb_write_timeout) < 0)
2534         ftdi_error_return(-1, "set of rts/dtr failed");
2535
2536     return 0;
2537 }
2538
2539 /**
2540     Set the special event character
2541
2542     \param ftdi pointer to ftdi_context
2543     \param eventch Event character
2544     \param enable 0 to disable the event character, non-zero otherwise
2545
2546     \retval  0: all fine
2547     \retval -1: unable to set event character
2548     \retval -2: USB device unavailable
2549 */
2550 int ftdi_set_event_char(struct ftdi_context *ftdi,
2551                         unsigned char eventch, unsigned char enable)
2552 {
2553     unsigned short usb_val;
2554
2555     if (ftdi == NULL || ftdi->usb_dev == NULL)
2556         ftdi_error_return(-2, "USB device unavailable");
2557
2558     usb_val = eventch;
2559     if (enable)
2560         usb_val |= 1 << 8;
2561
2562     if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE, SIO_SET_EVENT_CHAR_REQUEST, usb_val, ftdi->index, NULL, 0, ftdi->usb_write_timeout) < 0)
2563         ftdi_error_return(-1, "setting event character failed");
2564
2565     return 0;
2566 }
2567
2568 /**
2569     Set error character
2570
2571     \param ftdi pointer to ftdi_context
2572     \param errorch Error character
2573     \param enable 0 to disable the error character, non-zero otherwise
2574
2575     \retval  0: all fine
2576     \retval -1: unable to set error character
2577     \retval -2: USB device unavailable
2578 */
2579 int ftdi_set_error_char(struct ftdi_context *ftdi,
2580                         unsigned char errorch, unsigned char enable)
2581 {
2582     unsigned short usb_val;
2583
2584     if (ftdi == NULL || ftdi->usb_dev == NULL)
2585         ftdi_error_return(-2, "USB device unavailable");
2586
2587     usb_val = errorch;
2588     if (enable)
2589         usb_val |= 1 << 8;
2590
2591     if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE, SIO_SET_ERROR_CHAR_REQUEST, usb_val, ftdi->index, NULL, 0, ftdi->usb_write_timeout) < 0)
2592         ftdi_error_return(-1, "setting error character failed");
2593
2594     return 0;
2595 }
2596
2597 /**
2598     Init eeprom with default values for the connected device
2599     \param ftdi pointer to ftdi_context
2600     \param manufacturer String to use as Manufacturer
2601     \param product String to use as Product description
2602     \param serial String to use as Serial number description
2603
2604     \retval  0: all fine
2605     \retval -1: No struct ftdi_context
2606     \retval -2: No struct ftdi_eeprom
2607     \retval -3: No connected device or device not yet opened
2608 */
2609 int ftdi_eeprom_initdefaults(struct ftdi_context *ftdi, const char * manufacturer,
2610                              const char * product, const char * serial)
2611 {
2612     struct ftdi_eeprom *eeprom;
2613
2614     if (ftdi == NULL)
2615         ftdi_error_return(-1, "No struct ftdi_context");
2616
2617     if (ftdi->eeprom == NULL)
2618         ftdi_error_return(-2,"No struct ftdi_eeprom");
2619
2620     eeprom = ftdi->eeprom;
2621     memset(eeprom, 0, sizeof(struct ftdi_eeprom));
2622
2623     if (ftdi->usb_dev == NULL)
2624         ftdi_error_return(-3, "No connected device or device not yet opened");
2625
2626     eeprom->vendor_id = 0x0403;
2627     eeprom->use_serial = (serial != NULL);
2628     if ((ftdi->type == TYPE_AM) || (ftdi->type == TYPE_BM) ||
2629             (ftdi->type == TYPE_R))
2630         eeprom->product_id = 0x6001;
2631     else if (ftdi->type == TYPE_4232H)
2632         eeprom->product_id = 0x6011;
2633     else if (ftdi->type == TYPE_232H)
2634         eeprom->product_id = 0x6014;
2635     else if (ftdi->type == TYPE_230X)
2636         eeprom->product_id = 0x6015;
2637     else
2638         eeprom->product_id = 0x6010;
2639
2640     if (ftdi->type == TYPE_AM)
2641         eeprom->usb_version = 0x0101;
2642     else
2643         eeprom->usb_version = 0x0200;
2644     eeprom->max_power = 100;
2645
2646     if (eeprom->manufacturer)
2647         free (eeprom->manufacturer);
2648     eeprom->manufacturer = NULL;
2649     if (manufacturer)
2650     {
2651         eeprom->manufacturer = (char *)malloc(strlen(manufacturer)+1);
2652         if (eeprom->manufacturer)
2653             strcpy(eeprom->manufacturer, manufacturer);
2654     }
2655
2656     if (eeprom->product)
2657         free (eeprom->product);
2658     eeprom->product = NULL;
2659     if(product)
2660     {
2661         eeprom->product = (char *)malloc(strlen(product)+1);
2662         if (eeprom->product)
2663             strcpy(eeprom->product, product);
2664     }
2665     else
2666     {
2667         const char* default_product;
2668         switch(ftdi->type)
2669         {
2670             case TYPE_AM:    default_product = "AM"; break;
2671             case TYPE_BM:    default_product = "BM"; break;
2672             case TYPE_2232C: default_product = "Dual RS232"; break;
2673             case TYPE_R:     default_product = "FT232R USB UART"; break;
2674             case TYPE_2232H: default_product = "Dual RS232-HS"; break;
2675             case TYPE_4232H: default_product = "FT4232H"; break;
2676             case TYPE_232H:  default_product = "Single-RS232-HS"; break;
2677             case TYPE_230X:  default_product = "FT230X Basic UART"; break;
2678             default:
2679                 ftdi_error_return(-3, "Unknown chip type");
2680         }
2681         eeprom->product = (char *)malloc(strlen(default_product) +1);
2682         if (eeprom->product)
2683             strcpy(eeprom->product, default_product);
2684     }
2685
2686     if (eeprom->serial)
2687         free (eeprom->serial);
2688     eeprom->serial = NULL;
2689     if (serial)
2690     {
2691         eeprom->serial = (char *)malloc(strlen(serial)+1);
2692         if (eeprom->serial)
2693             strcpy(eeprom->serial, serial);
2694     }
2695
2696     if (ftdi->type == TYPE_R)
2697     {
2698         eeprom->max_power = 90;
2699         eeprom->size = 0x80;
2700         eeprom->cbus_function[0] = CBUS_TXLED;
2701         eeprom->cbus_function[1] = CBUS_RXLED;
2702         eeprom->cbus_function[2] = CBUS_TXDEN;
2703         eeprom->cbus_function[3] = CBUS_PWREN;
2704         eeprom->cbus_function[4] = CBUS_SLEEP;
2705     }
2706     else if (ftdi->type == TYPE_230X)
2707     {
2708         eeprom->max_power = 90;
2709         eeprom->size = 0x100;
2710         eeprom->cbus_function[0] = CBUSX_TXDEN;
2711         eeprom->cbus_function[1] = CBUSX_RXLED;
2712         eeprom->cbus_function[2] = CBUSX_TXLED;
2713         eeprom->cbus_function[3] = CBUSX_SLEEP;
2714     }
2715     else
2716     {
2717         if(ftdi->type == TYPE_232H)
2718         {
2719             int i;
2720             for (i=0; i<10; i++)
2721                 eeprom->cbus_function[i] = CBUSH_TRISTATE;
2722         }
2723         eeprom->size = -1;
2724     }
2725     switch (ftdi->type)
2726     {
2727         case TYPE_AM:
2728             eeprom->release_number = 0x0200;
2729             break;
2730         case TYPE_BM:
2731             eeprom->release_number = 0x0400;
2732             break;
2733         case TYPE_2232C:
2734             eeprom->release_number = 0x0500;
2735             break;
2736         case TYPE_R:
2737             eeprom->release_number = 0x0600;
2738             break;
2739         case TYPE_2232H:
2740             eeprom->release_number = 0x0700;
2741             break;
2742         case TYPE_4232H:
2743             eeprom->release_number = 0x0800;
2744             break;
2745         case TYPE_232H:
2746             eeprom->release_number = 0x0900;
2747             break;
2748         case TYPE_230X:
2749             eeprom->release_number = 0x1000;
2750             break;
2751         default:
2752             eeprom->release_number = 0x00;
2753     }
2754     return 0;
2755 }
2756
2757 int ftdi_eeprom_set_strings(struct ftdi_context *ftdi, const char * manufacturer,
2758                             const char * product, const char * serial)
2759 {
2760     struct ftdi_eeprom *eeprom;
2761
2762     if (ftdi == NULL)
2763         ftdi_error_return(-1, "No struct ftdi_context");
2764
2765     if (ftdi->eeprom == NULL)
2766         ftdi_error_return(-2,"No struct ftdi_eeprom");
2767
2768     eeprom = ftdi->eeprom;
2769
2770     if (ftdi->usb_dev == NULL)
2771         ftdi_error_return(-3, "No connected device or device not yet opened");
2772
2773     if (manufacturer)
2774     {
2775         if (eeprom->manufacturer)
2776             free (eeprom->manufacturer);
2777         eeprom->manufacturer = (char *)malloc(strlen(manufacturer)+1);
2778         if (eeprom->manufacturer)
2779             strcpy(eeprom->manufacturer, manufacturer);
2780     }
2781
2782     if(product)
2783     {
2784         if (eeprom->product)
2785             free (eeprom->product);
2786         eeprom->product = (char *)malloc(strlen(product)+1);
2787         if (eeprom->product)
2788             strcpy(eeprom->product, product);
2789     }
2790
2791     if (serial)
2792     {
2793         if (eeprom->serial)
2794             free (eeprom->serial);
2795         eeprom->serial = (char *)malloc(strlen(serial)+1);
2796         if (eeprom->serial)
2797         {
2798             strcpy(eeprom->serial, serial);
2799             eeprom->use_serial = 1;
2800         }
2801     }
2802     return 0;
2803 }
2804
2805 /**
2806     Return device ID strings from the eeprom. Device needs to be connected.
2807
2808     The parameters manufacturer, description and serial may be NULL
2809     or pointer to buffers to store the fetched strings.
2810
2811     \param ftdi pointer to ftdi_context
2812     \param manufacturer Store manufacturer string here if not NULL
2813     \param mnf_len Buffer size of manufacturer string
2814     \param product Store product description string here if not NULL
2815     \param prod_len Buffer size of product description string
2816     \param serial Store serial string here if not NULL
2817     \param serial_len Buffer size of serial string
2818
2819     \retval   0: all fine
2820     \retval  -1: ftdi context invalid
2821     \retval  -2: ftdi eeprom buffer invalid
2822 */
2823 int ftdi_eeprom_get_strings(struct ftdi_context *ftdi,
2824                             char *manufacturer, int mnf_len,
2825                             char *product, int prod_len,
2826                             char *serial, int serial_len)
2827 {
2828     struct ftdi_eeprom *eeprom;
2829
2830     if (ftdi == NULL)
2831         ftdi_error_return(-1, "No struct ftdi_context");
2832     if (ftdi->eeprom == NULL)
2833         ftdi_error_return(-2, "No struct ftdi_eeprom");
2834
2835     eeprom = ftdi->eeprom;
2836
2837     if (manufacturer)
2838     {
2839         strncpy(manufacturer, eeprom->manufacturer, mnf_len);
2840         if (mnf_len > 0)
2841             manufacturer[mnf_len - 1] = '\0';
2842     }
2843
2844     if (product)
2845     {
2846         strncpy(product, eeprom->product, prod_len);
2847         if (prod_len > 0)
2848             product[prod_len - 1] = '\0';
2849     }
2850
2851     if (serial)
2852     {
2853         strncpy(serial, eeprom->serial, serial_len);
2854         if (serial_len > 0)
2855             serial[serial_len - 1] = '\0';
2856     }
2857
2858     return 0;
2859 }
2860
2861 /*FTD2XX doesn't check for values not fitting in the ACBUS Signal options*/
2862 void set_ft232h_cbus(struct ftdi_eeprom *eeprom, unsigned char * output)
2863 {
2864     int i;
2865     for(i=0; i<5; i++)
2866     {
2867         int mode_low, mode_high;
2868         if (eeprom->cbus_function[2*i]> CBUSH_CLK7_5)
2869             mode_low = CBUSH_TRISTATE;
2870         else
2871             mode_low = eeprom->cbus_function[2*i];
2872         if (eeprom->cbus_function[2*i+1]> CBUSH_CLK7_5)
2873             mode_high = CBUSH_TRISTATE;
2874         else
2875             mode_high = eeprom->cbus_function[2*i+1];
2876
2877         output[0x18+i] = (mode_high <<4) | mode_low;
2878     }
2879 }
2880 /* Return the bits for the encoded EEPROM Structure of a requested Mode
2881  *
2882  */
2883 static unsigned char type2bit(unsigned char type, enum ftdi_chip_type chip)
2884 {
2885     switch (chip)
2886     {
2887         case TYPE_2232H:
2888         case TYPE_2232C:
2889         {
2890             switch (type)
2891             {
2892                 case CHANNEL_IS_UART: return 0;
2893                 case CHANNEL_IS_FIFO: return 0x01;
2894                 case CHANNEL_IS_OPTO: return 0x02;
2895                 case CHANNEL_IS_CPU : return 0x04;
2896                 default: return 0;
2897             }
2898         }
2899         case TYPE_232H:
2900         {
2901             switch (type)
2902             {
2903                 case CHANNEL_IS_UART   : return 0;
2904                 case CHANNEL_IS_FIFO   : return 0x01;
2905                 case CHANNEL_IS_OPTO   : return 0x02;
2906                 case CHANNEL_IS_CPU    : return 0x04;
2907                 case CHANNEL_IS_FT1284 : return 0x08;
2908                 default: return 0;
2909             }
2910         }
2911         case TYPE_R:
2912         {
2913             switch (type)
2914             {
2915                 case CHANNEL_IS_UART   : return 0;
2916                 case CHANNEL_IS_FIFO   : return 0x01;
2917                 default: return 0;
2918             }
2919         }
2920         case TYPE_230X: /* FT230X is only UART */
2921         default: return 0;
2922     }
2923     return 0;
2924 }
2925
2926 /**
2927     Build binary buffer from ftdi_eeprom structure.
2928     Output is suitable for ftdi_write_eeprom().
2929
2930     \param ftdi pointer to ftdi_context
2931
2932     \retval >=0: size of eeprom user area in bytes
2933     \retval -1: eeprom size (128 bytes) exceeded by custom strings
2934     \retval -2: Invalid eeprom or ftdi pointer
2935     \retval -3: Invalid cbus function setting     (FIXME: Not in the code?)
2936     \retval -4: Chip doesn't support invert       (FIXME: Not in the code?)
2937     \retval -5: Chip doesn't support high current drive         (FIXME: Not in the code?)
2938     \retval -6: No connected EEPROM or EEPROM Type unknown
2939 */
2940 int ftdi_eeprom_build(struct ftdi_context *ftdi)
2941 {
2942     unsigned char i, j, eeprom_size_mask;
2943     unsigned short checksum, value;
2944     unsigned char manufacturer_size = 0, product_size = 0, serial_size = 0;
2945     int user_area_size, free_start, free_end;
2946     struct ftdi_eeprom *eeprom;
2947     unsigned char * output;
2948
2949     if (ftdi == NULL)
2950         ftdi_error_return(-2,"No context");
2951     if (ftdi->eeprom == NULL)
2952         ftdi_error_return(-2,"No eeprom structure");
2953
2954     eeprom= ftdi->eeprom;
2955     output = eeprom->buf;
2956
2957     if (eeprom->chip == -1)
2958         ftdi_error_return(-6,"No connected EEPROM or EEPROM type unknown");
2959
2960     if (eeprom->size == -1)
2961     {
2962         if ((eeprom->chip == 0x56) || (eeprom->chip == 0x66))
2963             eeprom->size = 0x100;
2964         else
2965             eeprom->size = 0x80;
2966     }
2967
2968     if (eeprom->manufacturer != NULL)
2969         manufacturer_size = strlen(eeprom->manufacturer);
2970     if (eeprom->product != NULL)
2971         product_size = strlen(eeprom->product);
2972     if (eeprom->serial != NULL)
2973         serial_size = strlen(eeprom->serial);
2974
2975     // eeprom size check
2976     switch (ftdi->type)
2977     {
2978         case TYPE_AM:
2979         case TYPE_BM:
2980         case TYPE_R:
2981             user_area_size = 96;    // base size for strings (total of 48 characters)
2982             break;
2983         case TYPE_2232C:
2984             user_area_size = 90;     // two extra config bytes and 4 bytes PnP stuff
2985             break;
2986         case TYPE_230X:
2987             user_area_size = 88;     // four extra config bytes + 4 bytes PnP stuff
2988             break;
2989         case TYPE_2232H:            // six extra config bytes + 4 bytes PnP stuff
2990         case TYPE_4232H:
2991             user_area_size = 86;
2992             break;
2993         case TYPE_232H:
2994             user_area_size = 80;
2995             break;
2996         default:
2997             user_area_size = 0;
2998             break;
2999     }
3000     user_area_size  -= (manufacturer_size + product_size + serial_size) * 2;
3001
3002     if (user_area_size < 0)
3003         ftdi_error_return(-1,"eeprom size exceeded");
3004
3005     // empty eeprom
3006     if (ftdi->type == TYPE_230X)
3007     {
3008         /* FT230X have a reserved section in the middle of the MTP,
3009            which cannot be written to, but must be included in the checksum */
3010         memset(ftdi->eeprom->buf, 0, 0x80);
3011         memset((ftdi->eeprom->buf + 0xa0), 0, (FTDI_MAX_EEPROM_SIZE - 0xa0));
3012     }
3013     else
3014     {
3015         memset(ftdi->eeprom->buf, 0, FTDI_MAX_EEPROM_SIZE);
3016     }
3017
3018     // Bytes and Bits set for all Types
3019
3020     // Addr 02: Vendor ID
3021     output[0x02] = eeprom->vendor_id;
3022     output[0x03] = eeprom->vendor_id >> 8;
3023
3024     // Addr 04: Product ID
3025     output[0x04] = eeprom->product_id;
3026     output[0x05] = eeprom->product_id >> 8;
3027
3028     // Addr 06: Device release number (0400h for BM features)
3029     output[0x06] = eeprom->release_number;
3030     output[0x07] = eeprom->release_number >> 8;
3031
3032     // Addr 08: Config descriptor
3033     // Bit 7: always 1
3034     // Bit 6: 1 if this device is self powered, 0 if bus powered
3035     // Bit 5: 1 if this device uses remote wakeup
3036     // Bit 4-0: reserved - 0
3037     j = 0x80;
3038     if (eeprom->self_powered)
3039         j |= 0x40;
3040     if (eeprom->remote_wakeup)
3041         j |= 0x20;
3042     output[0x08] = j;
3043
3044     // Addr 09: Max power consumption: max power = value * 2 mA
3045     output[0x09] = eeprom->max_power / MAX_POWER_MILLIAMP_PER_UNIT;
3046
3047     if ((ftdi->type != TYPE_AM) && (ftdi->type != TYPE_230X))
3048     {
3049         // Addr 0A: Chip configuration
3050         // Bit 7: 0 - reserved
3051         // Bit 6: 0 - reserved
3052         // Bit 5: 0 - reserved
3053         // Bit 4: 1 - Change USB version
3054         // Bit 3: 1 - Use the serial number string
3055         // Bit 2: 1 - Enable suspend pull downs for lower power
3056         // Bit 1: 1 - Out EndPoint is Isochronous
3057         // Bit 0: 1 - In EndPoint is Isochronous
3058         //
3059         j = 0;
3060         if (eeprom->in_is_isochronous)
3061             j = j | 1;
3062         if (eeprom->out_is_isochronous)
3063             j = j | 2;
3064         output[0x0A] = j;
3065     }
3066
3067     // Dynamic content
3068     // Strings start at 0x94 (TYPE_AM, TYPE_BM)
3069     // 0x96 (TYPE_2232C), 0x98 (TYPE_R) and 0x9a (TYPE_x232H)
3070     // 0xa0 (TYPE_232H, TYPE_230X)
3071     i = 0;
3072     switch (ftdi->type)
3073     {
3074         case TYPE_2232H:
3075         case TYPE_4232H:
3076             i += 2;
3077                         /* Fall through*/
3078         case TYPE_R:
3079             i += 2;
3080                         /* Fall through*/
3081         case TYPE_2232C:
3082             i += 2;
3083                         /* Fall through*/
3084         case TYPE_AM:
3085         case TYPE_BM:
3086             i += 0x94;
3087             break;
3088         case TYPE_232H:
3089         case TYPE_230X:
3090             i = 0xa0;
3091             break;
3092     }
3093     /* Wrap around 0x80 for 128 byte EEPROMS (Internal and 93x46) */
3094     eeprom_size_mask = eeprom->size -1;
3095     free_end = i & eeprom_size_mask;
3096
3097     // Addr 0E: Offset of the manufacturer string + 0x80, calculated later
3098     // Addr 0F: Length of manufacturer string
3099     // Output manufacturer
3100     output[0x0E] = i;  // calculate offset
3101     output[i & eeprom_size_mask] = manufacturer_size*2 + 2, i++;
3102     output[i & eeprom_size_mask] = 0x03, i++; // type: string
3103     for (j = 0; j < manufacturer_size; j++)
3104     {
3105         output[i & eeprom_size_mask] = eeprom->manufacturer[j], i++;
3106         output[i & eeprom_size_mask] = 0x00, i++;
3107     }
3108     output[0x0F] = manufacturer_size*2 + 2;
3109
3110     // Addr 10: Offset of the product string + 0x80, calculated later
3111     // Addr 11: Length of product string
3112     output[0x10] = i | 0x80;  // calculate offset
3113     output[i & eeprom_size_mask] = product_size*2 + 2, i++;
3114     output[i & eeprom_size_mask] = 0x03, i++;
3115     for (j = 0; j < product_size; j++)
3116     {
3117         output[i & eeprom_size_mask] = eeprom->product[j], i++;
3118         output[i & eeprom_size_mask] = 0x00, i++;
3119     }
3120     output[0x11] = product_size*2 + 2;
3121
3122     if (eeprom->use_serial) {
3123         // Addr 12: Offset of the serial string + 0x80, calculated later
3124         // Addr 13: Length of serial string
3125         output[0x12] = i | 0x80; // calculate offset
3126         output[i & eeprom_size_mask] = serial_size*2 + 2, i++;
3127         output[i & eeprom_size_mask] = 0x03, i++;
3128         for (j = 0; j < serial_size; j++)
3129         {
3130             output[i & eeprom_size_mask] = eeprom->serial[j], i++;
3131             output[i & eeprom_size_mask] = 0x00, i++;
3132         }
3133         output[0x13] = serial_size*2 + 2;
3134     }
3135
3136     // Legacy port name and PnP fields for FT2232 and newer chips
3137     // It doesn't appear when written with FT_Prog for FT4232H chip.
3138     if (ftdi->type > TYPE_BM && ftdi->type != TYPE_4232H)
3139     {
3140         output[i & eeprom_size_mask] = 0x02; /* as seen when written with FTD2XX */
3141         i++;
3142         output[i & eeprom_size_mask] = 0x03; /* as seen when written with FTD2XX */
3143         i++;
3144         output[i & eeprom_size_mask] = eeprom->is_not_pnp; /* as seen when written with FTD2XX */
3145         i++;
3146         output[i & eeprom_size_mask] = 0x00;
3147         i++;
3148     }
3149
3150     if (ftdi->type > TYPE_AM) /* use_serial not used in AM devices */
3151     {
3152         if (eeprom->use_serial)
3153             output[0x0A] |= USE_SERIAL_NUM;
3154         else
3155             output[0x0A] &= ~USE_SERIAL_NUM;
3156     }
3157
3158     /* Bytes and Bits specific to (some) types
3159        Write linear, as this allows easier fixing */
3160     switch (ftdi->type)
3161     {
3162         case TYPE_AM:
3163             break;
3164         case TYPE_BM:
3165             output[0x0C] = eeprom->usb_version & 0xff;
3166             output[0x0D] = (eeprom->usb_version>>8) & 0xff;
3167             if (eeprom->use_usb_version)
3168                 output[0x0A] |= USE_USB_VERSION_BIT;
3169             else
3170                 output[0x0A] &= ~USE_USB_VERSION_BIT;
3171
3172             break;
3173         case TYPE_2232C:
3174
3175             output[0x00] = type2bit(eeprom->channel_a_type, TYPE_2232C);
3176             if (eeprom->channel_a_driver)
3177                 output[0x00] |= DRIVER_VCP;
3178             else
3179                 output[0x00] &= ~DRIVER_VCP;
3180
3181             if (eeprom->high_current_a)
3182                 output[0x00] |= HIGH_CURRENT_DRIVE;
3183             else
3184                 output[0x00] &= ~HIGH_CURRENT_DRIVE;
3185
3186             output[0x01] = type2bit(eeprom->channel_b_type, TYPE_2232C);
3187             if (eeprom->channel_b_driver)
3188                 output[0x01] |= DRIVER_VCP;
3189             else
3190                 output[0x01] &= ~DRIVER_VCP;
3191
3192             if (eeprom->high_current_b)
3193                 output[0x01] |= HIGH_CURRENT_DRIVE;
3194             else
3195                 output[0x01] &= ~HIGH_CURRENT_DRIVE;
3196
3197             if (eeprom->in_is_isochronous)
3198                 output[0x0A] |= 0x1;
3199             else
3200                 output[0x0A] &= ~0x1;
3201             if (eeprom->out_is_isochronous)
3202                 output[0x0A] |= 0x2;
3203             else
3204                 output[0x0A] &= ~0x2;
3205             if (eeprom->suspend_pull_downs)
3206                 output[0x0A] |= 0x4;
3207             else
3208                 output[0x0A] &= ~0x4;
3209             if (eeprom->use_usb_version)
3210                 output[0x0A] |= USE_USB_VERSION_BIT;
3211             else
3212                 output[0x0A] &= ~USE_USB_VERSION_BIT;
3213
3214             output[0x0C] = eeprom->usb_version & 0xff;
3215             output[0x0D] = (eeprom->usb_version>>8) & 0xff;
3216             output[0x14] = eeprom->chip;
3217             break;
3218         case TYPE_R:
3219             output[0x00] = type2bit(eeprom->channel_a_type, TYPE_R);
3220             if (eeprom->high_current)
3221                 output[0x00] |= HIGH_CURRENT_DRIVE_R;
3222
3223             /* Field is inverted for TYPE_R: Bit 00.3 set to 1 is D2XX, VCP is 0 */
3224             if (eeprom->channel_a_driver)
3225                 output[0x00] &= ~DRIVER_VCP;
3226             else
3227                 output[0x00] |= DRIVER_VCP;
3228
3229             if (eeprom->external_oscillator)
3230                 output[0x00] |= 0x02;
3231             output[0x01] = 0x40; /* Hard coded Endpoint Size */
3232
3233             if (eeprom->suspend_pull_downs)
3234                 output[0x0A] |= 0x4;
3235             else
3236                 output[0x0A] &= ~0x4;
3237             output[0x0B] = eeprom->invert;
3238             output[0x0C] = eeprom->usb_version & 0xff;
3239             output[0x0D] = (eeprom->usb_version>>8) & 0xff;
3240
3241             if (eeprom->cbus_function[0] > CBUS_BB_RD)
3242                 output[0x14] = CBUS_TXLED;
3243             else
3244                 output[0x14] = eeprom->cbus_function[0];
3245
3246             if (eeprom->cbus_function[1] > CBUS_BB_RD)
3247                 output[0x14] |= CBUS_RXLED<<4;
3248             else
3249                 output[0x14] |= eeprom->cbus_function[1]<<4;
3250
3251             if (eeprom->cbus_function[2] > CBUS_BB_RD)
3252                 output[0x15] = CBUS_TXDEN;
3253             else
3254                 output[0x15] = eeprom->cbus_function[2];
3255
3256             if (eeprom->cbus_function[3] > CBUS_BB_RD)
3257                 output[0x15] |= CBUS_PWREN<<4;
3258             else
3259                 output[0x15] |= eeprom->cbus_function[3]<<4;
3260
3261             if (eeprom->cbus_function[4] > CBUS_CLK6)
3262                 output[0x16] = CBUS_SLEEP;
3263             else
3264                 output[0x16] = eeprom->cbus_function[4];
3265             break;
3266         case TYPE_2232H:
3267             output[0x00] = type2bit(eeprom->channel_a_type, TYPE_2232H);
3268             if (eeprom->channel_a_driver)
3269                 output[0x00] |= DRIVER_VCP;
3270             else
3271                 output[0x00] &= ~DRIVER_VCP;
3272
3273             output[0x01] = type2bit(eeprom->channel_b_type, TYPE_2232H);
3274             if (eeprom->channel_b_driver)
3275                 output[0x01] |= DRIVER_VCP;
3276             else
3277                 output[0x01] &= ~DRIVER_VCP;
3278
3279             if (eeprom->suspend_dbus7)
3280                 output[0x01] |= SUSPEND_DBUS7_BIT;
3281             else
3282                 output[0x01] &= ~SUSPEND_DBUS7_BIT;
3283
3284             if (eeprom->suspend_pull_downs)
3285                 output[0x0A] |= 0x4;
3286             else
3287                 output[0x0A] &= ~0x4;
3288
3289             if (eeprom->group0_drive > DRIVE_16MA)
3290                 output[0x0c] |= DRIVE_16MA;
3291             else
3292                 output[0x0c] |= eeprom->group0_drive;
3293             if (eeprom->group0_schmitt)
3294                 output[0x0c] |= IS_SCHMITT;
3295             if (eeprom->group0_slew)
3296                 output[0x0c] |= SLOW_SLEW;
3297
3298             if (eeprom->group1_drive > DRIVE_16MA)
3299                 output[0x0c] |= DRIVE_16MA<<4;
3300             else
3301                 output[0x0c] |= eeprom->group1_drive<<4;
3302             if (eeprom->group1_schmitt)
3303                 output[0x0c] |= IS_SCHMITT<<4;
3304             if (eeprom->group1_slew)
3305                 output[0x0c] |= SLOW_SLEW<<4;
3306
3307             if (eeprom->group2_drive > DRIVE_16MA)
3308                 output[0x0d] |= DRIVE_16MA;
3309             else
3310                 output[0x0d] |= eeprom->group2_drive;
3311             if (eeprom->group2_schmitt)
3312                 output[0x0d] |= IS_SCHMITT;
3313             if (eeprom->group2_slew)
3314                 output[0x0d] |= SLOW_SLEW;
3315
3316             if (eeprom->group3_drive > DRIVE_16MA)
3317                 output[0x0d] |= DRIVE_16MA<<4;
3318             else
3319                 output[0x0d] |= eeprom->group3_drive<<4;
3320             if (eeprom->group3_schmitt)
3321                 output[0x0d] |= IS_SCHMITT<<4;
3322             if (eeprom->group3_slew)
3323                 output[0x0d] |= SLOW_SLEW<<4;
3324
3325             output[0x18] = eeprom->chip;
3326
3327             break;
3328         case TYPE_4232H:
3329             if (eeprom->channel_a_driver)
3330                 output[0x00] |= DRIVER_VCP;
3331             else
3332                 output[0x00] &= ~DRIVER_VCP;
3333             if (eeprom->channel_b_driver)
3334                 output[0x01] |= DRIVER_VCP;
3335             else
3336                 output[0x01] &= ~DRIVER_VCP;
3337             if (eeprom->channel_c_driver)
3338                 output[0x00] |= (DRIVER_VCP << 4);
3339             else
3340                 output[0x00] &= ~(DRIVER_VCP << 4);
3341             if (eeprom->channel_d_driver)
3342                 output[0x01] |= (DRIVER_VCP << 4);
3343             else
3344                 output[0x01] &= ~(DRIVER_VCP << 4);
3345
3346             if (eeprom->suspend_pull_downs)
3347                 output[0x0a] |= 0x4;
3348             else
3349                 output[0x0a] &= ~0x4;
3350
3351             if (eeprom->channel_a_rs485enable)
3352                 output[0x0b] |= CHANNEL_IS_RS485 << 0;
3353             else
3354                 output[0x0b] &= ~(CHANNEL_IS_RS485 << 0);
3355             if (eeprom->channel_b_rs485enable)
3356                 output[0x0b] |= CHANNEL_IS_RS485 << 1;
3357             else
3358                 output[0x0b] &= ~(CHANNEL_IS_RS485 << 1);
3359             if (eeprom->channel_c_rs485enable)
3360                 output[0x0b] |= CHANNEL_IS_RS485 << 2;
3361             else
3362                 output[0x0b] &= ~(CHANNEL_IS_RS485 << 2);
3363             if (eeprom->channel_d_rs485enable)
3364                 output[0x0b] |= CHANNEL_IS_RS485 << 3;
3365             else
3366                 output[0x0b] &= ~(CHANNEL_IS_RS485 << 3);
3367
3368             if (eeprom->group0_drive > DRIVE_16MA)
3369                 output[0x0c] |= DRIVE_16MA;
3370             else
3371                 output[0x0c] |= eeprom->group0_drive;
3372             if (eeprom->group0_schmitt)
3373                 output[0x0c] |= IS_SCHMITT;
3374             if (eeprom->group0_slew)
3375                 output[0x0c] |= SLOW_SLEW;
3376
3377             if (eeprom->group1_drive > DRIVE_16MA)
3378                 output[0x0c] |= DRIVE_16MA<<4;
3379             else
3380                 output[0x0c] |= eeprom->group1_drive<<4;
3381             if (eeprom->group1_schmitt)
3382                 output[0x0c] |= IS_SCHMITT<<4;
3383             if (eeprom->group1_slew)
3384                 output[0x0c] |= SLOW_SLEW<<4;
3385
3386             if (eeprom->group2_drive > DRIVE_16MA)
3387                 output[0x0d] |= DRIVE_16MA;
3388             else
3389                 output[0x0d] |= eeprom->group2_drive;
3390             if (eeprom->group2_schmitt)
3391                 output[0x0d] |= IS_SCHMITT;
3392             if (eeprom->group2_slew)
3393                 output[0x0d] |= SLOW_SLEW;
3394
3395             if (eeprom->group3_drive > DRIVE_16MA)
3396                 output[0x0d] |= DRIVE_16MA<<4;
3397             else
3398                 output[0x0d] |= eeprom->group3_drive<<4;
3399             if (eeprom->group3_schmitt)
3400                 output[0x0d] |= IS_SCHMITT<<4;
3401             if (eeprom->group3_slew)
3402                 output[0x0d] |= SLOW_SLEW<<4;
3403
3404             output[0x18] = eeprom->chip;
3405
3406             break;
3407         case TYPE_232H:
3408             output[0x00] = type2bit(eeprom->channel_a_type, TYPE_232H);
3409             if (eeprom->channel_a_driver)
3410                 output[0x00] |= DRIVER_VCPH;
3411             else
3412                 output[0x00] &= ~DRIVER_VCPH;
3413
3414             if (eeprom->powersave)
3415                 output[0x01] |= POWER_SAVE_DISABLE_H;
3416             else
3417                 output[0x01] &= ~POWER_SAVE_DISABLE_H;
3418
3419             if (eeprom->suspend_pull_downs)
3420                 output[0x0a] |= 0x4;
3421             else
3422                 output[0x0a] &= ~0x4;
3423
3424             if (eeprom->clock_polarity)
3425                 output[0x01] |= FT1284_CLK_IDLE_STATE;
3426             else
3427                 output[0x01] &= ~FT1284_CLK_IDLE_STATE;
3428             if (eeprom->data_order)
3429                 output[0x01] |= FT1284_DATA_LSB;
3430             else
3431                 output[0x01] &= ~FT1284_DATA_LSB;
3432             if (eeprom->flow_control)
3433                 output[0x01] |= FT1284_FLOW_CONTROL;
3434             else
3435                 output[0x01] &= ~FT1284_FLOW_CONTROL;
3436
3437             if (eeprom->group0_drive > DRIVE_16MA)
3438                 output[0x0c] |= DRIVE_16MA;
3439             else
3440                 output[0x0c] |= eeprom->group0_drive;
3441             if (eeprom->group0_schmitt)
3442                 output[0x0c] |= IS_SCHMITT;
3443             if (eeprom->group0_slew)
3444                 output[0x0c] |= SLOW_SLEW;
3445
3446             if (eeprom->group1_drive > DRIVE_16MA)
3447                 output[0x0d] |= DRIVE_16MA;
3448             else
3449                 output[0x0d] |= eeprom->group1_drive;
3450             if (eeprom->group1_schmitt)
3451                 output[0x0d] |= IS_SCHMITT;
3452             if (eeprom->group1_slew)
3453                 output[0x0d] |= SLOW_SLEW;
3454
3455             set_ft232h_cbus(eeprom, output);
3456
3457             output[0x1e] = eeprom->chip;
3458             /* FIXME: Build FT232H specific EEPROM settings */
3459             break;
3460         case TYPE_230X:
3461             output[0x00] = 0x80; /* Actually, leave the default value */
3462             /*FIXME: Make DBUS & CBUS Control configurable*/
3463             output[0x0c] = 0;    /* DBUS drive 4mA, CBUS drive 4mA like factory default */
3464             for (j = 0; j <= 6; j++)
3465             {
3466                 output[0x1a + j] = eeprom->cbus_function[j];
3467             }
3468             output[0x0b] = eeprom->invert;
3469             break;
3470     }
3471
3472     /* First address without use */
3473     free_start = 0;
3474     switch (ftdi->type)
3475     {
3476         case TYPE_230X:
3477             free_start += 2;
3478                         /* Fall through*/
3479         case TYPE_232H:
3480             free_start += 6;
3481                         /* Fall through*/
3482         case TYPE_2232H:
3483         case TYPE_4232H:
3484             free_start += 2;
3485                         /* Fall through*/
3486         case TYPE_R:
3487             free_start += 2;
3488                         /* Fall through*/
3489         case TYPE_2232C:
3490             free_start++;
3491                         /* Fall through*/
3492         case TYPE_AM:
3493         case TYPE_BM:
3494             free_start += 0x14;
3495     }
3496
3497     /* Arbitrary user data */
3498     if (eeprom->user_data && eeprom->user_data_size >= 0)
3499     {
3500         if (eeprom->user_data_addr < free_start)
3501             fprintf(stderr,"Warning, user data starts inside the generated data!\n");
3502         if (eeprom->user_data_addr + eeprom->user_data_size >= free_end)
3503             fprintf(stderr,"Warning, user data overlaps the strings area!\n");
3504         if (eeprom->user_data_addr + eeprom->user_data_size > eeprom->size)
3505             ftdi_error_return(-1,"eeprom size exceeded");
3506         memcpy(output + eeprom->user_data_addr, eeprom->user_data, eeprom->user_data_size);
3507     }
3508
3509     // calculate checksum
3510     checksum = 0xAAAA;
3511
3512     for (i = 0; i < eeprom->size/2-1; i++)
3513     {
3514         if ((ftdi->type == TYPE_230X) && (i == 0x12))
3515         {
3516             /* FT230X has a user section in the MTP which is not part of the checksum */
3517             i = 0x40;
3518         }
3519         if ((ftdi->type == TYPE_230X) && (i >=  0x40) && (i < 0x50)) {
3520             uint16_t data;
3521             if (ftdi_read_eeprom_location(ftdi, i, &data)) {
3522                 fprintf(stderr, "Reading Factory Configuration Data failed\n");
3523                 i = 0x50;
3524             }
3525             value = data;
3526             output[i * 2] = data;
3527             output[(i * 2) + 1] = data >> 8;
3528         }
3529         else {
3530             value = output[i*2];
3531             value += output[(i*2)+1] << 8;
3532         }
3533         checksum = value^checksum;
3534         checksum = (checksum << 1) | (checksum >> 15);
3535     }
3536
3537     output[eeprom->size-2] = checksum;
3538     output[eeprom->size-1] = checksum >> 8;
3539
3540     eeprom->initialized_for_connected_device = 1;
3541     return user_area_size;
3542 }
3543 /* Decode the encoded EEPROM field for the FTDI Mode into a value for the abstracted
3544  * EEPROM structure
3545  *
3546  * FTD2XX doesn't allow to set multiple bits in the interface mode bitfield, and so do we
3547  */
3548 static unsigned char bit2type(unsigned char bits)
3549 {
3550     switch (bits)
3551     {
3552         case   0: return CHANNEL_IS_UART;
3553         case   1: return CHANNEL_IS_FIFO;
3554         case   2: return CHANNEL_IS_OPTO;
3555         case   4: return CHANNEL_IS_CPU;
3556         case   8: return CHANNEL_IS_FT1284;
3557         default:
3558             fprintf(stderr," Unexpected value %d for Hardware Interface type\n",
3559                     bits);
3560     }
3561     return 0;
3562 }
3563 /* Decode 230X / 232R type chips invert bits
3564  * Prints directly to stdout.
3565 */
3566 static void print_inverted_bits(int invert)
3567 {
3568     const char *r_bits[] = {"TXD","RXD","RTS","CTS","DTR","DSR","DCD","RI"};
3569     int i;
3570
3571     fprintf(stdout,"Inverted bits:");
3572     for (i=0; i<8; i++)
3573         if ((invert & (1<<i)) == (1<<i))
3574             fprintf(stdout," %s",r_bits[i]);
3575
3576     fprintf(stdout,"\n");
3577 }
3578 /**
3579    Decode binary EEPROM image into an ftdi_eeprom structure.
3580
3581    For FT-X devices use AN_201 FT-X MTP memory Configuration to decode.
3582
3583    \param ftdi pointer to ftdi_context
3584    \param verbose Decode EEPROM on stdout
3585
3586    \retval 0: all fine
3587    \retval -1: something went wrong
3588
3589    FIXME: How to pass size? How to handle size field in ftdi_eeprom?
3590    FIXME: Strings are malloc'ed here and should be freed somewhere
3591 */
3592 int ftdi_eeprom_decode(struct ftdi_context *ftdi, int verbose)
3593 {
3594     int i, j;
3595     unsigned short checksum, eeprom_checksum, value;
3596     unsigned char manufacturer_size = 0, product_size = 0, serial_size = 0;
3597     int eeprom_size;
3598     struct ftdi_eeprom *eeprom;
3599     unsigned char *buf = NULL;
3600
3601     if (ftdi == NULL)
3602         ftdi_error_return(-1,"No context");
3603     if (ftdi->eeprom == NULL)
3604         ftdi_error_return(-1,"No eeprom structure");
3605
3606     eeprom = ftdi->eeprom;
3607     eeprom_size = eeprom->size;
3608     buf = ftdi->eeprom->buf;
3609
3610     // Addr 02: Vendor ID
3611     eeprom->vendor_id = buf[0x02] + (buf[0x03] << 8);
3612
3613     // Addr 04: Product ID
3614     eeprom->product_id = buf[0x04] + (buf[0x05] << 8);
3615
3616     // Addr 06: Device release number
3617     eeprom->release_number = buf[0x06] + (buf[0x07]<<8);
3618
3619     // Addr 08: Config descriptor
3620     // Bit 7: always 1
3621     // Bit 6: 1 if this device is self powered, 0 if bus powered
3622     // Bit 5: 1 if this device uses remote wakeup
3623     eeprom->self_powered = !!(buf[0x08] & 0x40);
3624     eeprom->remote_wakeup = !!(buf[0x08] & 0x20);
3625
3626     // Addr 09: Max power consumption: max power = value * 2 mA
3627     eeprom->max_power = MAX_POWER_MILLIAMP_PER_UNIT * buf[0x09];
3628
3629     // Addr 0A: Chip configuration
3630     // Bit 7: 0 - reserved
3631     // Bit 6: 0 - reserved
3632     // Bit 5: 0 - reserved
3633     // Bit 4: 1 - Change USB version on BM and 2232C
3634     // Bit 3: 1 - Use the serial number string
3635     // Bit 2: 1 - Enable suspend pull downs for lower power
3636     // Bit 1: 1 - Out EndPoint is Isochronous
3637     // Bit 0: 1 - In EndPoint is Isochronous
3638     //
3639     eeprom->in_is_isochronous  = !!(buf[0x0A]&0x01);
3640     eeprom->out_is_isochronous = !!(buf[0x0A]&0x02);
3641     eeprom->suspend_pull_downs = !!(buf[0x0A]&0x04);
3642     eeprom->use_serial         = !!(buf[0x0A] & USE_SERIAL_NUM);
3643     eeprom->use_usb_version    = !!(buf[0x0A] & USE_USB_VERSION_BIT);
3644
3645     // Addr 0C: USB version low byte when 0x0A
3646     // Addr 0D: USB version high byte when 0x0A
3647     eeprom->usb_version = buf[0x0C] + (buf[0x0D] << 8);
3648
3649     // Addr 0E: Offset of the manufacturer string + 0x80, calculated later
3650     // Addr 0F: Length of manufacturer string
3651     manufacturer_size = buf[0x0F]/2;
3652     if (eeprom->manufacturer)
3653         free(eeprom->manufacturer);
3654     if (manufacturer_size > 0)
3655     {
3656         eeprom->manufacturer = (char *)malloc(manufacturer_size);
3657         if (eeprom->manufacturer)
3658         {
3659             // Decode manufacturer
3660             i = buf[0x0E] & (eeprom_size -1); // offset
3661             for (j=0; j<manufacturer_size-1; j++)
3662             {
3663                 eeprom->manufacturer[j] = buf[2*j+i+2];
3664             }
3665             eeprom->manufacturer[j] = '\0';
3666         }
3667     }
3668     else eeprom->manufacturer = NULL;
3669
3670     // Addr 10: Offset of the product string + 0x80, calculated later
3671     // Addr 11: Length of product string
3672     if (eeprom->product)
3673         free(eeprom->product);
3674     product_size = buf[0x11]/2;
3675     if (product_size > 0)
3676     {
3677         eeprom->product = (char *)malloc(product_size);
3678         if (eeprom->product)
3679         {
3680             // Decode product name
3681             i = buf[0x10] & (eeprom_size -1); // offset
3682             for (j=0; j<product_size-1; j++)
3683             {
3684                 eeprom->product[j] = buf[2*j+i+2];
3685             }
3686             eeprom->product[j] = '\0';
3687         }
3688     }
3689     else eeprom->product = NULL;
3690
3691     // Addr 12: Offset of the serial string + 0x80, calculated later
3692     // Addr 13: Length of serial string
3693     if (eeprom->serial)
3694         free(eeprom->serial);
3695     serial_size = buf[0x13]/2;
3696     if (serial_size > 0)
3697     {
3698         eeprom->serial = (char *)malloc(serial_size);
3699         if (eeprom->serial)
3700         {
3701             // Decode serial
3702             i = buf[0x12] & (eeprom_size -1); // offset
3703             for (j=0; j<serial_size-1; j++)
3704             {
3705                 eeprom->serial[j] = buf[2*j+i+2];
3706             }
3707             eeprom->serial[j] = '\0';
3708         }
3709     }
3710     else eeprom->serial = NULL;
3711
3712     // verify checksum
3713     checksum = 0xAAAA;
3714
3715     for (i = 0; i < eeprom_size/2-1; i++)
3716     {
3717         if ((ftdi->type == TYPE_230X) && (i == 0x12))
3718         {
3719             /* FT230X has a user section in the MTP which is not part of the checksum */
3720             i = 0x40;
3721         }
3722         value = buf[i*2];
3723         value += buf[(i*2)+1] << 8;
3724
3725         checksum = value^checksum;
3726         checksum = (checksum << 1) | (checksum >> 15);
3727     }
3728
3729     eeprom_checksum = buf[eeprom_size-2] + (buf[eeprom_size-1] << 8);
3730
3731     if (eeprom_checksum != checksum)
3732     {
3733         fprintf(stderr, "Checksum Error: %04x %04x\n", checksum, eeprom_checksum);
3734         ftdi_error_return(-1,"EEPROM checksum error");
3735     }
3736
3737     eeprom->channel_a_type   = 0;
3738     if ((ftdi->type == TYPE_AM) || (ftdi->type == TYPE_BM))
3739     {
3740         eeprom->chip = -1;
3741     }
3742     else if (ftdi->type == TYPE_2232C)
3743     {
3744         eeprom->channel_a_type   = bit2type(buf[0x00] & 0x7);
3745         eeprom->channel_a_driver = !!(buf[0x00] & DRIVER_VCP);
3746         eeprom->high_current_a   = !!(buf[0x00] & HIGH_CURRENT_DRIVE);
3747         eeprom->channel_b_type   = buf[0x01] & 0x7;
3748         eeprom->channel_b_driver = !!(buf[0x01] & DRIVER_VCP);
3749         eeprom->high_current_b   = !!(buf[0x01] & HIGH_CURRENT_DRIVE);
3750         eeprom->chip = buf[0x14];
3751     }
3752     else if (ftdi->type == TYPE_R)
3753     {
3754         /* TYPE_R flags D2XX, not VCP as all others */
3755         eeprom->channel_a_driver = !(buf[0x00] & DRIVER_VCP);               /* note: inverted flag, use a single NOT */
3756         eeprom->high_current     = !!(buf[0x00] & HIGH_CURRENT_DRIVE_R);
3757         eeprom->external_oscillator = !!(buf[0x00] & 0x02);
3758         if ( (buf[0x01]&0x40) != 0x40)
3759             fprintf(stderr,
3760                     "TYPE_R EEPROM byte[0x01] Bit 6 unexpected Endpoint size."
3761                     " If this happened with the\n"
3762                     " EEPROM programmed by FTDI tools, please report "
3763                     "to libftdi@developer.intra2net.com\n");
3764
3765         eeprom->chip = buf[0x16];
3766         // Addr 0B: Invert data lines
3767         // Works only on FT232R, not FT245R, but no way to distinguish
3768         eeprom->invert = buf[0x0B];                                         /* note: not a bitflag */
3769         // Addr 14: CBUS function: CBUS0, CBUS1
3770         // Addr 15: CBUS function: CBUS2, CBUS3
3771         // Addr 16: CBUS function: CBUS5
3772         eeprom->cbus_function[0] = buf[0x14] & 0x0f;
3773         eeprom->cbus_function[1] = (buf[0x14] >> 4) & 0x0f;
3774         eeprom->cbus_function[2] = buf[0x15] & 0x0f;
3775         eeprom->cbus_function[3] = (buf[0x15] >> 4) & 0x0f;
3776         eeprom->cbus_function[4] = buf[0x16] & 0x0f;
3777     }
3778     else if ((ftdi->type == TYPE_2232H) || (ftdi->type == TYPE_4232H))
3779     {
3780         eeprom->channel_a_driver = !!(buf[0x00] & DRIVER_VCP);
3781         eeprom->channel_b_driver = !!(buf[0x01] & DRIVER_VCP);
3782
3783         if (ftdi->type == TYPE_2232H)
3784         {
3785             eeprom->channel_a_type   = bit2type(buf[0x00] & 0x7);
3786             eeprom->channel_b_type   = bit2type(buf[0x01] & 0x7);
3787             eeprom->suspend_dbus7    = !!(buf[0x01] & SUSPEND_DBUS7_BIT);
3788         }
3789         else
3790         {
3791             eeprom->channel_c_driver = !!((buf[0x00] >> 4) & DRIVER_VCP);
3792             eeprom->channel_d_driver = !!((buf[0x01] >> 4) & DRIVER_VCP);
3793             eeprom->channel_a_rs485enable = !!(buf[0x0b] & (CHANNEL_IS_RS485 << 0));
3794             eeprom->channel_b_rs485enable = !!(buf[0x0b] & (CHANNEL_IS_RS485 << 1));
3795             eeprom->channel_c_rs485enable = !!(buf[0x0b] & (CHANNEL_IS_RS485 << 2));
3796             eeprom->channel_d_rs485enable = !!(buf[0x0b] & (CHANNEL_IS_RS485 << 3));
3797         }
3798
3799         eeprom->chip = buf[0x18];
3800         eeprom->group0_drive   = buf[0x0c]       & DRIVE_16MA;              /* not a bitflag */
3801         eeprom->group0_schmitt = !!(buf[0x0c]       & IS_SCHMITT);
3802         eeprom->group0_slew    = !!(buf[0x0c]       & SLOW_SLEW);
3803         eeprom->group1_drive   = (buf[0x0c] >> 4) & DRIVE_16MA;             /* not a bitflag */
3804         eeprom->group1_schmitt = !!((buf[0x0c] >> 4) & IS_SCHMITT);
3805         eeprom->group1_slew    = !!((buf[0x0c] >> 4) & SLOW_SLEW);
3806         eeprom->group2_drive   = buf[0x0d]       & DRIVE_16MA;              /* not a bitflag */
3807         eeprom->group2_schmitt = !!(buf[0x0d]       & IS_SCHMITT);
3808         eeprom->group2_slew    = !!(buf[0x0d]       & SLOW_SLEW);
3809         eeprom->group3_drive   = (buf[0x0d] >> 4) & DRIVE_16MA;             /* not a bitflag */
3810         eeprom->group3_schmitt = !!((buf[0x0d] >> 4) & IS_SCHMITT);
3811         eeprom->group3_slew    = !!((buf[0x0d] >> 4) & SLOW_SLEW);
3812     }
3813     else if (ftdi->type == TYPE_232H)
3814     {
3815         eeprom->channel_a_type   = buf[0x00] & 0xf;
3816         eeprom->channel_a_driver = !!(buf[0x00] & DRIVER_VCPH);
3817         eeprom->clock_polarity =  !!(buf[0x01]       & FT1284_CLK_IDLE_STATE);
3818         eeprom->data_order     =  !!(buf[0x01]       & FT1284_DATA_LSB);
3819         eeprom->flow_control   =  !!(buf[0x01]       & FT1284_FLOW_CONTROL);
3820         eeprom->powersave      =  !!(buf[0x01]       & POWER_SAVE_DISABLE_H);
3821         eeprom->group0_drive   =  buf[0x0c]       & DRIVE_16MA;             /* not a bitflag */
3822         eeprom->group0_schmitt =  !!(buf[0x0c]       & IS_SCHMITT);
3823         eeprom->group0_slew    =  !!(buf[0x0c]       & SLOW_SLEW);
3824         eeprom->group1_drive   =  buf[0x0d]       & DRIVE_16MA;             /* not a bitflag */
3825         eeprom->group1_schmitt =  !!(buf[0x0d]       & IS_SCHMITT);
3826         eeprom->group1_slew    =  !!(buf[0x0d]       & SLOW_SLEW);
3827
3828         for(i=0; i<5; i++)
3829         {
3830             eeprom->cbus_function[2*i  ] =  buf[0x18+i] & 0x0f;
3831             eeprom->cbus_function[2*i+1] = (buf[0x18+i] >> 4) & 0x0f;
3832         }
3833         eeprom->chip = buf[0x1e];
3834         /*FIXME: Decipher more values*/
3835     }
3836     else if (ftdi->type == TYPE_230X)
3837     {
3838         for(i=0; i<4; i++)
3839         {
3840             eeprom->cbus_function[i] =  buf[0x1a + i] & 0xFF;
3841         }
3842         eeprom->group0_drive   = buf[0x0c]       & DRIVE_16MA;              /* not a bitflag */
3843         eeprom->group0_schmitt = !!(buf[0x0c]       & IS_SCHMITT);
3844         eeprom->group0_slew    = !!(buf[0x0c]       & SLOW_SLEW);
3845         eeprom->group1_drive   = (buf[0x0c] >> 4) & DRIVE_16MA;             /* not a bitflag */
3846         eeprom->group1_schmitt = !!((buf[0x0c] >> 4) & IS_SCHMITT);
3847         eeprom->group1_slew    = !!((buf[0x0c] >> 4) & SLOW_SLEW);
3848
3849         eeprom->invert = buf[0xb];                                          /* not a bitflag */
3850     }
3851
3852     if (verbose)
3853     {
3854         const char *channel_mode[] = {"UART", "FIFO", "CPU", "OPTO", "FT1284"};
3855         fprintf(stdout, "VID:     0x%04x\n",eeprom->vendor_id);
3856         fprintf(stdout, "PID:     0x%04x\n",eeprom->product_id);
3857         fprintf(stdout, "Release: 0x%04x\n",eeprom->release_number);
3858
3859         if (eeprom->self_powered)
3860             fprintf(stdout, "Self-Powered%s", (eeprom->remote_wakeup)?", USB Remote Wake Up\n":"\n");
3861         else
3862             fprintf(stdout, "Bus Powered: %3d mA%s", eeprom->max_power,
3863                     (eeprom->remote_wakeup)?" USB Remote Wake Up\n":"\n");
3864         if (eeprom->manufacturer)
3865             fprintf(stdout, "Manufacturer: %s\n",eeprom->manufacturer);
3866         if (eeprom->product)
3867             fprintf(stdout, "Product:      %s\n",eeprom->product);
3868         if (eeprom->serial)
3869             fprintf(stdout, "Serial:       %s\n",eeprom->serial);
3870         fprintf(stdout,     "Checksum      : %04x\n", checksum);
3871         if (ftdi->type == TYPE_R) {
3872             fprintf(stdout,     "Internal EEPROM\n");
3873             fprintf(stdout,"Oscillator: %s\n", eeprom->external_oscillator?"External":"Internal");
3874         }
3875         else if (eeprom->chip >= 0x46)
3876             fprintf(stdout,     "Attached EEPROM: 93x%02x\n", eeprom->chip);
3877         if (eeprom->suspend_dbus7)
3878             fprintf(stdout, "Suspend on DBUS7\n");
3879         if (eeprom->suspend_pull_downs)
3880             fprintf(stdout, "Pull IO pins low during suspend\n");
3881         if(eeprom->powersave)
3882         {
3883             if(ftdi->type >= TYPE_232H)
3884                 fprintf(stdout,"Enter low power state on ACBUS7\n");
3885         }
3886         if (eeprom->remote_wakeup)
3887             fprintf(stdout, "Enable Remote Wake Up\n");
3888         fprintf(stdout, "PNP: %d\n",(eeprom->is_not_pnp)?0:1);
3889         if (ftdi->type >= TYPE_2232C)
3890             fprintf(stdout,"Channel A has Mode %s%s%s\n",
3891                     channel_mode[eeprom->channel_a_type],
3892                     (eeprom->channel_a_driver)?" VCP":"",
3893                     (eeprom->high_current_a)?" High Current IO":"");
3894         if (ftdi->type == TYPE_232H)
3895         {
3896             fprintf(stdout,"FT1284 Mode Clock is idle %s, %s first, %sFlow Control\n",
3897                     (eeprom->clock_polarity)?"HIGH":"LOW",
3898                     (eeprom->data_order)?"LSB":"MSB",
3899                     (eeprom->flow_control)?"":"No ");
3900         }
3901         if ((ftdi->type == TYPE_2232H) || (ftdi->type == TYPE_4232H) || (ftdi->type == TYPE_2232C))
3902             fprintf(stdout,"Channel B has Mode %s%s%s\n",
3903                     channel_mode[eeprom->channel_b_type],
3904                     (eeprom->channel_b_driver)?" VCP":"",
3905                     (eeprom->high_current_b)?" High Current IO":"");
3906         if (ftdi->type == TYPE_4232H)
3907         {
3908             fprintf(stdout,"Channel C has Mode UART%s\n",
3909                     (eeprom->channel_c_driver)?" VCP":"");
3910             fprintf(stdout,"Channel D has Mode UART%s\n",
3911                     (eeprom->channel_d_driver)?" VCP":"");
3912         }
3913         if (((ftdi->type == TYPE_BM) || (ftdi->type == TYPE_2232C)) &&
3914                 eeprom->use_usb_version)
3915             fprintf(stdout,"Use explicit USB Version %04x\n",eeprom->usb_version);
3916
3917         if ((ftdi->type == TYPE_2232H) || (ftdi->type == TYPE_4232H))
3918         {
3919             fprintf(stdout,"%s has %d mA drive%s%s\n",
3920                     (ftdi->type == TYPE_2232H)?"AL":"A",
3921                     (eeprom->group0_drive+1) *4,
3922                     (eeprom->group0_schmitt)?" Schmitt Input":"",
3923                     (eeprom->group0_slew)?" Slow Slew":"");
3924             fprintf(stdout,"%s has %d mA drive%s%s\n",
3925                     (ftdi->type == TYPE_2232H)?"AH":"B",
3926                     (eeprom->group1_drive+1) *4,
3927                     (eeprom->group1_schmitt)?" Schmitt Input":"",
3928                     (eeprom->group1_slew)?" Slow Slew":"");
3929             fprintf(stdout,"%s has %d mA drive%s%s\n",
3930                     (ftdi->type == TYPE_2232H)?"BL":"C",
3931                     (eeprom->group2_drive+1) *4,
3932                     (eeprom->group2_schmitt)?" Schmitt Input":"",
3933                     (eeprom->group2_slew)?" Slow Slew":"");
3934             fprintf(stdout,"%s has %d mA drive%s%s\n",
3935                     (ftdi->type == TYPE_2232H)?"BH":"D",
3936                     (eeprom->group3_drive+1) *4,
3937                     (eeprom->group3_schmitt)?" Schmitt Input":"",
3938                     (eeprom->group3_slew)?" Slow Slew":"");
3939         }
3940         else if (ftdi->type == TYPE_232H)
3941         {
3942             const char *cbush_mux[] = {"TRISTATE","TXLED","RXLED", "TXRXLED","PWREN",
3943                                  "SLEEP","DRIVE_0","DRIVE_1","IOMODE","TXDEN",
3944                                  "CLK30","CLK15","CLK7_5"
3945                                 };
3946             fprintf(stdout,"ACBUS has %d mA drive%s%s\n",
3947                     (eeprom->group0_drive+1) *4,
3948                     (eeprom->group0_schmitt)?" Schmitt Input":"",
3949                     (eeprom->group0_slew)?" Slow Slew":"");
3950             fprintf(stdout,"ADBUS has %d mA drive%s%s\n",
3951                     (eeprom->group1_drive+1) *4,
3952                     (eeprom->group1_schmitt)?" Schmitt Input":"",
3953                     (eeprom->group1_slew)?" Slow Slew":"");
3954             for (i=0; i<10; i++)
3955             {
3956                 if (eeprom->cbus_function[i]<= CBUSH_CLK7_5 )
3957                     fprintf(stdout,"C%d Function: %s\n", i,
3958                             cbush_mux[eeprom->cbus_function[i]]);
3959             }
3960         }
3961         else if (ftdi->type == TYPE_230X)
3962         {
3963             const char *cbusx_mux[] = {"TRISTATE","TXLED","RXLED", "TXRXLED","PWREN",
3964                                  "SLEEP","DRIVE_0","DRIVE_1","IOMODE","TXDEN",
3965                                  "CLK24","CLK12","CLK6","BAT_DETECT","BAT_DETECT#",
3966                                  "I2C_TXE#", "I2C_RXF#", "VBUS_SENSE", "BB_WR#",
3967                                  "BBRD#", "TIME_STAMP", "AWAKE#",
3968                                 };
3969             fprintf(stdout,"DBUS has %d mA drive%s%s\n",
3970                     (eeprom->group0_drive+1) *4,
3971                     (eeprom->group0_schmitt)?" Schmitt Input":"",
3972                     (eeprom->group0_slew)?" Slow Slew":"");
3973             fprintf(stdout,"CBUS has %d mA drive%s%s\n",
3974                     (eeprom->group1_drive+1) *4,
3975                     (eeprom->group1_schmitt)?" Schmitt Input":"",
3976                     (eeprom->group1_slew)?" Slow Slew":"");
3977             for (i=0; i<4; i++)
3978             {
3979                 if (eeprom->cbus_function[i]<= CBUSX_AWAKE)
3980                     fprintf(stdout,"CBUS%d Function: %s\n", i, cbusx_mux[eeprom->cbus_function[i]]);
3981             }
3982
3983             if (eeprom->invert)
3984                 print_inverted_bits(eeprom->invert);
3985         }
3986
3987         if (ftdi->type == TYPE_R)
3988         {
3989             const char *cbus_mux[] = {"TXDEN","PWREN","RXLED", "TXLED","TX+RXLED",
3990                                 "SLEEP","CLK48","CLK24","CLK12","CLK6",
3991                                 "IOMODE","BB_WR","BB_RD"
3992                                };
3993             const char *cbus_BB[] = {"RXF","TXE","RD", "WR"};
3994
3995             if (eeprom->invert)
3996                 print_inverted_bits(eeprom->invert);
3997
3998             for (i=0; i<5; i++)
3999             {
4000                 if (eeprom->cbus_function[i]<=CBUS_BB_RD)
4001                     fprintf(stdout,"C%d Function: %s\n", i,
4002                             cbus_mux[eeprom->cbus_function[i]]);
4003                 else
4004                 {
4005                     if (i < 4)
4006                         /* Running MPROG show that C0..3 have fixed function Synchronous
4007                            Bit Bang mode */
4008                         fprintf(stdout,"C%d BB Function: %s\n", i,
4009                                 cbus_BB[i]);
4010                     else
4011                         fprintf(stdout, "Unknown CBUS mode. Might be special mode?\n");
4012                 }
4013             }
4014         }
4015     }
4016     return 0;
4017 }
4018
4019 /**
4020    Get a value from the decoded EEPROM structure
4021
4022    \param ftdi pointer to ftdi_context
4023    \param value_name Enum of the value to query
4024    \param value Pointer to store read value
4025
4026    \retval 0: all fine
4027    \retval -1: Value doesn't exist
4028 */
4029 int ftdi_get_eeprom_value(struct ftdi_context *ftdi, enum ftdi_eeprom_value value_name, int* value)
4030 {
4031     switch (value_name)
4032     {
4033         case VENDOR_ID:
4034             *value = ftdi->eeprom->vendor_id;
4035             break;
4036         case PRODUCT_ID:
4037             *value = ftdi->eeprom->product_id;
4038             break;
4039         case RELEASE_NUMBER:
4040             *value = ftdi->eeprom->release_number;
4041             break;
4042         case SELF_POWERED:
4043             *value = ftdi->eeprom->self_powered;
4044             break;
4045         case REMOTE_WAKEUP:
4046             *value = ftdi->eeprom->remote_wakeup;
4047             break;
4048         case IS_NOT_PNP:
4049             *value = ftdi->eeprom->is_not_pnp;
4050             break;
4051         case SUSPEND_DBUS7:
4052             *value = ftdi->eeprom->suspend_dbus7;
4053             break;
4054         case IN_IS_ISOCHRONOUS:
4055             *value = ftdi->eeprom->in_is_isochronous;
4056             break;
4057         case OUT_IS_ISOCHRONOUS:
4058             *value = ftdi->eeprom->out_is_isochronous;
4059             break;
4060         case SUSPEND_PULL_DOWNS:
4061             *value = ftdi->eeprom->suspend_pull_downs;
4062             break;
4063         case USE_SERIAL:
4064             *value = ftdi->eeprom->use_serial;
4065             break;
4066         case USB_VERSION:
4067             *value = ftdi->eeprom->usb_version;
4068             break;
4069         case USE_USB_VERSION:
4070             *value = ftdi->eeprom->use_usb_version;
4071             break;
4072         case MAX_POWER:
4073             *value = ftdi->eeprom->max_power;
4074             break;
4075         case CHANNEL_A_TYPE:
4076             *value = ftdi->eeprom->channel_a_type;
4077             break;
4078         case CHANNEL_B_TYPE:
4079             *value = ftdi->eeprom->channel_b_type;
4080             break;
4081         case CHANNEL_A_DRIVER:
4082             *value = ftdi->eeprom->channel_a_driver;
4083             break;
4084         case CHANNEL_B_DRIVER:
4085             *value = ftdi->eeprom->channel_b_driver;
4086             break;
4087         case CHANNEL_C_DRIVER:
4088             *value = ftdi->eeprom->channel_c_driver;
4089             break;
4090         case CHANNEL_D_DRIVER:
4091             *value = ftdi->eeprom->channel_d_driver;
4092             break;
4093         case CHANNEL_A_RS485:
4094             *value = ftdi->eeprom->channel_a_rs485enable;
4095             break;
4096         case CHANNEL_B_RS485:
4097             *value = ftdi->eeprom->channel_b_rs485enable;
4098             break;
4099         case CHANNEL_C_RS485:
4100             *value = ftdi->eeprom->channel_c_rs485enable;
4101             break;
4102         case CHANNEL_D_RS485:
4103             *value = ftdi->eeprom->channel_d_rs485enable;
4104             break;
4105         case CBUS_FUNCTION_0:
4106             *value = ftdi->eeprom->cbus_function[0];
4107             break;
4108         case CBUS_FUNCTION_1:
4109             *value = ftdi->eeprom->cbus_function[1];
4110             break;
4111         case CBUS_FUNCTION_2:
4112             *value = ftdi->eeprom->cbus_function[2];
4113             break;
4114         case CBUS_FUNCTION_3:
4115             *value = ftdi->eeprom->cbus_function[3];
4116             break;
4117         case CBUS_FUNCTION_4:
4118             *value = ftdi->eeprom->cbus_function[4];
4119             break;
4120         case CBUS_FUNCTION_5:
4121             *value = ftdi->eeprom->cbus_function[5];
4122             break;
4123         case CBUS_FUNCTION_6:
4124             *value = ftdi->eeprom->cbus_function[6];
4125             break;
4126         case CBUS_FUNCTION_7:
4127             *value = ftdi->eeprom->cbus_function[7];
4128             break;
4129         case CBUS_FUNCTION_8:
4130             *value = ftdi->eeprom->cbus_function[8];
4131             break;
4132         case CBUS_FUNCTION_9:
4133             *value = ftdi->eeprom->cbus_function[9];
4134             break;
4135         case HIGH_CURRENT:
4136             *value = ftdi->eeprom->high_current;
4137             break;
4138         case HIGH_CURRENT_A:
4139             *value = ftdi->eeprom->high_current_a;
4140             break;
4141         case HIGH_CURRENT_B:
4142             *value = ftdi->eeprom->high_current_b;
4143             break;
4144         case INVERT:
4145             *value = ftdi->eeprom->invert;
4146             break;
4147         case GROUP0_DRIVE:
4148             *value = ftdi->eeprom->group0_drive;
4149             break;
4150         case GROUP0_SCHMITT:
4151             *value = ftdi->eeprom->group0_schmitt;
4152             break;
4153         case GROUP0_SLEW:
4154             *value = ftdi->eeprom->group0_slew;
4155             break;
4156         case GROUP1_DRIVE:
4157             *value = ftdi->eeprom->group1_drive;
4158             break;
4159         case GROUP1_SCHMITT:
4160             *value = ftdi->eeprom->group1_schmitt;
4161             break;
4162         case GROUP1_SLEW:
4163             *value = ftdi->eeprom->group1_slew;
4164             break;
4165         case GROUP2_DRIVE:
4166             *value = ftdi->eeprom->group2_drive;
4167             break;
4168         case GROUP2_SCHMITT:
4169             *value = ftdi->eeprom->group2_schmitt;
4170             break;
4171         case GROUP2_SLEW:
4172             *value = ftdi->eeprom->group2_slew;
4173             break;
4174         case GROUP3_DRIVE:
4175             *value = ftdi->eeprom->group3_drive;
4176             break;
4177         case GROUP3_SCHMITT:
4178             *value = ftdi->eeprom->group3_schmitt;
4179             break;
4180         case GROUP3_SLEW:
4181             *value = ftdi->eeprom->group3_slew;
4182             break;
4183         case POWER_SAVE:
4184             *value = ftdi->eeprom->powersave;
4185             break;
4186         case CLOCK_POLARITY:
4187             *value = ftdi->eeprom->clock_polarity;
4188             break;
4189         case DATA_ORDER:
4190             *value = ftdi->eeprom->data_order;
4191             break;
4192         case FLOW_CONTROL:
4193             *value = ftdi->eeprom->flow_control;
4194             break;
4195         case CHIP_TYPE:
4196             *value = ftdi->eeprom->chip;
4197             break;
4198         case CHIP_SIZE:
4199             *value = ftdi->eeprom->size;
4200             break;
4201         case EXTERNAL_OSCILLATOR:
4202             *value = ftdi->eeprom->external_oscillator;
4203             break;
4204         case USER_DATA_ADDR:
4205             *value = ftdi->eeprom->user_data_addr;
4206             break;
4207         default:
4208             ftdi_error_return(-1, "Request for unknown EEPROM value");
4209     }
4210     return 0;
4211 }
4212
4213 /**
4214    Set a value in the decoded EEPROM Structure
4215    No parameter checking is performed
4216
4217    \param ftdi pointer to ftdi_context
4218    \param value_name Enum of the value to set
4219    \param value to set
4220
4221    \retval 0: all fine
4222    \retval -1: Value doesn't exist
4223    \retval -2: Value not user settable
4224 */
4225 int ftdi_set_eeprom_value(struct ftdi_context *ftdi, enum ftdi_eeprom_value value_name, int value)
4226 {
4227     switch (value_name)
4228     {
4229         case VENDOR_ID:
4230             ftdi->eeprom->vendor_id = value;
4231             break;
4232         case PRODUCT_ID:
4233             ftdi->eeprom->product_id = value;
4234             break;
4235         case RELEASE_NUMBER:
4236             ftdi->eeprom->release_number = value;
4237             break;
4238         case SELF_POWERED:
4239             ftdi->eeprom->self_powered = value;
4240             break;
4241         case REMOTE_WAKEUP:
4242             ftdi->eeprom->remote_wakeup = value;
4243             break;
4244         case IS_NOT_PNP:
4245             ftdi->eeprom->is_not_pnp = value;
4246             break;
4247         case SUSPEND_DBUS7:
4248             ftdi->eeprom->suspend_dbus7 = value;
4249             break;
4250         case IN_IS_ISOCHRONOUS:
4251             ftdi->eeprom->in_is_isochronous = value;
4252             break;
4253         case OUT_IS_ISOCHRONOUS:
4254             ftdi->eeprom->out_is_isochronous = value;
4255             break;
4256         case SUSPEND_PULL_DOWNS:
4257             ftdi->eeprom->suspend_pull_downs = value;
4258             break;
4259         case USE_SERIAL:
4260             ftdi->eeprom->use_serial = value;
4261             break;
4262         case USB_VERSION:
4263             ftdi->eeprom->usb_version = value;
4264             break;
4265         case USE_USB_VERSION:
4266             ftdi->eeprom->use_usb_version = value;
4267             break;
4268         case MAX_POWER:
4269             ftdi->eeprom->max_power = value;
4270             break;
4271         case CHANNEL_A_TYPE:
4272             ftdi->eeprom->channel_a_type = value;
4273             break;
4274         case CHANNEL_B_TYPE:
4275             ftdi->eeprom->channel_b_type = value;
4276             break;
4277         case CHANNEL_A_DRIVER:
4278             ftdi->eeprom->channel_a_driver = value;
4279             break;
4280         case CHANNEL_B_DRIVER:
4281             ftdi->eeprom->channel_b_driver = value;
4282             break;
4283         case CHANNEL_C_DRIVER:
4284             ftdi->eeprom->channel_c_driver = value;
4285             break;
4286         case CHANNEL_D_DRIVER:
4287             ftdi->eeprom->channel_d_driver = value;
4288             break;
4289         case CHANNEL_A_RS485:
4290             ftdi->eeprom->channel_a_rs485enable = value;
4291             break;
4292         case CHANNEL_B_RS485:
4293             ftdi->eeprom->channel_b_rs485enable = value;
4294             break;
4295         case CHANNEL_C_RS485:
4296             ftdi->eeprom->channel_c_rs485enable = value;
4297             break;
4298         case CHANNEL_D_RS485:
4299             ftdi->eeprom->channel_d_rs485enable = value;
4300             break;
4301         case CBUS_FUNCTION_0:
4302             ftdi->eeprom->cbus_function[0] = value;
4303             break;
4304         case CBUS_FUNCTION_1:
4305             ftdi->eeprom->cbus_function[1] = value;
4306             break;
4307         case CBUS_FUNCTION_2:
4308             ftdi->eeprom->cbus_function[2] = value;
4309             break;
4310         case CBUS_FUNCTION_3:
4311             ftdi->eeprom->cbus_function[3] = value;
4312             break;
4313         case CBUS_FUNCTION_4:
4314             ftdi->eeprom->cbus_function[4] = value;
4315             break;
4316         case CBUS_FUNCTION_5:
4317             ftdi->eeprom->cbus_function[5] = value;
4318             break;
4319         case CBUS_FUNCTION_6:
4320             ftdi->eeprom->cbus_function[6] = value;
4321             break;
4322         case CBUS_FUNCTION_7:
4323             ftdi->eeprom->cbus_function[7] = value;
4324             break;
4325         case CBUS_FUNCTION_8:
4326             ftdi->eeprom->cbus_function[8] = value;
4327             break;
4328         case CBUS_FUNCTION_9:
4329             ftdi->eeprom->cbus_function[9] = value;
4330             break;
4331         case HIGH_CURRENT:
4332             ftdi->eeprom->high_current = value;
4333             break;
4334         case HIGH_CURRENT_A:
4335             ftdi->eeprom->high_current_a = value;
4336             break;
4337         case HIGH_CURRENT_B:
4338             ftdi->eeprom->high_current_b = value;
4339             break;
4340         case INVERT:
4341             ftdi->eeprom->invert = value;
4342             break;
4343         case GROUP0_DRIVE:
4344             ftdi->eeprom->group0_drive = value;
4345             break;
4346         case GROUP0_SCHMITT:
4347             ftdi->eeprom->group0_schmitt = value;
4348             break;
4349         case GROUP0_SLEW:
4350             ftdi->eeprom->group0_slew = value;
4351             break;
4352         case GROUP1_DRIVE:
4353             ftdi->eeprom->group1_drive = value;
4354             break;
4355         case GROUP1_SCHMITT:
4356             ftdi->eeprom->group1_schmitt = value;
4357             break;
4358         case GROUP1_SLEW:
4359             ftdi->eeprom->group1_slew = value;
4360             break;
4361         case GROUP2_DRIVE:
4362             ftdi->eeprom->group2_drive = value;
4363             break;
4364         case GROUP2_SCHMITT:
4365             ftdi->eeprom->group2_schmitt = value;
4366             break;
4367         case GROUP2_SLEW:
4368             ftdi->eeprom->group2_slew = value;
4369             break;
4370         case GROUP3_DRIVE:
4371             ftdi->eeprom->group3_drive = value;
4372             break;
4373         case GROUP3_SCHMITT:
4374             ftdi->eeprom->group3_schmitt = value;
4375             break;
4376         case GROUP3_SLEW:
4377             ftdi->eeprom->group3_slew = value;
4378             break;
4379         case CHIP_TYPE:
4380             ftdi->eeprom->chip = value;
4381             break;
4382         case POWER_SAVE:
4383             ftdi->eeprom->powersave = value;
4384             break;
4385         case CLOCK_POLARITY:
4386             ftdi->eeprom->clock_polarity = value;
4387             break;
4388         case DATA_ORDER:
4389             ftdi->eeprom->data_order = value;
4390             break;
4391         case FLOW_CONTROL:
4392             ftdi->eeprom->flow_control = value;
4393             break;
4394         case CHIP_SIZE:
4395             ftdi_error_return(-2, "EEPROM Value can't be changed");
4396             break;
4397         case EXTERNAL_OSCILLATOR:
4398             ftdi->eeprom->external_oscillator = value;
4399             break;
4400         case USER_DATA_ADDR:
4401             ftdi->eeprom->user_data_addr = value;
4402             break;
4403
4404         default :
4405             ftdi_error_return(-1, "Request to unknown EEPROM value");
4406     }
4407     ftdi->eeprom->initialized_for_connected_device = 0;
4408     return 0;
4409 }
4410
4411 /** Get the read-only buffer to the binary EEPROM content
4412
4413     \param ftdi pointer to ftdi_context
4414     \param buf buffer to receive EEPROM content
4415     \param size Size of receiving buffer
4416
4417     \retval 0: All fine
4418     \retval -1: struct ftdi_contxt or ftdi_eeprom missing
4419     \retval -2: Not enough room to store eeprom
4420 */
4421 int ftdi_get_eeprom_buf(struct ftdi_context *ftdi, unsigned char * buf, int size)
4422 {
4423     if (!ftdi || !(ftdi->eeprom))
4424         ftdi_error_return(-1, "No appropriate structure");
4425
4426     if (!buf || size < ftdi->eeprom->size)
4427         ftdi_error_return(-1, "Not enough room to store eeprom");
4428
4429     // Only copy up to FTDI_MAX_EEPROM_SIZE bytes
4430     if (size > FTDI_MAX_EEPROM_SIZE)
4431         size = FTDI_MAX_EEPROM_SIZE;
4432
4433     memcpy(buf, ftdi->eeprom->buf, size);
4434
4435     return 0;
4436 }
4437
4438 /** Set the EEPROM content from the user-supplied prefilled buffer
4439
4440     \param ftdi pointer to ftdi_context
4441     \param buf buffer to read EEPROM content
4442     \param size Size of buffer
4443
4444     \retval 0: All fine
4445     \retval -1: struct ftdi_context or ftdi_eeprom or buf missing
4446 */
4447 int ftdi_set_eeprom_buf(struct ftdi_context *ftdi, const unsigned char * buf, int size)
4448 {
4449     if (!ftdi || !(ftdi->eeprom) || !buf)
4450         ftdi_error_return(-1, "No appropriate structure");
4451
4452     // Only copy up to FTDI_MAX_EEPROM_SIZE bytes
4453     if (size > FTDI_MAX_EEPROM_SIZE)
4454         size = FTDI_MAX_EEPROM_SIZE;
4455
4456     memcpy(ftdi->eeprom->buf, buf, size);
4457
4458     return 0;
4459 }
4460
4461 /** Set the EEPROM user data content from the user-supplied prefilled buffer
4462
4463     \param ftdi pointer to ftdi_context
4464     \param buf buffer to read EEPROM user data content
4465     \param size Size of buffer
4466
4467     \retval 0: All fine
4468     \retval -1: struct ftdi_context or ftdi_eeprom or buf missing
4469 */
4470 int ftdi_set_eeprom_user_data(struct ftdi_context *ftdi, const char * buf, int size)
4471 {
4472     if (!ftdi || !(ftdi->eeprom) || !buf)
4473         ftdi_error_return(-1, "No appropriate structure");
4474
4475     ftdi->eeprom->user_data_size = size;
4476     ftdi->eeprom->user_data = buf;
4477     return 0;
4478 }
4479
4480 /**
4481     Read eeprom location
4482
4483     \param ftdi pointer to ftdi_context
4484     \param eeprom_addr Address of eeprom location to be read
4485     \param eeprom_val Pointer to store read eeprom location
4486
4487     \retval  0: all fine
4488     \retval -1: read failed
4489     \retval -2: USB device unavailable
4490 */
4491 int ftdi_read_eeprom_location (struct ftdi_context *ftdi, int eeprom_addr, unsigned short *eeprom_val)
4492 {
4493     unsigned char buf[2];
4494
4495     if (ftdi == NULL || ftdi->usb_dev == NULL)
4496         ftdi_error_return(-2, "USB device unavailable");
4497
4498     if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_IN_REQTYPE, SIO_READ_EEPROM_REQUEST, 0, eeprom_addr, buf, 2, ftdi->usb_read_timeout) != 2)
4499         ftdi_error_return(-1, "reading eeprom failed");
4500
4501     *eeprom_val = (0xff & buf[0]) | (buf[1] << 8);
4502
4503     return 0;
4504 }
4505
4506 /**
4507     Read eeprom
4508
4509     \param ftdi pointer to ftdi_context
4510
4511     \retval  0: all fine
4512     \retval -1: read failed
4513     \retval -2: USB device unavailable
4514 */
4515 int ftdi_read_eeprom(struct ftdi_context *ftdi)
4516 {
4517     int i;
4518     unsigned char *buf;
4519
4520     if (ftdi == NULL || ftdi->usb_dev == NULL)
4521         ftdi_error_return(-2, "USB device unavailable");
4522     buf = ftdi->eeprom->buf;
4523
4524     for (i = 0; i < FTDI_MAX_EEPROM_SIZE/2; i++)
4525     {
4526         if (libusb_control_transfer(
4527                     ftdi->usb_dev, FTDI_DEVICE_IN_REQTYPE,SIO_READ_EEPROM_REQUEST, 0, i,
4528                     buf+(i*2), 2, ftdi->usb_read_timeout) != 2)
4529             ftdi_error_return(-1, "reading eeprom failed");
4530     }
4531
4532     if (ftdi->type == TYPE_R)
4533         ftdi->eeprom->size = 0x80;
4534     /*    Guesses size of eeprom by comparing halves
4535           - will not work with blank eeprom */
4536     else if (strrchr((const char *)buf, 0xff) == ((const char *)buf +FTDI_MAX_EEPROM_SIZE -1))
4537         ftdi->eeprom->size = -1;
4538     else if (memcmp(buf,&buf[0x80],0x80) == 0)
4539         ftdi->eeprom->size = 0x80;
4540     else if (memcmp(buf,&buf[0x40],0x40) == 0)
4541         ftdi->eeprom->size = 0x40;
4542     else
4543         ftdi->eeprom->size = 0x100;
4544     return 0;
4545 }
4546
4547 /*
4548     ftdi_read_chipid_shift does the bitshift operation needed for the FTDIChip-ID
4549     Function is only used internally
4550     \internal
4551 */
4552 static unsigned char ftdi_read_chipid_shift(unsigned char value)
4553 {
4554     return ((value & 1) << 1) |
4555            ((value & 2) << 5) |
4556            ((value & 4) >> 2) |
4557            ((value & 8) << 4) |
4558            ((value & 16) >> 1) |
4559            ((value & 32) >> 1) |
4560            ((value & 64) >> 4) |
4561            ((value & 128) >> 2);
4562 }
4563
4564 /**
4565     Read the FTDIChip-ID from R-type devices
4566
4567     \param ftdi pointer to ftdi_context
4568     \param chipid Pointer to store FTDIChip-ID
4569
4570     \retval  0: all fine
4571     \retval -1: read failed
4572     \retval -2: USB device unavailable
4573 */
4574 int ftdi_read_chipid(struct ftdi_context *ftdi, unsigned int *chipid)
4575 {
4576     unsigned int a = 0, b = 0;
4577
4578     if (ftdi == NULL || ftdi->usb_dev == NULL)
4579         ftdi_error_return(-2, "USB device unavailable");
4580
4581     if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_IN_REQTYPE, SIO_READ_EEPROM_REQUEST, 0, 0x43, (unsigned char *)&a, 2, ftdi->usb_read_timeout) == 2)
4582     {
4583         a = a << 8 | a >> 8;
4584         if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_IN_REQTYPE, SIO_READ_EEPROM_REQUEST, 0, 0x44, (unsigned char *)&b, 2, ftdi->usb_read_timeout) == 2)
4585         {
4586             b = b << 8 | b >> 8;
4587             a = (a << 16) | (b & 0xFFFF);
4588             a = ftdi_read_chipid_shift(a) | ftdi_read_chipid_shift(a>>8)<<8
4589                 | ftdi_read_chipid_shift(a>>16)<<16 | ftdi_read_chipid_shift(a>>24)<<24;
4590             *chipid = a ^ 0xa5f0f7d1;
4591             return 0;
4592         }
4593     }
4594
4595     ftdi_error_return(-1, "read of FTDIChip-ID failed");
4596 }
4597
4598 /**
4599     Write eeprom location
4600
4601     \param ftdi pointer to ftdi_context
4602     \param eeprom_addr Address of eeprom location to be written
4603     \param eeprom_val Value to be written
4604
4605     \retval  0: all fine
4606     \retval -1: write failed
4607     \retval -2: USB device unavailable
4608     \retval -3: Invalid access to checksum protected area below 0x80
4609     \retval -4: Device can't access unprotected area
4610     \retval -5: Reading chip type failed
4611 */
4612 int ftdi_write_eeprom_location(struct ftdi_context *ftdi, int eeprom_addr,
4613                                unsigned short eeprom_val)
4614 {
4615     int chip_type_location;
4616     unsigned short chip_type;
4617
4618     if (ftdi == NULL || ftdi->usb_dev == NULL)
4619         ftdi_error_return(-2, "USB device unavailable");
4620
4621     if (eeprom_addr <0x80)
4622         ftdi_error_return(-2, "Invalid access to checksum protected area  below 0x80");
4623
4624
4625     switch (ftdi->type)
4626     {
4627         case TYPE_BM:
4628         case  TYPE_2232C:
4629             chip_type_location = 0x14;
4630             break;
4631         case TYPE_2232H:
4632         case TYPE_4232H:
4633             chip_type_location = 0x18;
4634             break;
4635         case TYPE_232H:
4636             chip_type_location = 0x1e;
4637             break;
4638         default:
4639             ftdi_error_return(-4, "Device can't access unprotected area");
4640     }
4641
4642     if (ftdi_read_eeprom_location( ftdi, chip_type_location>>1, &chip_type))
4643         ftdi_error_return(-5, "Reading failed");
4644     fprintf(stderr," loc 0x%04x val 0x%04x\n", chip_type_location,chip_type);
4645     if ((chip_type & 0xff) != 0x66)
4646     {
4647         ftdi_error_return(-6, "EEPROM is not of 93x66");
4648     }
4649
4650     if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE,
4651                                 SIO_WRITE_EEPROM_REQUEST, eeprom_val, eeprom_addr,
4652                                 NULL, 0, ftdi->usb_write_timeout) != 0)
4653         ftdi_error_return(-1, "unable to write eeprom");
4654
4655     return 0;
4656 }
4657
4658 /**
4659     Write eeprom
4660
4661     \param ftdi pointer to ftdi_context
4662
4663     \retval  0: all fine
4664     \retval -1: read failed
4665     \retval -2: USB device unavailable
4666     \retval -3: EEPROM not initialized for the connected device;
4667 */
4668 int ftdi_write_eeprom(struct ftdi_context *ftdi)
4669 {
4670     unsigned short usb_val, status;
4671     int i, ret;
4672     unsigned char *eeprom;
4673
4674     if (ftdi == NULL || ftdi->usb_dev == NULL)
4675         ftdi_error_return(-2, "USB device unavailable");
4676
4677     if(ftdi->eeprom->initialized_for_connected_device == 0)
4678         ftdi_error_return(-3, "EEPROM not initialized for the connected device");
4679
4680     eeprom = ftdi->eeprom->buf;
4681
4682     /* These commands were traced while running MProg */
4683     if ((ret = ftdi_usb_reset(ftdi)) != 0)
4684         return ret;
4685     if ((ret = ftdi_poll_modem_status(ftdi, &status)) != 0)
4686         return ret;
4687     if ((ret = ftdi_set_latency_timer(ftdi, 0x77)) != 0)
4688         return ret;
4689
4690     for (i = 0; i < ftdi->eeprom->size/2; i++)
4691     {
4692         /* Do not try to write to reserved area */
4693         if ((ftdi->type == TYPE_230X) && (i == 0x40))
4694         {
4695             i = 0x50;
4696         }
4697         usb_val = eeprom[i*2];
4698         usb_val += eeprom[(i*2)+1] << 8;
4699         if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE,
4700                                     SIO_WRITE_EEPROM_REQUEST, usb_val, i,
4701                                     NULL, 0, ftdi->usb_write_timeout) < 0)
4702             ftdi_error_return(-1, "unable to write eeprom");
4703     }
4704
4705     return 0;
4706 }
4707
4708 /**
4709     Erase eeprom
4710
4711     This is not supported on FT232R/FT245R according to the MProg manual from FTDI.
4712
4713     \param ftdi pointer to ftdi_context
4714
4715     \retval  0: all fine
4716     \retval -1: erase failed
4717     \retval -2: USB device unavailable
4718     \retval -3: Writing magic failed
4719     \retval -4: Read EEPROM failed
4720     \retval -5: Unexpected EEPROM value
4721 */
4722 #define MAGIC 0x55aa
4723 int ftdi_erase_eeprom(struct ftdi_context *ftdi)
4724 {
4725     unsigned short eeprom_value;
4726     if (ftdi == NULL || ftdi->usb_dev == NULL)
4727         ftdi_error_return(-2, "USB device unavailable");
4728
4729     if ((ftdi->type == TYPE_R) || (ftdi->type == TYPE_230X))
4730     {
4731         ftdi->eeprom->chip = 0;
4732         return 0;
4733     }
4734
4735     if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE, SIO_ERASE_EEPROM_REQUEST,
4736                                 0, 0, NULL, 0, ftdi->usb_write_timeout) < 0)
4737         ftdi_error_return(-1, "unable to erase eeprom");
4738
4739
4740     /* detect chip type by writing 0x55AA as magic at word position 0xc0
4741        Chip is 93x46 if magic is read at word position 0x00, as wraparound happens around 0x40
4742        Chip is 93x56 if magic is read at word position 0x40, as wraparound happens around 0x80
4743        Chip is 93x66 if magic is only read at word position 0xc0*/
4744     if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE,
4745                                 SIO_WRITE_EEPROM_REQUEST, MAGIC, 0xc0,
4746                                 NULL, 0, ftdi->usb_write_timeout) != 0)
4747         ftdi_error_return(-3, "Writing magic failed");
4748     if (ftdi_read_eeprom_location( ftdi, 0x00, &eeprom_value))
4749         ftdi_error_return(-4, "Reading failed");
4750     if (eeprom_value == MAGIC)
4751     {
4752         ftdi->eeprom->chip = 0x46;
4753     }
4754     else
4755     {
4756         if (ftdi_read_eeprom_location( ftdi, 0x40, &eeprom_value))
4757             ftdi_error_return(-4, "Reading failed");
4758         if (eeprom_value == MAGIC)
4759             ftdi->eeprom->chip = 0x56;
4760         else
4761         {
4762             if (ftdi_read_eeprom_location( ftdi, 0xc0, &eeprom_value))
4763                 ftdi_error_return(-4, "Reading failed");
4764             if (eeprom_value == MAGIC)
4765                 ftdi->eeprom->chip = 0x66;
4766             else
4767             {
4768                 ftdi->eeprom->chip = -1;
4769             }
4770         }
4771     }
4772     if (libusb_control_transfer(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE, SIO_ERASE_EEPROM_REQUEST,
4773                                 0, 0, NULL, 0, ftdi->usb_write_timeout) < 0)
4774         ftdi_error_return(-1, "unable to erase eeprom");
4775     return 0;
4776 }
4777
4778 /**
4779     Get string representation for last error code
4780
4781     \param ftdi pointer to ftdi_context
4782
4783     \retval Pointer to error string
4784 */
4785 const char *ftdi_get_error_string (struct ftdi_context *ftdi)
4786 {
4787     if (ftdi == NULL)
4788         return "";
4789
4790     return ftdi->error_str;
4791 }
4792
4793 /* @} end of doxygen libftdi group */