From: Yegor Yefremov <yegorslists@xxxxxxxxxxxxxx>
User area begins after the serial number string. Hence, use free_end
to specify the end of the necessary data like producer, serial number
strings as also PNP bits.
---
src/ftdi.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/src/ftdi.c b/src/ftdi.c
index eca122c..ebe02d6 100644
--- a/src/ftdi.c
+++ b/src/ftdi.c
@@ -3074,7 +3074,6 @@ int ftdi_eeprom_build(struct ftdi_context *ftdi)
}
/* Wrap around 0x80 for 128 byte EEPROMS (Internale and 93x46) */
eeprom_size_mask = eeprom->size -1;
- free_end = i & eeprom_size_mask;
// Addr 0E: Offset of the manufacturer string + 0x80, calculated later
// Addr 0F: Length of manufacturer string
@@ -3474,15 +3473,19 @@ int ftdi_eeprom_build(struct ftdi_context *ftdi)
free_start += 0x14;
}
+ free_end = i & eeprom_size_mask;
+
/* Arbitrary user data */
if (eeprom->user_data_size > 0)
{
+ if (!eeprom->user_data_addr)
+ eeprom->user_data_addr = free_end;
if (eeprom->user_data_addr < free_start)
fprintf(stderr,"Warning, user data starts inside the generated
data!\n");
- if (eeprom->user_data_addr + eeprom->user_data_size >= free_end)
+ if (eeprom->user_data_addr < free_end)
fprintf(stderr,"Warning, user data overlaps the strings area!\n");
- if (eeprom->user_data_addr + eeprom->user_data_size > eeprom->size)
- ftdi_error_return(-1,"eeprom size exceeded");
+ if (eeprom->user_data_addr + eeprom->user_data_size > eeprom->size - 2)
+ ftdi_error_return(-1, "eeprom size exceeded");
memcpy(output + eeprom->user_data_addr, eeprom->user_data,
eeprom->user_data_size);
}
--
2.34.1
--
libftdi - see http://www.intra2net.com/en/developer/libftdi for details.
To unsubscribe send a mail to libftdi+unsubscribe@xxxxxxxxxxxxxxxxxxxxxxx
|