eeprom->serial = NULL;
if(ftdi->type == TYPE_R)
+ {
+ eeprom->max_power = 45;
eeprom->size = 0x80;
+ eeprom->cbus_function[0] = CBUS_TXLED;
+ eeprom->cbus_function[1] = CBUS_RXLED;
+ eeprom->cbus_function[2] = CBUS_TXDEN;
+ eeprom->cbus_function[3] = CBUS_PWREN;
+ eeprom->cbus_function[4] = CBUS_SLEEP;
+ }
else
eeprom->size = -1;
}
output[0x0D] = (eeprom->usb_version>>8) & 0xff;
if(eeprom->cbus_function[0] > CBUS_BB)
- output[0x14] = CBUS_BB;
+ output[0x14] = CBUS_TXLED;
else
output[0x14] = eeprom->cbus_function[0];
if(eeprom->cbus_function[1] > CBUS_BB)
- output[0x14] |= CBUS_BB<<4;
+ output[0x14] |= CBUS_RXLED<<4;
else
- output[0x14] |= eeprom->cbus_function[1];
+ output[0x14] |= eeprom->cbus_function[1]<<4;
if(eeprom->cbus_function[2] > CBUS_BB)
- output[0x15] |= CBUS_BB<<4;
+ output[0x15] = CBUS_TXDEN;
else
- output[0x15] |= eeprom->cbus_function[2];
+ output[0x15] = eeprom->cbus_function[2];
if(eeprom->cbus_function[3] > CBUS_BB)
- output[0x15] |= CBUS_BB<<4;
+ output[0x15] |= CBUS_PWREN<<4;
else
- output[0x15] |= eeprom->cbus_function[3];
+ output[0x15] |= eeprom->cbus_function[3]<<4;
- if(eeprom->cbus_function[5] > CBUS_BB)
- output[0x16] = CBUS_BB;
+ if(eeprom->cbus_function[4] > CBUS_CLK6)
+ output[0x16] = CBUS_SLEEP;
else
- output[0x16] = eeprom->cbus_function[0];
+ output[0x16] = eeprom->cbus_function[4];
break;
case TYPE_2232H:
output[0x00] = (eeprom->channel_a_type);
break;
}
+ // calculate checksum
checksum = 0xAAAA;
for (i = 0; i < eeprom->size/2-1; i++)
unsigned char manufacturer_size = 0, product_size = 0, serial_size = 0;
int eeprom_size;
struct ftdi_eeprom *eeprom;
+ int release;
if (ftdi == NULL)
ftdi_error_return(-1,"No context");
// Addr 04: Product ID
eeprom->product_id = buf[0x04] + (buf[0x05] << 8);
- eeprom->release = buf[0x06] + (buf[0x07]<<8);
+ release = buf[0x06] + (buf[0x07]<<8);
// Addr 08: Config descriptor
// Bit 7: always 1
char *channel_mode[] = {"UART","245","CPU", "unknown", "OPTO"};
fprintf(stdout, "VID: 0x%04x\n",eeprom->vendor_id);
fprintf(stdout, "PID: 0x%04x\n",eeprom->product_id);
- fprintf(stdout, "Release: 0x%04x\n",eeprom->release);
+ fprintf(stdout, "Release: 0x%04x\n",release);
if(eeprom->self_powered)
fprintf(stdout, "Self-Powered%s", (eeprom->remote_wakeup)?", USB Remote Wake Up\n":"\n");
(eeprom->group3_schmitt)?" Schmitt Input":"",
(eeprom->group3_slew)?" Slow Slew":"");
}
-
+ if (ftdi->type == TYPE_R)
+ {
+ char *cbus_mux[] = {"TXDEN","PWREN","RXLED", "TXLED","TX+RXLED",
+ "SLEEP","CLK48","CLK24","CLK12","CLK6",
+ "IOMODE","BB_WR","BB_RD"};
+ char *cbus_BB[] = {"RXF","TXE","RD", "WR"};
+ int i;
+
+ if(eeprom->invert)
+ {
+ char *r_bits[] = {"TXD","RXD","RTS", "CTS","DTR","DSR","DCD","RI"};
+ fprintf(stdout,"Inverted bits:");
+ for (i=0; i<8; i++)
+ if((eeprom->invert & (1<<i)) == (1<<i))
+ fprintf(stdout," %s",r_bits[i]);
+ fprintf(stdout,"\n");
+ }
+ for(i=0; i<5; i++)
+ {
+ if(eeprom->cbus_function[i]<CBUS_BB)
+ fprintf(stdout,"C%d Function: %s\n", i,
+ cbus_mux[eeprom->cbus_function[i]]);
+ else
+ fprintf(stdout,"C%d BB Function: %s\n", i,
+ cbus_BB[i]);
+ }
+ }
}
-
return 0;
}