X-Git-Url: http://developer.intra2net.com/git/?p=libftdi;a=blobdiff_plain;f=src%2Fftdi.c;h=0a7fb274dd927d45615bbd26c11e950155164e46;hp=5ec3e2c2c9f9a0e1e0e4081b48b34ad14fe58210;hb=0684c1b1be9ccb893829c20a8505c91e101bbf43;hpb=9d638dab09426be6349d41a269281921febcfa34 diff --git a/src/ftdi.c b/src/ftdi.c index 5ec3e2c..0a7fb27 100644 --- a/src/ftdi.c +++ b/src/ftdi.c @@ -2606,7 +2606,7 @@ int ftdi_eeprom_initdefaults(struct ftdi_context *ftdi, const char * manufacture ftdi_error_return(-3, "No connected device or device not yet opened"); eeprom->vendor_id = 0x0403; - eeprom->use_serial = 1; + eeprom->use_serial = (serial != NULL); if ((ftdi->type == TYPE_AM) || (ftdi->type == TYPE_BM) || (ftdi->type == TYPE_R)) eeprom->product_id = 0x6001; @@ -3101,19 +3101,23 @@ int ftdi_eeprom_build(struct ftdi_context *ftdi) } output[0x11] = product_size*2 + 2; - // Addr 12: Offset of the serial string + 0x80, calculated later - // Addr 13: Length of serial string - output[0x12] = i | 0x80; // calculate offset - output[i & eeprom_size_mask] = serial_size*2 + 2, i++; - output[i & eeprom_size_mask] = 0x03, i++; - for (j = 0; j < serial_size; j++) - { - output[i & eeprom_size_mask] = eeprom->serial[j], i++; - output[i & eeprom_size_mask] = 0x00, i++; + if (eeprom->use_serial) { + // Addr 12: Offset of the serial string + 0x80, calculated later + // Addr 13: Length of serial string + output[0x12] = i | 0x80; // calculate offset + output[i & eeprom_size_mask] = serial_size*2 + 2, i++; + output[i & eeprom_size_mask] = 0x03, i++; + for (j = 0; j < serial_size; j++) + { + output[i & eeprom_size_mask] = eeprom->serial[j], i++; + output[i & eeprom_size_mask] = 0x00, i++; + } + output[0x13] = serial_size*2 + 2; } // Legacy port name and PnP fields for FT2232 and newer chips - if (ftdi->type > TYPE_BM) + // It doesn't appear when written with FT_Prog for FT4232H chip. + if (ftdi->type > TYPE_BM && ftdi->type != TYPE_4232H) { output[i & eeprom_size_mask] = 0x02; /* as seen when written with FTD2XX */ i++; @@ -3123,8 +3127,6 @@ int ftdi_eeprom_build(struct ftdi_context *ftdi) i++; } - output[0x13] = serial_size*2 + 2; - if (ftdi->type > TYPE_AM) /* use_serial not used in AM devices */ { if (eeprom->use_serial)