Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
F
FMC DEL 1ns 4cha
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
2
Issues
2
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
FMC DEL 1ns 4cha
Commits
a454f72a
Commit
a454f72a
authored
May 20, 2020
by
Federico Vaga
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
oldtools: remove duplicated tools
Signed-off-by:
Federico Vaga
<
federico.vaga@cern.ch
>
parent
c2afefca
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
0 additions
and
943 deletions
+0
-943
Makefile
oldtools/Makefile
+0
-11
fdelay-board-time.c
oldtools/fdelay-board-time.c
+0
-141
fdelay-fread.c
oldtools/fdelay-fread.c
+0
-67
fdelay-list.c
oldtools/fdelay-list.c
+0
-33
fdelay-open-by-lun.c
oldtools/fdelay-open-by-lun.c
+0
-48
fdelay-pulse-tom.c
oldtools/fdelay-pulse-tom.c
+0
-304
fdelay-pulse.c
oldtools/fdelay-pulse.c
+0
-187
fdelay-read.c
oldtools/fdelay-read.c
+0
-79
fdelay-term.c
oldtools/fdelay-term.c
+0
-73
No files found.
oldtools/Makefile
View file @
a454f72a
...
...
@@ -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)
...
...
oldtools/fdelay-board-time.c
deleted
100644 → 0
View file @
c2afefca
/* 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
;
}
oldtools/fdelay-fread.c
deleted
100644 → 0
View file @
c2afefca
/* 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
;
}
oldtools/fdelay-list.c
deleted
100644 → 0
View file @
c2afefca
/* 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
;
}
oldtools/fdelay-open-by-lun.c
deleted
100644 → 0
View file @
c2afefca
/* 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
;
}
oldtools/fdelay-pulse-tom.c
deleted
100644 → 0
View file @
c2afefca
#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
;
}
oldtools/fdelay-pulse.c
deleted
100644 → 0
View file @
c2afefca
/* 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
;
}
oldtools/fdelay-read.c
deleted
100644 → 0
View file @
c2afefca
/* 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
;
}
oldtools/fdelay-term.c
deleted
100644 → 0
View file @
c2afefca
/* 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
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment