From 308f1fa790ebee51f6a4d2f5dd4ed3611745489b Mon Sep 17 00:00:00 2001 From: Uwe Bonnes Date: Thu, 9 Sep 2010 22:41:51 +0200 Subject: [PATCH] EEPROM: Evaluate the channel specific settings --- src/ftdi.c | 12 ++++++++++-- src/ftdi.h | 17 +++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/ftdi.c b/src/ftdi.c index 8293cc3..76045f2 100644 --- a/src/ftdi.c +++ b/src/ftdi.c @@ -2506,9 +2506,17 @@ int ftdi_eeprom_decode(struct ftdi_context *ftdi, unsigned char *buf, int size, eeprom_size = 0x80; eeprom = ftdi->eeprom; - eeprom->high_current_a = buf[0x00] & HIGH_CURRENT_DRIVE; - eeprom->high_current_b = buf[0x01] & HIGH_CURRENT_DRIVE; + // Addr 00: Channel A setting + eeprom->channel_a_type = buf[0x00] & CHANNEL_IS_OPTO; + eeprom->channel_a_driver = buf[0x00] & DRIVER_VCP; + eeprom->high_current_a = buf[0x00] & HIGH_CURRENT_DRIVE; + + // Addr 01: Channel B setting + + eeprom->channel_b_type = buf[0x01] & CHANNEL_IS_OPTO; + eeprom->channel_b_driver = buf[0x01] & DRIVER_VCP; + eeprom->high_current_b = buf[0x01] & HIGH_CURRENT_DRIVE; // Addr 02: Vendor ID eeprom->vendor_id = buf[0x02] + (buf[0x03] << 8); diff --git a/src/ftdi.h b/src/ftdi.h index 03bb167..e7de304 100644 --- a/src/ftdi.h +++ b/src/ftdi.h @@ -208,6 +208,14 @@ struct ftdi_eeprom /** serial number */ char *serial; + /* 2232D/H(/FT4432H?) specific */ + /* Hardware type, 0 = RS232 Uart, 1 = 245 FIFO, 2 = CPU FIFO, + 3 = OPTO Isolate */ + int channel_a_type; + int channel_b_type; + /* Driver Type, 1 = VCP */ + int channel_a_driver; + int channel_b_driver; /* Special function of FT232R devices (and possibly others as well) */ /** CBUS pin function. See CBUS_xxx defines. */ int cbus_function[5]; @@ -338,6 +346,15 @@ struct ftdi_device_list /** Invert RI# */ #define INVERT_RI 0x80 +/** Interface Mode. */ +#define CHANNEL_IS_UART 0x0 +#define CHANNEL_IS_245 0x1 +#define CHANNEL_IS_CPU 0x2 +#define CHANNEL_IS_OPTO 0x3 + +/** Driver Type. */ +#define DRIVER_VCP 0x04 + /** High current drive. */ #define HIGH_CURRENT_DRIVE 0x10 -- 1.7.1