Commit fbf2007c authored by Alessandro Rubini's avatar Alessandro Rubini

tools/fd-raw-input: accept several print modes

parent 94222ea7
...@@ -27,12 +27,16 @@ ...@@ -27,12 +27,16 @@
#include <linux/zio-user.h> #include <linux/zio-user.h>
#include <fine-delay.h> #include <fine-delay.h>
enum {MODE_HEX, MODE_FLOAT, MODE_PICO}; enum {
MODE_HEX = 1,
MODE_FLOAT = 2,
MODE_PICO = 4
};
int expect; int expect;
int show_time; int show_time;
void event(uint32_t *a, char *name, int *seq, int mode, long double *t1, void event(uint32_t *a, char *name, int *seq, int modemask, long double *t1,
uint64_t *p1) uint64_t *p1)
{ {
int sequence = a[FD_ATTR_TDC_SEQ]; int sequence = a[FD_ATTR_TDC_SEQ];
...@@ -58,46 +62,43 @@ void event(uint32_t *a, char *name, int *seq, int mode, long double *t1, ...@@ -58,46 +62,43 @@ void event(uint32_t *a, char *name, int *seq, int mode, long double *t1,
if (otv.tv_sec) { if (otv.tv_sec) {
deltamicro = (tv.tv_sec - otv.tv_sec) * 1000 * 1000 deltamicro = (tv.tv_sec - otv.tv_sec) * 1000 * 1000
+ tv.tv_usec - otv.tv_usec; + tv.tv_usec - otv.tv_usec;
printf("+ %i.%06i: ", deltamicro / 1000 / 1000, printf("+ %i.%06i:", deltamicro / 1000 / 1000,
deltamicro % (1000*1000)); deltamicro % (1000*1000));
} else { } else {
printf("%03li.%06li: ", tv.tv_sec % 1000, tv.tv_usec); printf("%03li.%06li:", tv.tv_sec % 1000, tv.tv_usec);
} }
otv = tv; otv = tv;
} else { } else {
/* time works with one file only, avoid the fname */ /* time works with one file only, avoid the fname */
printf("%s: ", name); printf("%s:", name);
} }
switch(mode) { if (modemask & MODE_HEX) {
case MODE_HEX: printf(" %08x %08x %08x %08x %08x\n",
printf("%08x %08x %08x %08x %08x\n",
a[FD_ATTR_TDC_UTC_H], a[FD_ATTR_TDC_UTC_H],
a[FD_ATTR_TDC_UTC_L], a[FD_ATTR_TDC_UTC_L],
a[FD_ATTR_TDC_COARSE], a[FD_ATTR_TDC_COARSE],
a[FD_ATTR_TDC_FRAC], a[FD_ATTR_TDC_FRAC],
a[FD_ATTR_TDC_SEQ]); a[FD_ATTR_TDC_SEQ]);
break; }
if (modemask & MODE_FLOAT) {
case MODE_FLOAT:
t2 = a[FD_ATTR_TDC_UTC_L] + a[FD_ATTR_TDC_COARSE] t2 = a[FD_ATTR_TDC_UTC_L] + a[FD_ATTR_TDC_COARSE]
* .000000008; /* 8ns */ * .000000008; /* 8ns */
if (*t1) { if (*t1) {
printf("%17.9Lf (delta %13.9Lf)\n", printf(" %17.9Lf (delta %13.9Lf)\n",
t2, t2 - *t1); t2, t2 - *t1);
} else { } else {
printf("%17.9Lf\n", t2); printf(" %17.9Lf\n", t2);
} }
*t1 = t2; *t1 = t2;
break; }
if (modemask & MODE_PICO) {
case MODE_PICO:
p2 = a[FD_ATTR_TDC_COARSE] * 8000LL p2 = a[FD_ATTR_TDC_COARSE] * 8000LL
+ a[FD_ATTR_TDC_FRAC] * 8000LL / 4096; + a[FD_ATTR_TDC_FRAC] * 8000LL / 4096;
delta = p2 - *p1; delta = p2 - *p1;
if (delta < 0) if (delta < 0)
delta += 1000LL * 1000 * 1000 * 1000; delta += 1000LL * 1000 * 1000 * 1000;
if (*p1) { if (*p1) {
printf("%012lli - delta %012lli", p2, delta); printf(" %012lli - delta %012lli", p2, delta);
if (expect) { if (expect) {
guess += expect; guess += expect;
if (guess > 1000LL * 1000 * 1000 * 1000) if (guess > 1000LL * 1000 * 1000 * 1000)
...@@ -107,12 +108,11 @@ void event(uint32_t *a, char *name, int *seq, int mode, long double *t1, ...@@ -107,12 +108,11 @@ void event(uint32_t *a, char *name, int *seq, int mode, long double *t1,
putchar('\n'); putchar('\n');
} }
else { else {
printf("%012lli\n", p2); printf(" %012lli\n", p2);
if (expect) if (expect)
guess = p2; guess = p2;
} }
*p1 = p2; *p1 = p2;
break;
} }
} }
...@@ -125,7 +125,7 @@ int main(int argc, char **argv) ...@@ -125,7 +125,7 @@ int main(int argc, char **argv)
int i, j, maxfd = 0; int i, j, maxfd = 0;
int fd[MAXFD], seq[MAXFD]; int fd[MAXFD], seq[MAXFD];
fd_set allset, curset; fd_set allset, curset;
int mode = MODE_HEX; int modemask = MODE_HEX;
long double t1[MAXFD] = {0.0,}; long double t1[MAXFD] = {0.0,};
uint64_t p1[MAXFD] = {0LL,}; uint64_t p1[MAXFD] = {0LL,};
uint32_t *attrs; uint32_t *attrs;
...@@ -135,16 +135,27 @@ int main(int argc, char **argv) ...@@ -135,16 +135,27 @@ int main(int argc, char **argv)
if (getenv("FD_SHOW_TIME")) if (getenv("FD_SHOW_TIME"))
show_time = 1; show_time = 1;
if (argc > 1 && !strcmp(argv[1], "-f")) { while ((i = getopt(argc, argv, "fprh")) != -1) {
mode = MODE_FLOAT;
argv[1] = argv[0]; switch(i) {
argv++, argc--; case 'f':
} modemask &= ~MODE_HEX;
if (argc > 1 && !strcmp(argv[1], "-p")) { modemask |= MODE_FLOAT;
mode = MODE_PICO; break;
argv[1] = argv[0]; case 'p':
argv++, argc--; modemask &= ~MODE_HEX;
modemask |= MODE_PICO;
break;
case 'r':
case 'h':
modemask |= MODE_HEX;
break;
}
} }
/* adjust for consumed arguments */
argv[optind - 1] = argv[0];
argc -= (optind - 1);
argv += (optind - 1);
if (argc < 2) { if (argc < 2) {
/* rebuild argv using globbing */ /* rebuild argv using globbing */
...@@ -210,7 +221,8 @@ int main(int argc, char **argv) ...@@ -210,7 +221,8 @@ int main(int argc, char **argv)
exit(1); exit(1);
} }
attrs = ctrl.attr_channel.ext_val; attrs = ctrl.attr_channel.ext_val;
event(attrs, argv[i], seq + i, mode, t1 + i, p1 + i); event(attrs, argv[i], seq + i, modemask,
t1 + i, p1 + i);
} }
} }
return 0; return 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment