Commit a454f72a authored by Federico Vaga's avatar Federico Vaga

oldtools: remove duplicated tools

Signed-off-by: Federico Vaga's avatarFederico Vaga <federico.vaga@cern.ch>
parent c2afefca
......@@ -18,17 +18,6 @@ hostprogs-y += parport-burst
hostprogs-y += fd-raw-output
hostprogs-y += fd-raw-perf
# programs that used to live in lib/
hostprogs-y += fdelay-list
hostprogs-y += fdelay-term
hostprogs-y += fdelay-board-time
hostprogs-y += fdelay-open-by-lun
hostprogs-y += fdelay-read
hostprogs-y += fdelay-fread
hostprogs-y += fdelay-pulse
hostprogs-y += fdelay-pulse-tom
# we are not in the kernel, so we need to piggy-back on "make modules"
all modules: $(hostprogs-y)
......
/* Simple demo that acts on the time of the first board */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include "fdelay-lib.h"
int main(int argc, char **argv)
{
struct fdelay_board *b;
int i, get = 0, host = 0, wr_on = 0, wr_off = 0;
struct fdelay_time t;
int dev = 0;
/* Parse, and kill "-i <devindex>" */
if (argc > 2 && !strcmp(argv[1], "-i")) {
dev = strtol(argv[2], NULL, 0);
argv[2] = argv[0];
argc -= 2;
}
if (argc != 2) {
fprintf(stderr,
"%s: Use \"%s [-i <devindex> \"get\"|\"host\"|\"local\"|\"wr\"|"
"<float-value>\"\n", argv[0], argv[0]);
exit(1);
}
/* Crappy parser */
if (!strcmp(argv[1], "get"))
get = 1;
else if (!strcmp(argv[1], "host"))
host = 1;
else if (!strcmp(argv[1], "wr"))
wr_on = 1;
else if (!strcmp(argv[1], "local"))
wr_off = 1;
else {
double nano;
long long sec;
memset(&t, 0, sizeof(t));
i = sscanf(argv[1], "%lli%lf\n", &sec, &nano);
if (i < 1) {
fprintf(stderr, "%s: Not a number \"%s\"\n",
argv[0], argv[1]);
exit(1);
}
t.utc = sec;
t.coarse = nano * 1000 * 1000 * 1000 / 8;
}
i = fdelay_init();
if (i < 0) {
fprintf(stderr, "%s: fdelay_init(): %s\n", argv[0],
strerror(errno));
exit(1);
}
if (i == 0) {
fprintf(stderr, "%s: no boards found\n", argv[0]);
exit(1);
}
if (i != 1)
fprintf(stderr, "%s: found %i boards\n", argv[0], i);
b = fdelay_open(dev, -1);
if (!b) {
fprintf(stderr, "%s: fdelay_open(): %s\n", argv[0],
strerror(errno));
exit(1);
}
if (i != 1)
fprintf(stderr, "%s: using board %d\n", argv[0], dev);
if (get) {
if (fdelay_get_time(b, &t) < 0) {
fprintf(stderr, "%s: fdelay_get_time(): %s\n", argv[0],
strerror(errno));
exit(1);
}
printf("%lli.%09li\n", (long long)t.utc, (long)t.coarse * 8);
fdelay_close(b);
fdelay_exit();
return 0;
}
if (host) {
if (fdelay_set_host_time(b) < 0) {
fprintf(stderr, "%s: fdelay_set_host_time(): %s\n",
argv[0], strerror(errno));
exit(1);
}
fdelay_close(b);
fdelay_exit();
return 0;
}
if (wr_on) {
printf("Locking the card to WR: ");
if (fdelay_wr_mode(b, 1) < 0) {
fprintf(stderr, "%s: fdelay_wr_mode(): %s\n",
argv[0], strerror(errno));
exit(1);
}
while (fdelay_check_wr_mode(b) != 0) {
printf(".");
sleep(1);
}
printf(" locked!\n");
fdelay_close(b);
fdelay_exit();
return 0;
}
if (wr_off) {
if (fdelay_wr_mode(b, 0) < 0) {
fprintf(stderr, "%s: fdelay_wr_mode(): %s\n",
argv[0], strerror(errno));
exit(1);
}
fdelay_close(b);
fdelay_exit();
return 0;
}
if (fdelay_set_time(b, &t) < 0) {
fprintf(stderr, "%s: fdelay_set_host_time(): %s\n",
argv[0], strerror(errno));
exit(1);
}
fdelay_close(b);
fdelay_exit();
return 0;
}
/* Simple demo that reads samples using the fread call */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include "fdelay-lib.h"
int main(int argc, char **argv)
{
struct fdelay_board *b;
int i, j,npulses;
struct fdelay_time *t;
if (argc != 2) {
fprintf(stderr, "%s: Use \"%s <nsamples>\n", argv[0], argv[0]);
exit(1);
}
i = fdelay_init();
if (i < 0) {
fprintf(stderr, "%s: fdelay_init(): %s\n", argv[0],
strerror(errno));
exit(1);
}
if (i == 0) {
fprintf(stderr, "%s: no boards found\n", argv[0]);
exit(1);
}
if (i != 1) {
fprintf(stderr, "%s: found %i boards, using first one\n",
argv[0], i);
}
b = fdelay_open(0, -1);
if (!b) {
fprintf(stderr, "%s: fdelay_open(): %s\n", argv[0],
strerror(errno));
exit(1);
}
npulses = atoi(argv[1]);
t = calloc(npulses, sizeof(*t));
if (!t) {
fprintf(stderr, "%s: calloc(): %s\n", argv[0],
strerror(errno));
exit(1);
}
fprintf(stderr, "%s: reading %i pulses using fread...",
argv[0], npulses);
i = fdelay_fread(b, t, npulses);
fprintf(stderr, " got %i of them\n", i);
for (j = 0; j < i; j++) {
printf("seq %5i: time %lli.%09li + %04x\n",
t[j].seq_id, (long long)t[j].utc,
(long)t[j].coarse * 8, t[j].frac);
}
if (i < 0) {
fprintf(stderr, "%s: fdelay_read: %s\n",
argv[0], strerror(errno));
exit(1);
}
fdelay_close(b);
fdelay_exit();
return 0;
}
/* Silly thing that lists installed fine-delay boards */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#define FDELAY_INTERNAL /* hack... */
#include "fdelay-lib.h"
int main(int argc, char **argv)
{
int i, j;
struct __fdelay_board *b;
struct fdelay_board *ub;
i = fdelay_init();
if (i < 0) {
fprintf(stderr, "%s: fdelay_init(): %s\n", argv[0],
strerror(errno));
exit(1);
}
printf("%s: found %i boards\n", argv[0], i);
for (j = 0; j < i; j++) {
ub = fdelay_open(j, -1);
b = (typeof(b))ub;
printf(" dev_id %04x, %s, %s\n", b->dev_id, b->devbase,
b->sysbase);
}
fdelay_exit();
return 0;
}
/* Silly thing that lists installed fine-delay boards */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#define FDELAY_INTERNAL /* hack... */
#include "fdelay-lib.h"
int main(int argc, char **argv)
{
int i;
struct __fdelay_board *b;
struct fdelay_board *ub;
int lun;
char *endptr;
if (argc != 2)
goto usage;
lun = strtol(argv[1], &endptr, 0);
if (*endptr != 0)
goto usage;
i = fdelay_init();
if (i < 0) {
fprintf(stderr, "%s: fdelay_init(): %s\n", argv[0],
strerror(errno));
exit(1);
}
printf("%s: found %i boards\n", argv[0], i);
ub = fdelay_open_by_lun(lun);
if (ub == NULL) {
fprintf(stderr, "could not open lun %d\n", lun);
exit(1);
}
b = (typeof(b))ub;
printf("lun:%d dev_id %04x, %s, %s\n", lun, b->dev_id, b->devbase,
b->sysbase);
fdelay_exit();
return 0;
usage:
printf("usage: %s lun\n", argv[0]);
return -1;
}
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <getopt.h>
#include <ctype.h>
#include "fdelay-lib.h"
static void help(int argc, char *argv[])
{
fprintf(stderr, "%s: Use \"%s [options]\n", argv[0], argv[0]);
fprintf(stderr, "\t Options are: \n");
fprintf(stderr,
"\t -d device : specify device index of hex busid (default: first card available)\n");
fprintf(stderr,
"\t -m mode : the mode: disable, pulse or delay (mandatory)\n");
fprintf(stderr,
"\t -o channel : the output channel, 1..4 (mandatory) \n");
fprintf(stderr,
"\t -a time : specify trigger absolute time (default: none)\n");
fprintf(stderr,
"\t -s time : specify trigger relative time (default: 1s in pulse generator mode and 0.5 us in delay mode).\n");
fprintf(stderr,
"\t -w time : specify output pulse width (default: 200 ns). \n");
fprintf(stderr, "\t -g time : specify output pulse spacing. \n");
fprintf(stderr,
"\t -t : wait for trigger before exiting (default: on) \n");
fprintf(stderr,
"\t -q count : number of pulses to generate (default: 1)\n");
fprintf(stderr,
"\t -c : generate infinite number of pulses (default: off)\n");
fprintf(stderr, "\t -p : generate PPS\n");
fprintf(stderr, "\t -1 : generate 10 MHz\n");
fprintf(stderr,
"Time format is a sum of times expressed in (full, milli, micro, nano, pico)seconds, for example:\n");
fprintf(stderr,
"1s+20u-100n is 1 sec, 19.9 us. Fractional numbers are NOT allowed.\n\n");
}
static struct fdelay_time ts_add(struct fdelay_time a, struct fdelay_time b)
{
a.frac += b.frac;
if (a.frac >= 4096) {
a.frac -= 4096;
a.coarse++;
}
a.coarse += b.coarse;
if (a.coarse >= 125000000) {
a.coarse -= 125000000;
a.utc++;
}
a.utc += b.utc;
return a;
}
static void parse_time(char *s, struct fdelay_time *t)
{
int64_t time_ps = 0;
int64_t extra_seconds = 0;
int64_t sign = 1;
int64_t term = 0;
int64_t scale = 1;
const int64_t one_second = 1000000000000LL;
char c, *buf = s;
while ((c = *buf++) != 0) {
switch (c) {
case '+':
if (scale == one_second)
extra_seconds += sign * term;
else
time_ps += sign * term * scale;
term = 0;
sign = 1;
break;
case '-':
if (scale == one_second)
extra_seconds += sign * term;
else
time_ps += sign * term * scale;
term = 0;
sign = -1;
break;
case 's':
scale = one_second;
break;
case 'm':
scale = 1000000000LL;
break;
case 'u':
scale = 1000000LL;
break;
case 'n':
scale = 1000LL;
break;
case 'p':
scale = 1LL;
break;
default:
if (isdigit(c)) {
term *= 10LL;
term += (int64_t) (c - '0');
break;
} else {
fprintf(stderr,
"Error while parsing time string '%s'\n",
s);
exit(-1);
}
}
}
if (scale == one_second)
extra_seconds += sign * term;
else
time_ps += sign * term * scale;
while (time_ps < 0) {
time_ps += one_second;
extra_seconds--;
}
fdelay_pico_to_time((uint64_t *) & time_ps, t);
t->utc += extra_seconds;
// printf("dbg: raw %lld, %lld, converted: %lld s %d ns %d ps\n", extra_seconds,time_ps, t->utc, t->coarse * 8, t->frac * 8000 / 4096);
}
void dump_ts(char *title, struct fdelay_time t)
{
printf("%s: secs %lld coarse %d frac %d\n", title, (long long)t.utc,
t.coarse, t.frac);
}
int main(int argc, char **argv)
{
struct fdelay_time t_start, t_delta, t_width;
int mode = -1;
int channel = -1;
int count = 1;
int wait_trigger = 0;
int opt;
int relative = 1;
int devid = 0;
int do_pps = 0, do_10m = 0;
uint64_t default_width = 250000;
fdelay_pico_to_time(&default_width, &t_width);
while ((opt = getopt(argc, argv, "p1hctd:m:o:a:s:w:g:q:")) != -1) {
switch (opt) {
case 'h':
help(argc, argv);
break;
case 'c':
count = -1;
break;
case 'q':
count = atoi(optarg);
break;
case 't':
wait_trigger = 1;
break;
case 'g':
parse_time(optarg, &t_delta);
break;
case 'w':
parse_time(optarg, &t_width);
break;
case 's':
parse_time(optarg, &t_start);
relative = 1;
break;
case 'a':
parse_time(optarg, &t_start);
relative = 0;
break;
case 'o':
channel = atoi(optarg);
if (channel < 1 || channel > 4) {
fprintf(stderr, "Invalid output channel.\n");
exit(1);
}
break;
case 'm':
if (!strcmp(optarg, "pulse"))
mode = FD_OUT_MODE_PULSE;
else if (!strcmp(optarg, "delay"))
mode = FD_OUT_MODE_DELAY;
else if (!strcmp(optarg, "disable"))
mode = FD_OUT_MODE_DISABLED;
else {
fprintf(stderr, "Invalid output mode.\n");
exit(1);
}
break;
case 'd':
sscanf(optarg, "%i", &devid);
break;
case 'p':
do_pps = 1;
break;
case '1':
do_10m = 1;
break;
}
}
struct fdelay_board *b;
struct fdelay_pulse p;
/* init before going on parsing */
int i = fdelay_init();
if (i < 0) {
fprintf(stderr, "%s: fdelay_init(): %s\n", argv[0],
strerror(errno));
exit(1);
}
if (i == 0) {
fprintf(stderr, "%s: no boards found\n", argv[0]);
exit(1);
}
b = fdelay_open(devid, -1);
if (!b)
b = fdelay_open(-1, devid);
if (!b) {
fprintf(stderr, "%s: fdelay_open(0x%x): %s\n", argv[0], devid,
strerror(errno));
exit(1);
}
if ((mode < 0 || channel < 0) && !do_pps && !do_10m) {
fprintf(stderr,
"You must specify the mode and the channel to generate pulses\n");
exit(1);
}
if (mode == FD_OUT_MODE_PULSE && relative) {
fdelay_get_time(b, &p.start);
p.start = ts_add(p.start, t_start);
} else {
p.start = t_start;
}
p.end = ts_add(p.start, t_width);
p.loop = t_delta;
p.rep = count;
p.mode = mode;
if (do_pps || do_10m) {
uint64_t width = do_pps ? 1000000 : 48000;
uint64_t delta = do_pps ? 1000000000000ULL : 100000ULL;
fdelay_pico_to_time(&width, &t_width);
fdelay_get_time(b, &p.start);
p.start.utc += 2;
p.start.coarse = 0;
p.start.frac = 0;
p.end = ts_add(p.start, t_width);
fdelay_pico_to_time(&delta, &p.loop);
p.rep = -1;
p.mode = FD_OUT_MODE_PULSE;
}
/* And finally work */
if (fdelay_config_pulse(b, channel - 1, &p) < 0) {
fprintf(stderr, "%s: fdelay_config_pulse(): %s\n",
argv[0], strerror(errno));
exit(1);
}
while (wait_trigger) {
usleep(10 * 1000);
i = fdelay_has_triggered(b, channel - 1);
if (i < 0) {
fprintf(stderr, "%s: waiting for trigger: %s\n",
argv[0], strerror(errno));
exit(1);
}
wait_trigger = !i;
}
fdelay_close(b);
fdelay_exit();
return 0;
}
/* Simple demo that acts on the time of the first board */
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include "fdelay-lib.h"
static int exiterr(int argc, char **argv)
{
fprintf(stderr, "%s: Use \"%s [<dev>] <mode> <ch> <rep> "
"<t1> <t2> <t3>\"\n", argv[0], argv[0]);
fprintf(stderr, "\t <dev> is index ([0..]) or hex busid\n");
fprintf(stderr, "\t <mode> is \"disable\",\"pulse\",\"delay\"\n");
fprintf(stderr, "\t <t> is <utc>.<us>[+<ps>]\"\n");
fprintf(stderr, "\t Note that <t2> and <t3> are relative to <t1>\n");
fprintf(stderr, "\t (if <utc> uses a leading + it's added to now)\n");
exit(1);
}
static int parse_time(struct fdelay_board *b, char *s, struct fdelay_time *t)
{
unsigned long u, m = 0, p = 0;
char smicro[32];
int i, relative = 0;
/*
* Hairy: if we scan "%ld%lf", the 0.009999 will become 9998 micro.
* Thus, scan as integer and string, so we can count leading zeros
*/
if (s[0] == '+') {
relative = 1;
s++;
}
if (sscanf(s, "%ld.%ld+%ld", &u, &m, &p) < 1) {
return -1;
}
if (m) { /* micro is not zero, check how long it is and scale*/
sscanf(s, "%ld.%[0-9]", &u, smicro);
i = strlen(smicro);
if (i > 6)
return -1;
while (i < 6) {
m *= 10;
i++;
}
}
t->utc = 0;
if (relative)
if (fdelay_get_time(b, t))
return -1;
t->utc += u;
t->coarse = m * 1000 / 8 + p / 8000;
t->frac = ((p % 8000) << 12) / 8000;
return 0;
}
int main(int argc, char **argv)
{
struct fdelay_board *b;
int i, devid, channel, needwait = 0;
struct fdelay_pulse p;
char *rest;
if (argc < 7)
exiterr(argc, argv);
/* Optional argv[1] is "-w" */
if (!strcmp(argv[1], "-w")) {
needwait++;
argv[1] = argv[0];
argv++;
argc--;
}
/* Next optional argv[1] is a number */
rest = strdup(argv[1]);
if (sscanf(argv[1], "%x%s", &devid, rest) != 1) {
devid = 0;
} else {
argv[1] = argv[0];
argv++;
argc--;
}
free(rest);
if (argc < 7) /* again: we ate some arguments */
exiterr(argc, argv);
/* Crappy parser */
if (!strcmp(argv[1], "disable"))
p.mode = FD_OUT_MODE_DISABLED;
else if (!strcmp(argv[1], "pulse"))
p.mode = FD_OUT_MODE_PULSE;
else if (!strcmp(argv[1], "delay"))
p.mode = FD_OUT_MODE_DELAY;
else {
fprintf(stderr, "%s: \"%s\": invalid\n",
argv[0], argv[1]);
exiterr(argc, argv);
}
rest = strdup(argv[2]);
if (sscanf(argv[2], "%i%s", &channel, rest) != 1) {
fprintf(stderr, "%s: channel \"%s\": not a number\n",
argv[0], argv[2]);
exiterr(argc, argv);
}
free(rest);
rest = strdup(argv[3]);
if (sscanf(argv[3], "%i%s", &p.rep, rest) != 1) {
fprintf(stderr, "%s: rep \"%s\": not a number\n",
argv[0], argv[2]);
exiterr(argc, argv);
}
free(rest);
/* init before going on parsing */
i = fdelay_init();
if (i < 0) {
fprintf(stderr, "%s: fdelay_init(): %s\n", argv[0],
strerror(errno));
exit(1);
}
if (i == 0) {
fprintf(stderr, "%s: no boards found\n", argv[0]);
exit(1);
}
b = fdelay_open(devid, -1);
if (!b)
b = fdelay_open(-1, devid);
if (!b) {
fprintf(stderr, "%s: fdelay_open(0x%x): %s\n", argv[0], devid,
strerror(errno));
exit(1);
}
/* now we can ask current time: continue parsing */
if (parse_time(b, argv[4], &p.start)) {
fprintf(stderr, "%s: can't parse \"%s\"\n", argv[0], argv[4]);
exiterr(argc, argv);
}
if (parse_time(b, argv[5], &p.end)) {
fprintf(stderr, "%s: can't parse \"%s\"\n", argv[0], argv[5]);
exiterr(argc, argv);
}
if (parse_time(b, argv[6], &p.loop)) {
fprintf(stderr, "%s: can't parse \"%s\"\n", argv[0], argv[6]);
exiterr(argc, argv);
}
/* end is specified as relative but used as absolute */
p.end.frac += p.start.frac;
if (p.end.frac > 4096) {
p.end.frac -= 4096;
p.end.coarse++;
}
p.end.coarse += p.start.coarse;
if (p.end.coarse > 125 * 1000 * 1000) {
p.end.coarse -= 125 * 1000 * 1000;
p.end.utc++;
}
p.end.utc += p.start.utc;
/* And finally work */
if (fdelay_config_pulse(b, channel, &p) < 0) {
fprintf(stderr, "%s: fdelay_config_pulse(): %s\n",
argv[0], strerror(errno));
exit(1);
}
while (needwait) {
usleep(10 * 1000);
i = fdelay_has_triggered(b, channel);
if (i < 0) {
fprintf(stderr, "%s: waiting for trigger: %s\n",
argv[0], strerror(errno));
exit(1);
}
needwait = !i;
}
fdelay_close(b);
fdelay_exit();
return 0;
}
/* Simple demo that reads samples using the read call */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include "fdelay-lib.h"
int main(int argc, char **argv)
{
struct fdelay_board *b;
int i, j,npulses;
struct fdelay_time *t;
if (argc != 2) {
fprintf(stderr, "%s: Use \"%s <nsamples>\n", argv[0], argv[0]);
exit(1);
}
i = fdelay_init();
if (i < 0) {
fprintf(stderr, "%s: fdelay_init(): %s\n", argv[0],
strerror(errno));
exit(1);
}
if (i == 0) {
fprintf(stderr, "%s: no boards found\n", argv[0]);
exit(1);
}
if (i != 1) {
fprintf(stderr, "%s: found %i boards, using first one\n",
argv[0], i);
}
b = fdelay_open(0, -1);
if (!b) {
fprintf(stderr, "%s: fdelay_open(): %s\n", argv[0],
strerror(errno));
exit(1);
}
npulses = atoi(argv[1]);
t = calloc(npulses, sizeof(*t));
if (!t) {
fprintf(stderr, "%s: calloc(): %s\n", argv[0],
strerror(errno));
exit(1);
}
/* Read twice: first blocking then non-blocking */
fprintf(stderr, "%s: reading %i pulses in blocking mode...",
argv[0], npulses);
i = fdelay_read(b, t, npulses, 0);
fprintf(stderr, " got %i of them\n", i);
for (j = 0; j < i; j++) {
printf("seq %5i: time %lli.%09li + %04x\n",
t[j].seq_id, (long long)t[j].utc,
(long)t[j].coarse * 8, t[j].frac);
}
if (i < 0) {
fprintf(stderr, "%s: fdelay_read: %s\n",
argv[0], strerror(errno));
exit(1);
}
fprintf(stderr, "%s: reading %i pulses in non-blocking mode...",
argv[0], npulses);
i = fdelay_read(b, t, npulses, O_NONBLOCK);
fprintf(stderr, " got %i of them\n", i);
for (j = 0; j < i; j++) {
printf("seq %5i: time %lli.%09li + %04x\n",
t[j].seq_id, (long long)t[j].utc,
(long)t[j].coarse * 8, t[j].frac);
}
fdelay_close(b);
fdelay_exit();
return 0;
}
/* Simple demo that acts on the termination of the first board */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include "fdelay-lib.h"
int main(int argc, char **argv)
{
struct fdelay_board *b;
int i, hwval, newval;
int dev = 0;
if (argc < 2) {
fprintf(stderr, "%s: Use %s <dev> 1|0\n", argv[0], argv[0]);
exit(1);
}
newval = -1;
if (argc > 2) {
dev = strtol(argv[1], NULL, 0);
if (!strcmp(argv[2], "0"))
newval = 0;
else if (!strcmp(argv[2], "1"))
newval = 1;
else {
fprintf(stderr, "%s: arg \"%s\" is not 0 nor 1\n",
argv[0], argv[2]);
exit(1);
}
}
i = fdelay_init();
if (i < 0) {
fprintf(stderr, "%s: fdelay_init(): %s\n", argv[0],
strerror(errno));
exit(1);
}
if (i == 0) {
fprintf(stderr, "%s: no boards found\n", argv[0]);
exit(1);
}
if (i != 1) {
fprintf(stderr, "%s: found %i boards\n",
argv[0], i);
}
b = fdelay_open(dev, -1);
if (!b) {
fprintf(stderr, "%s: fdelay_open(): %s\n", argv[0],
strerror(errno));
exit(1);
}
fprintf(stderr, "%s: using board %d\n", argv[0], dev);
hwval = fdelay_get_config_tdc(b);
switch(newval) {
case 1:
hwval |= FD_TDCF_TERM_50;
break;
case 0:
hwval &= ~FD_TDCF_TERM_50;
break;
}
fdelay_set_config_tdc(b, hwval);
hwval = fdelay_get_config_tdc(b);
printf("%s: termination is %d %s\n", argv[0], hwval,
hwval & FD_TDCF_TERM_50 ? "on" : "off");
fdelay_close(b);
fdelay_exit();
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