Commit 45f6dd07 authored by Tristan Gingold's avatar Tristan Gingold

config tools: remove prototypes, add time command, generalize -D option.

Also check for unknown command.
parent fa795859
......@@ -29,87 +29,6 @@
#include <wrtd-internal.h>
static int wrtd_cmd_state(struct wrtd_node *wrtd, int input,
int argc, char *argv[]);
static int wrtd_cmd_enable(struct wrtd_node *wrtd, int input,
int argc, char *argv[]);
static int wrtd_cmd_disable(struct wrtd_node *wrtd, int input,
int argc, char *argv[]);
static int wrtd_cmd_set_dead_time(struct wrtd_node *wrtd, int input,
int argc, char *argv[]);
static int wrtd_cmd_set_delay(struct wrtd_node *wrtd, int input,
int argc, char *argv[]);
static int wrtd_cmd_set_mode(struct wrtd_node *wrtd, int input,
int argc, char *argv[]);
static int wrtd_cmd_assign(struct wrtd_node *wrtd, int input,
int argc, char *argv[]);
static int wrtd_cmd_unassign(struct wrtd_node *wrtd, int input,
int argc, char *argv[]);
static int wrtd_cmd_arm(struct wrtd_node *wrtd, int input,
int argc, char *argv[]);
static int wrtd_cmd_disarm(struct wrtd_node *wrtd, int input,
int argc, char *argv[]);
static int wrtd_cmd_reset(struct wrtd_node *wrtd, int input,
int argc, char *argv[]);
static int wrtd_cmd_global_reset(struct wrtd_node *wrtd, int input,
int argc, char *argv[]);
static int wrtd_cmd_sw_trigger(struct wrtd_node *wrtd, int input,
int argc, char *argv[]);
static int wrtd_cmd_log_level(struct wrtd_node *wrtd, int input,
int argc, char *argv[]);
static struct wrtd_commands cmds[] = {
{ "state", "", "shows input state",
wrtd_cmd_state },
{ "enable", "", "enable the input",
wrtd_cmd_enable },
{ "disable", "", "disable the input",
wrtd_cmd_disable },
{ "deadtime", "<number>", "sets the dead time in pico-seconds",
wrtd_cmd_set_dead_time },
{ "delay", "<number>", "sets the input delay in pico-seconds",
wrtd_cmd_set_delay },
{ "mode", "<mode>", "sets triggering mode (see Trigger Modes)",
wrtd_cmd_set_mode },
{ "assign", "<trig-id>", "assigns a trigger (see Trigger ID)",
wrtd_cmd_assign },
{ "unassign", "", "un-assigns the currently assigned trigger",
wrtd_cmd_unassign },
{ "arm", "", "arms the input",
wrtd_cmd_arm },
{ "disarm", "", "disarms the input",
wrtd_cmd_disarm },
{ "reset", "", "resets statistics counters",
wrtd_cmd_reset },
{ "global_reset", "", "resets global statistics counters",
wrtd_cmd_global_reset },
{ "swtrig", "", "sends a software trigger",
wrtd_cmd_sw_trigger },
{ "log_level", "<level>", "set logging level (see Log Levels)",
wrtd_cmd_log_level },
{ NULL }
};
static void help()
{
fprintf(stderr, "\n\n");
fprintf(stderr, "wrtd-in-config -D 0x<hex-number> -C <string> -c <number> [cmd-options]\n\n");
fprintf(stderr, "It configures an input channel on a White-Rabbit Trigger-Distribution node\n\n");
fprintf(stderr, "-D\tdevice id\n");
fprintf(stderr, "-C\tcommand name (see Available commands)\n");
fprintf(stderr, "-c\tchannel to configure [0, %d]\n",
TDC_NUM_CHANNELS - 1);
fprintf(stderr, "\n\n");
help_commands(cmds);
fprintf(stderr, "\n\n");
help_trig_id();
fprintf(stderr, "\n\n");
help_trig_mode();
fprintf(stderr, "\n\n");
help_log_level();
exit(1);
}
void dump_input_state(struct wrtd_input_state *state, struct wr_timestamp current)
{
char tmp[1024], tmp2[1024], tmp3[1024];
......@@ -328,10 +247,63 @@ static int wrtd_cmd_log_level(struct wrtd_node *wrtd, int input,
return wrtd_in_log_level_set(wrtd, input, log_level);
}
static struct wrtd_commands cmds[] = {
{ "state", "", "shows input state",
wrtd_cmd_state },
{ "enable", "", "enable the input",
wrtd_cmd_enable },
{ "disable", "", "disable the input",
wrtd_cmd_disable },
{ "deadtime", "<number>", "sets the dead time in pico-seconds",
wrtd_cmd_set_dead_time },
{ "delay", "<number>", "sets the input delay in pico-seconds",
wrtd_cmd_set_delay },
{ "mode", "<mode>", "sets triggering mode (see Trigger Modes)",
wrtd_cmd_set_mode },
{ "assign", "<trig-id>", "assigns a trigger (see Trigger ID)",
wrtd_cmd_assign },
{ "unassign", "", "un-assigns the currently assigned trigger",
wrtd_cmd_unassign },
{ "arm", "", "arms the input",
wrtd_cmd_arm },
{ "disarm", "", "disarms the input",
wrtd_cmd_disarm },
{ "reset", "", "resets statistics counters",
wrtd_cmd_reset },
{ "global_reset", "", "resets global statistics counters",
wrtd_cmd_global_reset },
{ "swtrig", "", "sends a software trigger",
wrtd_cmd_sw_trigger },
{ "log_level", "<level>", "set logging level (see Log Levels)",
wrtd_cmd_log_level },
{ NULL }
};
static void help(void)
{
fprintf(stderr, "\n\n");
fprintf(stderr, "wrtd-in-config -D DEVICE -c CHANNEL -C COMMAND [cmd-options]\n\n");
fprintf(stderr, "It configures an input channel on a White-Rabbit Trigger-Distribution node\n\n");
fprintf(stderr, "-D\tdevice id\n");
fprintf(stderr, "-C\tcommand name (see Available commands)\n");
fprintf(stderr, "-c\tchannel to configure [0, %d]\n",
TDC_NUM_CHANNELS - 1);
fprintf(stderr, "\n\n");
help_commands(cmds);
fprintf(stderr, "\n\n");
help_trig_id();
fprintf(stderr, "\n\n");
help_trig_mode();
fprintf(stderr, "\n\n");
help_log_level();
exit(1);
}
int main(int argc, char *argv[])
{
struct wrtd_node *wrtd;
uint32_t dev_id = 0;
char *endptr;
char *cmd, c;
int err = 0, i, chan = -1;
......@@ -342,7 +314,9 @@ int main(int argc, char *argv[])
help();
break;
case 'D':
sscanf(optarg, "0x%x", &dev_id);
dev_id = strtoul(optarg, &endptr, 0);
if (*endptr != 0)
dev_id = 0;
break;
case 'c':
sscanf(optarg, "%d", &chan);
......@@ -378,18 +352,22 @@ int main(int argc, char *argv[])
}
for (i = 0; cmds[i].handler; i++) {
if(!strcmp(cmds[i].name, cmd)) {
err = cmds[i].handler(wrtd, chan, argc - optind,
argv + optind);
if (err)
break;
}
}
if (err) {
fprintf(stderr, "Error while executing command '%s': %s\n",
cmd, wrtd_strerror(errno));
}
if(!strcmp(cmds[i].name, cmd))
break;
}
if (cmds[i].handler == NULL) {
fprintf(stderr, "unknown command '%s', try -h\n", cmd);
exit(1);
}
else {
err = cmds[i].handler(wrtd, chan, argc - optind,
argv + optind);
if (err) {
fprintf(stderr,
"Error while executing command '%s': %s\n",
cmd, wrtd_strerror(errno));
}
}
out:
wrtd_close(wrtd);
......
......@@ -28,98 +28,6 @@
#include <wrtd-internal.h>
static int wrtd_cmd_state(struct wrtd_node *wrtd, int output,
int argc, char *argv[]);
static int wrtd_cmd_enable(struct wrtd_node *wrtd, int output,
int argc, char *argv[]);
static int wrtd_cmd_disable(struct wrtd_node *wrtd, int output,
int argc, char *argv[]);
static int wrtd_cmd_pulse_width(struct wrtd_node *wrtd, int output,
int argc, char *argv[]);
static int wrtd_cmd_show(struct wrtd_node *wrtd, int output,
int argc, char *argv[]);
static int wrtd_cmd_trig_assign(struct wrtd_node *wrtd, int output,
int argc, char *argv[]);
static int wrtd_cmd_trig_unassign(struct wrtd_node *wrtd, int output,
int argc, char *argv[]);
static int wrtd_cmd_trig_enable(struct wrtd_node *wrtd, int output,
int argc, char *argv[]);
static int wrtd_cmd_trig_disable(struct wrtd_node *wrtd, int output,
int argc, char *argv[]);
static int wrtd_cmd_trig_stats(struct wrtd_node *wrtd, int output,
int argc, char *argv[]);
static int wrtd_cmd_trig_delay(struct wrtd_node *wrtd, int output,
int argc, char *argv[]);
static int wrtd_cmd_trig_cond_delay(struct wrtd_node *wrtd, int output,
int argc, char *argv[]);
static int wrtd_cmd_trig_find(struct wrtd_node *wrtd, int output,
int argc, char *argv[]);
static int wrtd_cmd_arm(struct wrtd_node *wrtd, int output,
int argc, char *argv[]);
static int wrtd_cmd_disarm(struct wrtd_node *wrtd, int output,
int argc, char *argv[]);
static int wrtd_cmd_mode(struct wrtd_node *wrtd, int output,
int argc, char *argv[]);
static int wrtd_cmd_dead_time(struct wrtd_node *wrtd, int output,
int argc, char *argv[]);
static int wrtd_cmd_reset_counters(struct wrtd_node *wrtd, int output,
int argc, char *argv[]);
static int wrtd_cmd_reset_global_counters(struct wrtd_node *wrtd, int output,
int argc, char *argv[]);
static int wrtd_cmd_log_level(struct wrtd_node *wrtd, int output,
int argc, char *argv[]);
static int wrtd_cmd_software_trigger(struct wrtd_node *wrtd, int output,
int argc, char *argv[]);
static int wrtd_cmq_has_trig(struct wrtd_node *wrtd, int output,
int argc, char *argv[]);
static struct wrtd_commands cmds[] = {
{ "state", "", "shows output state",
wrtd_cmd_state },
{ "assign", "<trig-id> [<trig-id>]", "assigns a trigger (see Trigger ID)",
wrtd_cmd_trig_assign },
{ "unassign", "<trig-id>", "un-assigns a given trigger",
wrtd_cmd_trig_unassign },
{ "show", "", "shows assigned triggers",
wrtd_cmd_show },
{ "enable", "", "enables an output",
wrtd_cmd_enable },
{ "disable", "", "disables an output",
wrtd_cmd_disable },
{ "arm", "", "arms an output",
wrtd_cmd_arm },
{ "disarm", "", "disarm an output",
wrtd_cmd_disarm },
{ "mode", "<mode>", "set output mode output (see Trigger Modes)",
wrtd_cmd_mode },
{ "dead_time", "<number>", "set output dead time in pico-seconds",
wrtd_cmd_dead_time },
{ "reset_counters", "", "reset statistic counters",
wrtd_cmd_reset_counters },
{ "reset_global_counters", "", "reset global statistic counters",
wrtd_cmd_reset_global_counters },
{ "log_level", "<level>", "set log level (see Log Levels)",
wrtd_cmd_log_level },
{ "pulse_width", "<number>", "sets the output pulse width in pico-seconds",
wrtd_cmd_pulse_width },
{ "sw_trig", "", "forces a software trigger",
wrtd_cmd_software_trigger },
{ "has_trig", "", "return true it as a trigger assigned",
wrtd_cmq_has_trig},
{ "trig_enable", "<trig-id>", "enables a particular trigger",
wrtd_cmd_trig_enable },
{ "trig_disable", "<trig-id>", "disables a particular trigger",
wrtd_cmd_trig_disable },
{ "trig_stats", "", "shows per-trigger statistics",
wrtd_cmd_trig_stats },
{ "trig_delay", "<trig-id> <number>", "sets the delay in pico-seconds for a particular trigger ",
wrtd_cmd_trig_delay },
{ "trig_cond_delay", "<trig-id> <number>", "sets the delay in pico-seconds for a particular trigger condition",
wrtd_cmd_trig_cond_delay },
{ "trig_find", "<trig-id>", "retrieves a trigger entry based on its ID",
wrtd_cmd_trig_find },
{ NULL }
};
static void dump_output_state(struct wrtd_output_state *state, struct wr_timestamp current)
{
char tmp[1024], tmp2[1024], tmp3[1024];
......@@ -572,10 +480,77 @@ static int wrtd_cmd_trig_find(struct wrtd_node *wrtd, int output,
return 0;
}
static int wrtd_cmd_time(struct wrtd_node *wrtd, int output,
int argc, char *argv[])
{
int ret;
struct wr_timestamp ts;
char tmp[128];
ret = wrtd_out_base_time(wrtd, &ts);
if (ret)
return -1;
format_ts(tmp, ts, 1);
printf ("TAI: %s\n", tmp);
return 0;
}
static struct wrtd_commands cmds[] = {
{ "state", "", "shows output state",
wrtd_cmd_state },
{ "assign", "<trig-id> [<trig-id>]", "assigns a trigger (see Trigger ID)",
wrtd_cmd_trig_assign },
{ "unassign", "<trig-id>", "un-assigns a given trigger",
wrtd_cmd_trig_unassign },
{ "show", "", "shows assigned triggers",
wrtd_cmd_show },
{ "time", "", "display TAI from the card",
wrtd_cmd_time },
{ "enable", "", "enables an output",
wrtd_cmd_enable },
{ "disable", "", "disables an output",
wrtd_cmd_disable },
{ "arm", "", "arms an output",
wrtd_cmd_arm },
{ "disarm", "", "disarm an output",
wrtd_cmd_disarm },
{ "mode", "<mode>", "set output mode output (see Trigger Modes)",
wrtd_cmd_mode },
{ "dead_time", "<number>", "set output dead time in pico-seconds",
wrtd_cmd_dead_time },
{ "reset_counters", "", "reset statistic counters",
wrtd_cmd_reset_counters },
{ "reset_global_counters", "", "reset global statistic counters",
wrtd_cmd_reset_global_counters },
{ "log_level", "<level>", "set log level (see Log Levels)",
wrtd_cmd_log_level },
{ "pulse_width", "<number>", "sets the output pulse width in pico-seconds",
wrtd_cmd_pulse_width },
{ "sw_trig", "", "forces a software trigger",
wrtd_cmd_software_trigger },
{ "has_trig", "", "return true it as a trigger assigned",
wrtd_cmq_has_trig},
{ "trig_enable", "<trig-id>", "enables a particular trigger",
wrtd_cmd_trig_enable },
{ "trig_disable", "<trig-id>", "disables a particular trigger",
wrtd_cmd_trig_disable },
{ "trig_stats", "", "shows per-trigger statistics",
wrtd_cmd_trig_stats },
{ "trig_delay", "<trig-id> <number>", "sets the delay in pico-seconds for a particular trigger ",
wrtd_cmd_trig_delay },
{ "trig_cond_delay", "<trig-id> <number>", "sets the delay in pico-seconds for a particular trigger condition",
wrtd_cmd_trig_cond_delay },
{ "trig_find", "<trig-id>", "retrieves a trigger entry based on its ID",
wrtd_cmd_trig_find },
{ NULL }
};
static void help()
{
fprintf(stderr, "\n\n");
fprintf(stderr, "wrtd-out-config -D 0x<hex-number> -C <string> -c <number> [cmd-options]\n\n");
fprintf(stderr, "wrtd-out-config -D DEVICE -c CHANNEL -C COMMAND [cmd-options]\n\n");
fprintf(stderr, "It configures an output channel on a White Rabbit Trigger-Distribution node\n\n");
fprintf(stderr, "-D\tdevice id\n");
fprintf(stderr, "-C\tcommand name (see Available commands)\n");
......@@ -597,6 +572,7 @@ static void help()
int main(int argc, char *argv[])
{
struct wrtd_node *wrtd;
char *endptr;
uint32_t dev_id = 0;
char *cmd = NULL, c;
int err = 0, i, chan = -1;
......@@ -608,7 +584,9 @@ int main(int argc, char *argv[])
help();
break;
case 'D':
sscanf(optarg, "0x%x", &dev_id);
dev_id = strtoul(optarg, &endptr, 0);
if (*endptr != 0)
dev_id = 0;
break;
case 'c':
sscanf(optarg, "%d", &chan);
......@@ -653,22 +631,23 @@ int main(int argc, char *argv[])
}
for (i = 0; cmds[i].handler; i++) {
if(!strcmp(cmds[i].name, cmd)) {
err = cmds[i].handler(wrtd, chan, argc - optind,
argv + optind);
break;
}
}
if(!cmds[i].handler)
{
fprintf(stderr,"Unrecognized command: '%s'\n", cmd);
exit(1);
}
if (err)
fprintf(stderr, "Error while executing command '%s': %s\n",
cmd, wrtd_strerror(errno));
if(!strcmp(cmds[i].name, cmd))
break;
}
if (cmds[i].handler == NULL) {
fprintf(stderr, "unknown command '%s', try -h\n", cmd);
exit(1);
}
else {
err = cmds[i].handler(wrtd, chan, argc - optind,
argv + optind);
if (err) {
fprintf(stderr,
"Error while executing command '%s': %s\n",
cmd, wrtd_strerror(errno));
}
}
out:
wrtd_close(wrtd);
......
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