From f30abc1f75f483ffe78d92d5109b6c1d700925a3 Mon Sep 17 00:00:00 2001 From: Uros Majstorovic Date: Fri, 23 Sep 2022 20:20:38 +0200 Subject: added x230x programming and switching utility; fe310 flash utility; --- util/switch.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 util/switch.c (limited to 'util/switch.c') diff --git a/util/switch.c b/util/switch.c new file mode 100644 index 0000000..2fc0eb6 --- /dev/null +++ b/util/switch.c @@ -0,0 +1,65 @@ +#include +#include +#include +#include + +#define DEV_FE310 1 +#define DEV_ESP32 2 + +void usage(char *p) { + fprintf(stderr, "Usage: %s fe310|esp32\n", p); + exit(1); +} + +int main(int argc, char *argv[]) { + int dev; + int ret; + struct ftdi_context *ftdi; + + if (argc != 2) { + usage(argv[0]); + } + if (strcmp(argv[1], "fe310") == 0) { + dev = DEV_FE310; + } else if (strcmp(argv[1], "esp32") == 0) { + dev = DEV_ESP32; + } else { + usage(argv[0]); + } + + if ((ftdi = ftdi_new()) == 0) { + fprintf(stderr, "ftdi_new failed\n"); + return EXIT_FAILURE; + } + + 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; + } + + switch (dev) { + case DEV_FE310: { + printf("Switch to fe310\n"); + ret = ftdi_set_bitmode(ftdi, 0x20, BITMODE_CBUS); + break; + } + + case DEV_ESP32: { + printf("Switch to esp32\n"); + ret = ftdi_set_bitmode(ftdi, 0x00, BITMODE_CBUS); + break; + } + } + 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; +} -- cgit v1.2.3