From c1c70e13de72372627267e45ba79fa731cf6f6f7 Mon Sep 17 00:00:00 2001 From: Oleg Seiljus Date: Tue, 3 Nov 2009 17:05:01 +0100 Subject: [PATCH] Functions for read/write of a single eeprom location --- src/ftdi.c | 38 ++++++++++++++++++++++++++++++++++++++ src/ftdi.h | 5 ++++- 2 files changed, 42 insertions(+), 1 deletions(-) diff --git a/src/ftdi.c b/src/ftdi.c index 8b589eb..5051059 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 eeprom_addr Address of eeprom location to be read + \param eeprom_val 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,26 @@ int ftdi_read_eeprom_getsize(struct ftdi_context *ftdi, unsigned char *eeprom, i } /** + Write eeprom location + + \param ftdi pointer to ftdi_context + \param eeprom_addr Address of eeprom location to be written + \param eeprom_val 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..74a397b 100644 --- a/src/ftdi.h +++ b/src/ftdi.h @@ -347,8 +347,11 @@ 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 } #endif -- 1.7.1