struct ftdi_context ftdic;
int f,i;
unsigned char buf[1];
+ int retval = 0;
if (ftdi_init(&ftdic) < 0)
{
if (f < 0 && f != -5)
{
fprintf(stderr, "unable to open ftdi device: %d (%s)\n", f, ftdi_get_error_string(&ftdic));
- exit(-1);
+ retval = 1;
+ goto done;
}
printf("ftdi open succeeded: %d\n",f);
ftdi_disable_bitbang(&ftdic);
ftdi_usb_close(&ftdic);
+done:
ftdi_deinit(&ftdic);
- return 0;
+ return retval;
}
{
fprintf (stderr, "%s: %s\n",
str, ftdi_get_error_string (ftdi));
+ ftdi_deinit(ftdi);
exit (1);
}
if (ftdi_init(&ftdic) < 0)
{
fprintf(stderr, "ftdi_init failed\n");
+ ftdi_deinit(&ftdic);
return EXIT_FAILURE;
}
unsigned char buf[1];
unsigned char bitmask;
char input[10];
+ int retval = 0;
if (ftdi_init(&ftdic) < 0)
{
if (f < 0 && f != -5)
{
fprintf(stderr, "unable to open ftdi device: %d (%s)\n", f, ftdi_get_error_string(&ftdic));
+ ftdi_deinit(&ftdic);
exit(-1);
}
printf("ftdi open succeeded: %d\n",f);
if (f < 0)
{
fprintf(stderr, "set_bitmode failed for 0x%x, error %d (%s)\n", bitmask, f, ftdi_get_error_string(&ftdic));
- exit(-1);
+ ftdi_usb_close(&ftdic);
+ ftdi_deinit(&ftdic);
+ retval = -1;
}
// read CBUS
if (f < 0)
{
fprintf(stderr, "read_pins failed, error %d (%s)\n", f, ftdi_get_error_string(&ftdic));
+ ftdi_usb_close(&ftdic);
+ ftdi_deinit(&ftdic);
exit(-1);
}
printf("Read returned 0x%01x\n", buf[0] & 0x0f);
if (f < 0 && f != -5)
{
fprintf(stderr, "unable to open ftdi device: %d (%s)\n", f, ftdi_get_error_string(&ftdic));
+ ftdi_deinit(&ftdic);
exit(-1);
}
printf("ftdi open succeeded(channel 1): %d\n",f);
if (f < 0 && f != -5)
{
fprintf(stderr, "unable to open ftdi device: %d (%s)\n", f, ftdi_get_error_string(&ftdic2));
+ ftdi_deinit(&ftdic2);
exit(-1);
}
printf("ftdi open succeeded(channel 2): %d\n",f);
struct ftdi_context ftdic;
struct ftdi_device_list *devlist, *curdev;
char manufacturer[128], description[128];
+ int retval = EXIT_SUCCESS;
if (ftdi_init(&ftdic) < 0)
{
if ((ret = ftdi_usb_find_all(&ftdic, &devlist, 0x0403, 0x6001)) < 0)
{
fprintf(stderr, "ftdi_usb_find_all failed: %d (%s)\n", ret, ftdi_get_error_string(&ftdic));
- return EXIT_FAILURE;
+ retval = EXIT_FAILURE;
+ return retval;
+ goto do_deinit;
}
printf("Number of FTDI devices found: %d\n", ret);
if ((ret = ftdi_usb_get_strings(&ftdic, curdev->dev, manufacturer, 128, description, 128, NULL, 0)) < 0)
{
fprintf(stderr, "ftdi_usb_get_strings failed: %d (%s)\n", ret, ftdi_get_error_string(&ftdic));
- return EXIT_FAILURE;
+ retval = EXIT_FAILURE;
+ return retval;
+ goto done;
}
printf("Manufacturer: %s, Description: %s\n\n", manufacturer, description);
curdev = curdev->next;
}
-
+done:
ftdi_list_free(&devlist);
+do_deinit:
ftdi_deinit(&ftdic);
return EXIT_SUCCESS;
if ((ret = ftdi_usb_open(&ftdic, 0x0403, 0x6001)) < 0)
{
fprintf(stderr, "unable to open ftdi device: %d (%s)\n", ret, ftdi_get_error_string(&ftdic));
+ ftdi_deinit(&ftdic);
return EXIT_FAILURE;
}
if ((ret = ftdi_usb_close(&ftdic)) < 0)
{
fprintf(stderr, "unable to close ftdi device: %d (%s)\n", ret, ftdi_get_error_string(&ftdic));
+ ftdi_deinit(&ftdic);
return EXIT_FAILURE;
}