diff --git a/src/ftdi.c b/src/ftdi.c index 8b589eb..288ffc0 100644 --- a/src/ftdi.c +++ b/src/ftdi.c @@ -2130,6 +2130,24 @@ int ftdi_eeprom_decode(struct ftdi_eeprom *eeprom, unsigned char *buf, int size) } /** + Read eeprom location + + \param ftdi pointer to ftdi_context + \param address of eeprom location to be read + \param eeprom Pointer to store read eeprom location + + \retval 0: all fine + \retval -1: read failed +*/ +int ftdi_read_eeprom_location (struct ftdi_context *ftdi, int eeprom_addr, unsigned short *eeprom_val) +{ + if (usb_control_msg(ftdi->usb_dev, FTDI_DEVICE_IN_REQTYPE, SIO_READ_EEPROM_REQUEST, 0, eeprom_addr, (char *)eeprom_val, 2, ftdi->usb_read_timeout) != 2) + ftdi_error_return(-1, "reading eeprom failed"); + + return 0; +} + +/** Read eeprom \param ftdi pointer to ftdi_context @@ -2231,6 +2249,25 @@ int ftdi_read_eeprom_getsize(struct ftdi_context *ftdi, unsigned char *eeprom, i } /** + Write eeprom location + + \param ftdi pointer to ftdi_context + \param address of eeprom location to be written + \param value to be written + + \retval 0: all fine + \retval -1: read failed +*/ +int ftdi_write_eeprom_location(struct ftdi_context *ftdi, int eeprom_addr, unsigned short eeprom_val) +{ + if (usb_control_msg(ftdi->usb_dev, FTDI_DEVICE_OUT_REQTYPE, + SIO_WRITE_EEPROM_REQUEST, eeprom_val, eeprom_addr, + NULL, 0, ftdi->usb_write_timeout) != 0) + ftdi_error_return(-1, "unable to write eeprom"); + return 0; +} + +/** Write eeprom \param ftdi pointer to ftdi_context diff --git a/src/ftdi.h b/src/ftdi.h index f629821..2f60595 100644 --- a/src/ftdi.h +++ b/src/ftdi.h @@ -347,6 +347,9 @@ extern "C" int ftdi_write_eeprom(struct ftdi_context *ftdi, unsigned char *eeprom); int ftdi_erase_eeprom(struct ftdi_context *ftdi); + int ftdi_read_eeprom_location (struct ftdi_context *ftdi, int eeprom_addr, unsigned short *eeprom_val); + int ftdi_write_eeprom_location(struct ftdi_context *ftdi, int eeprom_addr, unsigned short eeprom_val); + char *ftdi_get_error_string(struct ftdi_context *ftdi); #ifdef __cplusplus