diff options
author | Uros Majstorovic <majstor@majstor.org> | 2022-09-23 20:20:38 +0200 |
---|---|---|
committer | Uros Majstorovic <majstor@majstor.org> | 2022-09-23 20:20:38 +0200 |
commit | f30abc1f75f483ffe78d92d5109b6c1d700925a3 (patch) | |
tree | ede5f6a35200f5bfe95d4fdea5cb41ac66e6a0fc /util/prog.c | |
parent | 522a419a4139db2023e97e1a9ff2774011f069c9 (diff) |
added x230x programming and switching utility; fe310 flash utility;
Diffstat (limited to 'util/prog.c')
-rw-r--r-- | util/prog.c | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/util/prog.c b/util/prog.c new file mode 100644 index 0000000..0227682 --- /dev/null +++ b/util/prog.c @@ -0,0 +1,79 @@ +#include <stdlib.h> +#include <string.h> +#include <stdio.h> +#include <ftdi.h> + +#define FTDI_MAX_EEPROM_SIZE 256 + +int main(int argc, char *argv[]) { + int ret; + int val; + struct ftdi_context *ftdi; + struct ftdi_version_info version; + unsigned char buf[FTDI_MAX_EEPROM_SIZE]; + + if ((ftdi = ftdi_new()) == 0) { + fprintf(stderr, "ftdi_new failed\n"); + return EXIT_FAILURE; + } + + version = ftdi_get_library_version(); + printf("Initialized libftdi %s (major: %d, minor: %d, micro: %d, snapshot ver: %s)\n", + version.version_str, version.major, version.minor, version.micro, + version.snapshot_str); + + if ((ret = ftdi_usb_open(ftdi, 0x0403, 0x6015)) < 0) { + fprintf(stderr, "Unable to open ftdi device: %d (%s)\n", ret, ftdi_get_error_string(ftdi)); + ftdi_free(ftdi); + return EXIT_FAILURE; + } + + ret = ftdi_read_eeprom(ftdi); + if (ret < 0) goto ftdi_fin; + + ret = ftdi_eeprom_decode(ftdi, 1); + if (ret < 0) goto ftdi_fin; + + ftdi_get_eeprom_value(ftdi, SELF_POWERED, &val); + printf("POWER: %x\n", val); + ftdi_get_eeprom_value(ftdi, CBUS_FUNCTION_0, &val); + printf("CBUS0: %d\n", val); + ftdi_get_eeprom_value(ftdi, CBUS_FUNCTION_1, &val); + printf("CBUS1: %d\n", val); + ftdi_get_eeprom_value(ftdi, CBUS_FUNCTION_2, &val); + printf("CBUS2: %d\n", val); + ftdi_get_eeprom_value(ftdi, CBUS_FUNCTION_3, &val); + printf("CBUS3: %d\n", val); + + ftdi_set_eeprom_value(ftdi, SELF_POWERED, 1); + ftdi_set_eeprom_value(ftdi, CBUS_FUNCTION_0, CBUSX_PWREN); + ftdi_set_eeprom_value(ftdi, CBUS_FUNCTION_1, CBUSX_IOMODE); + /* next rev hw + ftdi_set_eeprom_value(ftdi, CBUS_FUNCTION_3, CBUSX_VBUS_SENSE); + */ + ftdi_set_eeprom_value(ftdi, CBUS_FUNCTION_2, CBUSX_TRISTATE); + ftdi_set_eeprom_value(ftdi, CBUS_FUNCTION_3, CBUSX_TRISTATE); + + ret = ftdi_eeprom_build(ftdi); + if (ret < 0) goto ftdi_fin; + + ret = ftdi_get_eeprom_buf(ftdi, buf, FTDI_MAX_EEPROM_SIZE); + if (ret < 0) goto ftdi_fin; + + printf("MISC: %x\n", *buf); + + if ((argc > 1) && (strcmp(argv[1], "do") == 0)) { + ret = ftdi_write_eeprom(ftdi); + if (ret < 0) goto ftdi_fin; + } + + ret = ftdi_usb_close(ftdi); + +ftdi_fin: + if (ret < 0) { + fprintf(stderr, "ERR: %d (%s)\n", ret, ftdi_get_error_string(ftdi)); + } + ftdi_free(ftdi); + + return ret < 0 ? EXIT_FAILURE : EXIT_SUCCESS; +} |