usage(const char *argv0)
{
fprintf(stderr,
- "Usage: %s [tions...] \n"
+ "Usage: %s [options...] \n"
"Test streaming read from FT2232H\n"
- "[-P string] only look for product with given string"
- "[-n] don't check for special block structure"
+ "[-P string] only look for product with given string\n"
+ "[-n] don't check for special block structure\n"
"\n"
"If some filename is given, write data read to that file\n"
"Progess information is printed each second\n"
"\n"
"Options:\n"
"\n"
- "Copyright (C) 2009 Micah Dowty <micah@navi.cx>\n",
+ "Copyright (C) 2009 Micah Dowty <micah@navi.cx>\n"
"Adapted for use with libftdi (C) 2010 Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>\n",
argv0);
exit(1);
static uint32_t start = 0;
static uint32_t offset = 0;
-static uint32_t blocks = 0;
+static uint64_t blocks = 0;
static uint32_t skips = 0;
static uint32_t n_err = 0;
static int
if (start && (num != start +0x4000))
{
uint32_t delta = ((num-start)/0x4000)-1;
- fprintf(stderr, "Skip %7d blocks from 0x%08x to 0x%08x at blocks %10d \n",
- delta, start -0x4000, num, blocks);
+ fprintf(stderr, "Skip %7d blocks from 0x%08x to 0x%08x at blocks %10llu\n",
+ delta, start -0x4000, num, (unsigned long long)blocks);
n_err++;
skips += delta;
}
if (start && (num != start +0x4000))
{
uint32_t delta = ((num-start)/0x4000)-1;
- fprintf(stderr, "Skip %7d blocks from 0x%08x to 0x%08x at blocks %10d \n",
- delta, start -0x4000, num, blocks);
+ fprintf(stderr, "Skip %7d blocks from 0x%08x to 0x%08x at blocks %10llu\n",
+ delta, start -0x4000, num, (unsigned long long) blocks);
n_err++;
skips += delta;
}
}
else if (rem)
start += 0x4000;
- if (rem != 0);
+ if (rem != 0)
{
blocks ++;
offset = 16-rem;
}
if (progress)
{
- fprintf(stderr, "%10.02fs total time %9.3f MiB captured %7.1f kB/s curr rate %7.1f kB/s totalrate \n",
+ fprintf(stderr, "%10.02fs total time %9.3f MiB captured %7.1f kB/s curr rate %7.1f kB/s totalrate %d dropouts\n",
progress->totalTime,
progress->current.totalBytes / (1024.0 * 1024.0),
progress->currentRate / 1024.0,
- progress->totalRate / 1024.0);
+ progress->totalRate / 1024.0,
+ n_err);
}
return exitRequested ? 1 : 0;
}
int main(int argc, char **argv)
{
- struct ftdi_context ftdic;
+ struct ftdi_context *ftdi;
int err, c;
FILE *of = NULL;
char const *outfile = 0;
usage(argv[0]);
}
- if (ftdi_init(&ftdic) < 0)
+ if ((ftdi = ftdi_new()) == 0)
{
- fprintf(stderr, "ftdi_init failed\n");
+ fprintf(stderr, "ftdi_new failed\n");
return EXIT_FAILURE;
}
- if (ftdi_set_interface(&ftdic, INTERFACE_A) < 0)
+ if (ftdi_set_interface(ftdi, INTERFACE_A) < 0)
{
fprintf(stderr, "ftdi_set_interface failed\n");
+ ftdi_free(ftdi);
return EXIT_FAILURE;
}
- if (ftdi_usb_open_desc(&ftdic, 0x0403, 0x6010, descstring, NULL) < 0)
+ if (ftdi_usb_open_desc(ftdi, 0x0403, 0x6010, descstring, NULL) < 0)
{
- fprintf(stderr,"Can't open ftdi device: %s\n",ftdi_get_error_string(&ftdic));
+ fprintf(stderr,"Can't open ftdi device: %s\n",ftdi_get_error_string(ftdi));
+ ftdi_free(ftdi);
return EXIT_FAILURE;
}
/* A timeout value of 1 results in may skipped blocks */
- if(ftdi_set_latency_timer(&ftdic, 2))
+ if(ftdi_set_latency_timer(ftdi, 2))
{
- fprintf(stderr,"Can't set latency\n",ftdi_get_error_string(&ftdic));
+ fprintf(stderr,"Can't set latency, Error %s\n",ftdi_get_error_string(ftdi));
+ ftdi_usb_close(ftdi);
+ ftdi_free(ftdi);
return EXIT_FAILURE;
}
-/* if(ftdi_usb_purge_rx_buffer(&ftdic) < 0)
+/* if(ftdi_usb_purge_rx_buffer(ftdi) < 0)
{
- fprintf(stderr,"Can't rx purge\n",ftdi_get_error_string(&ftdic));
+ fprintf(stderr,"Can't rx purge\n",ftdi_get_error_string(ftdi));
return EXIT_FAILURE;
}*/
if (outfile)
outputFile = of;
signal(SIGINT, sigintHandler);
- err = ftdi_readstream(&ftdic, readCallback, NULL, 8, 256);
+ err = ftdi_readstream(ftdi, readCallback, NULL, 8, 256);
if (err < 0 && !exitRequested)
exit(1);
}
fprintf(stderr, "Capture ended.\n");
- if (ftdi_set_bitmode(&ftdic, 0xff, BITMODE_RESET) < 0)
+ if (ftdi_set_bitmode(ftdi, 0xff, BITMODE_RESET) < 0)
{
- fprintf(stderr,"Can't set synchronous fifo mode\n",ftdi_get_error_string(&ftdic));
+ fprintf(stderr,"Can't set synchronous fifo mode, Error %s\n",ftdi_get_error_string(ftdi));
+ ftdi_usb_close(ftdi);
+ ftdi_free(ftdi);
return EXIT_FAILURE;
}
- ftdi_usb_close(&ftdic);
- ftdi_deinit(&ftdic);
+ ftdi_usb_close(ftdi);
+ ftdi_free(ftdi);
signal(SIGINT, SIG_DFL);
if (check && outfile)
{
if ((outputFile = fopen(outfile,"r")) == 0)
{
fprintf(stderr,"Can't open logfile %s, Error %s\n", outfile, strerror(errno));
+ ftdi_usb_close(ftdi);
+ ftdi_free(ftdi);
return EXIT_FAILURE;
}
check_outfile(descstring);
fclose(outputFile);
}
else if (check)
- fprintf(stderr,"%d errors of %d blocks (%Le), %d (%Le) blocks skipped\n",
- n_err, blocks, (long double)n_err/(long double) blocks,
+ fprintf(stderr,"%d errors of %llu blocks (%Le), %d (%Le) blocks skipped\n",
+ n_err, (unsigned long long) blocks, (long double)n_err/(long double) blocks,
skips, (long double)skips/(long double) blocks);
exit (0);
}
int err_count = 0;
unsigned int num_start, num_end;
- unsigned int block[4];
pa = buf0;
pb = buf1;
pc = buf0;
uint32_t *pc = block0;
uint32_t start= 0;
uint32_t nread = 0;
- int expect = 1;
int n_shown = 0;
int n_errors = 0;
if (fread(pa, sizeof(uint32_t), 4,outputFile) < 4)
{
if(n_shown < 30)
{
- fprintf(stderr, "Skip %7d blocks from 0x%08x to 0x%08x at blocks %10d \n",
- (nread-start)/0x4000, start -0x4000, nread, blocks);
+ fprintf(stderr, "Skip %7d blocks from 0x%08x to 0x%08x at blocks %10llu \n",
+ (nread-start)/0x4000, start -0x4000, nread, (unsigned long long) blocks);
n_shown ++;
}
n_errors++;
pc = pa;
}
if(n_errors)
- fprintf(stderr, "%d blocks wrong from %d blocks read\n",
- n_errors, blocks);
+ fprintf(stderr, "%d blocks wrong from %llu blocks read\n",
+ n_errors, (unsigned long long) blocks);
else
- fprintf(stderr, "%d blocks all fine\n",blocks);
+ fprintf(stderr, "%llu blocks all fine\n", (unsigned long long) blocks);
}
}