Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
F
FMC DEL 1ns 4cha - Software
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
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 - Software
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