X-Git-Url: http://developer.intra2net.com/git/?p=libftdi;a=blobdiff_plain;f=src%2Fftdi.c;h=33ed14820a6305cf5f08c8c50ecd2bb610ea6a85;hp=f5e14063de2a09aa27ae4c6fb082c78900545dea;hb=6855afda867f75e0265d815c411a180a0abc139b;hpb=a02587d5f941d4e7fe8397e3615325251162dedd diff --git a/src/ftdi.c b/src/ftdi.c index f5e1406..33ed148 100644 --- a/src/ftdi.c +++ b/src/ftdi.c @@ -2190,7 +2190,8 @@ void ftdi_eeprom_initdefaults(struct ftdi_context *ftdi) eeprom->vendor_id = 0x0403; eeprom->use_serial = USE_SERIAL_NUM; - if((ftdi->type= TYPE_AM) || (ftdi->type= TYPE_BM) ||(ftdi->type= TYPE_R)) + if((ftdi->type == TYPE_AM) || (ftdi->type == TYPE_BM) || + (ftdi->type == TYPE_R)) eeprom->product_id = 0x6001; else eeprom->product_id = 0x6010; @@ -2293,18 +2294,28 @@ int ftdi_eeprom_build(struct ftdi_context *ftdi, unsigned char *output) if (eeprom->high_current_a) return -5; } - size_check = eeprom->size; - size_check -= 28; // 28 are always in use (fixed) + size_check = 0x80; + switch(ftdi->type) + { + case TYPE_2232H: + case TYPE_4232H: + size_check -= 4; + case TYPE_R: + size_check -= 4; + case TYPE_2232C: + size_check -= 4; + case TYPE_AM: + case TYPE_BM: + size_check -= 0x14*2; + } - // Top half of a 256byte eeprom is used just for strings and checksum - // it seems that the FTDI chip will not read these strings from the lower half - // Each string starts with two bytes; offset and type (0x03 for string) - // the checksum needs two bytes, so without the string data that 8 bytes from the top half - if (eeprom->size>=256) size_check = 120; size_check -= manufacturer_size*2; size_check -= product_size*2; size_check -= serial_size*2; + /* Space for the string type and pointer bytes */ + size_check -= -6; + // eeprom size exceeded? if (size_check < 0) return (-1); @@ -2708,7 +2719,7 @@ int ftdi_eeprom_decode(struct ftdi_context *ftdi, unsigned char *buf, int size, channel_mode[eeprom->channel_a_type], (eeprom->channel_a_driver)?" VCP":"", (eeprom->high_current_a)?" High Currenr IO":""); - if (ftdi->type == TYPE_2232C) + if (ftdi->type >= TYPE_2232C) fprintf(stdout,"Channel B has Mode %s%s%s\n", channel_mode[eeprom->channel_b_type], (eeprom->channel_b_driver)?" VCP":"",