if ((ftdi==NULL) || (dev==NULL))
return -1;
- if (libusb_open(dev, &ftdi->usb_dev) < 0)
- ftdi_error_return(-4, "libusb_open() failed");
+ if (ftdi->usb_dev == NULL && libusb_open(dev, &ftdi->usb_dev) < 0)
+ ftdi_error_return(-4, "libusb_open() failed");
if (libusb_get_device_descriptor(dev, &desc) < 0)
ftdi_error_return(-11, "libusb_get_device_descriptor() failed");
static const char am_adjust_up[8] = {0, 0, 0, 1, 0, 3, 2, 1};
static const char am_adjust_dn[8] = {0, 0, 0, 1, 0, 1, 2, 3};
int divisor, best_divisor, best_baud, best_baud_diff;
- divisor = 24000000 / baudrate;
int i;
+ divisor = 24000000 / baudrate;
// Round down to supported fraction (AM only)
divisor -= am_adjust_dn[divisor & 7];
return offset;
}
-static void ftdi_read_data_cb(struct libusb_transfer *transfer)
+static void LIBUSB_CALL ftdi_read_data_cb(struct libusb_transfer *transfer)
{
struct ftdi_transfer_control *tc = (struct ftdi_transfer_control *) transfer->user_data;
struct ftdi_context *ftdi = tc->ftdi;
}
-static void ftdi_write_data_cb(struct libusb_transfer *transfer)
+static void LIBUSB_CALL ftdi_write_data_cb(struct libusb_transfer *transfer)
{
struct ftdi_transfer_control *tc = (struct ftdi_transfer_control *) transfer->user_data;
struct ftdi_context *ftdi = tc->ftdi;
case TYPE_230X:
output[0x00] = 0x80; /* Actually, leave the default value */
output[0x0a] = 0x08; /* Enable USB Serial Number */
- output[0x0c] = (0x01) | (0x3 << 4); /* DBUS drive 4mA, CBUS drive 16mA */
+ /*FIXME: Make DBUS & CBUS Control configurable*/
+ output[0x0c] = 0; /* DBUS drive 4mA, CBUS drive 4 mA like factory default */
for (j = 0; j <= 6; j++)
{
output[0x1a + j] = eeprom->cbus_function[j];
/**
Decode binary EEPROM image into an ftdi_eeprom structure.
+ For FT-X devices use AN_201 FT-X MTP memory Configuration to decode.
+
\param ftdi pointer to ftdi_context
\param verbose Decode EEPROM on stdout
channel_mode[eeprom->channel_a_type],
(eeprom->channel_a_driver)?" VCP":"",
(eeprom->high_current_a)?" High Current IO":"");
- if (ftdi->type >= TYPE_232H)
+ if (ftdi->type == TYPE_232H)
{
fprintf(stdout,"FT1284 Mode Clock is idle %s, %s first, %sFlow Control\n",
(eeprom->clock_polarity)?"HIGH":"LOW",
(eeprom->data_order)?"LSB":"MSB",
(eeprom->flow_control)?"":"No ");
}
- if ((ftdi->type >= TYPE_2232C) && (ftdi->type != TYPE_R) && (ftdi->type != TYPE_232H))
+ if ((ftdi->type == TYPE_2232H) || (ftdi->type == TYPE_4232H))
fprintf(stdout,"Channel B has Mode %s%s%s\n",
channel_mode[eeprom->channel_b_type],
(eeprom->channel_b_driver)?" VCP":"",
"I2C_TXE#", "I2C_RXF#", "VBUS_SENSE", "BB_WR#",
"BBRD#", "TIME_STAMP", "AWAKE#",
};
- fprintf(stdout,"IOBUS has %d mA drive%s%s\n",
+ fprintf(stdout,"DBUS has %d mA drive%s%s\n",
(eeprom->group0_drive+1) *4,
(eeprom->group0_schmitt)?" Schmitt Input":"",
(eeprom->group0_slew)?" Slow Slew":"");