Commit 78d28cda authored by Jorge Machado's avatar Jorge Machado

Update wr-dio-cmd.c with new commands

parent 6f8ac345
......@@ -126,6 +126,11 @@ static int scan_pulse(int argc, char **argv)
prgname, argv[0], argv[4]);
return -1;
}
if(cmd->t[2].tv_nsec < 1000000)
{
fprintf(stderr, "%s: %s: Frequency is greater than 1 kHz \n",
prgname, argv[0]);
}
if (sscanf(argv[5], "%i%c", &cmd->value, &c) != 1) {
fprintf(stderr, "%s: %s: invalid count \"%s\"\n",
prgname, argv[0], argv[5]);
......@@ -151,16 +156,17 @@ static int scan_stamp(int argc, char **argv, int ismask)
cmd->flags = WR_DIO_F_WAIT;
argc = 2;
}
fprintf(stderr,"scan stamp argc %d\n", argc);
if (argc == 1) {
ismask = 1;
ch = 0x1f;
ch = 0x3f;
} else if (argc == 2) {
if (sscanf(argv[1], "%i%c", &ch, &c) != 1) {
fprintf(stderr, "%s: %s: not a channel \"%s\"\n",
prgname, argv[0], argv[1]);
exit(1);
}
if (ch < 0 || ch > 31 || (!ismask && ch > 4)) {
if (ch < 0 || ch > 31 || (!ismask && ch > 5)) {
fprintf(stderr, "%s: %s: out of range channel \"%s\"\n",
prgname, argv[0], argv[1]);
exit(1);
......@@ -305,6 +311,67 @@ static int scan_inout(int argc, char **argv)
return 0;
}
static int scan_irq(int argc, char **argv)
{
char c;
if (argc != 2 && argc != 4) {
fprintf(stderr, "%s: %s: wrong number of arguments\n",
prgname, argv[0]);
fprintf(stderr, " Use: %s <when> "
"[<period> <count>]\n", argv[0]);
return -1;
}
/* Next argument is the "when", position 0 in ioctl timestamp array */
if (!strcmp(argv[1], "now")) {
cmd->flags |= WR_DIO_F_NOW;
} else {
char *s2 = argv[1];
fprintf(stderr,"IRQ Relative time\n");
if (s2[0] == '+') {
cmd->flags |= WR_DIO_F_REL;
s2++;
}
if (parse_ts(s2, cmd->t) < 0) {
fprintf(stderr, "%s: invalid time \"%s\"\n",
prgname, argv[1]);
return -1;
}
}
/* If argc is 4, we have period and count */
if (argc == 4) {
cmd->flags |= WR_DIO_F_LOOP;
if (parse_ts(argv[2], cmd->t + 1) < 0) {
fprintf(stderr, "%s: %s: invalid time \"%s\"\n",
prgname, argv[0], argv[1]);
return -1;
}
fprintf(stderr, "%lu \n", cmd->t[1].tv_nsec);
if(cmd->t[1].tv_nsec < 1000000)
{
fprintf(stderr, "%s: %s: Frequency is greater than 1 kHz \n",
prgname, argv[0]);
}
if (sscanf(argv[3], "%i%c", &cmd->value, &c) != 1) {
fprintf(stderr, "%s: %s: invalid count \"%s\"\n",
prgname, argv[0], argv[3]);
return -1;
}
}
if (ioctl(fd, PRIV_MEZZANINE_CMD, (unsigned long) cmd) < 0) {
fprintf(stderr, "%s: ioctl(PRIV_MEZZANINE_CMD(%s)): %s\n",
prgname, devname, strerror(errno));
return -1;
}
return 0;
}
static void print_version(char *pname)
{
printf("%s %s\n", pname, git_version);
......@@ -356,6 +423,8 @@ int main(int argc, char **argv)
*
* mode <01234>
* mode <ch> <mode> [...]
*
* irq <seconds>.<fraction> [<period> <count>]
*/
if (!strcmp(argv[0], "pulse")) {
cmd->command = WR_DIO_CMD_PULSE;
......@@ -363,6 +432,7 @@ int main(int argc, char **argv)
exit(1);
} else if (!strcmp(argv[0], "stamp")) {
cmd->command = WR_DIO_CMD_STAMP;
fprintf(stderr,"Calling scan_stamp\n");
if (scan_stamp(argc, argv, 0 /* no mask */) < 0)
exit(1);
} else if (!strcmp(argv[0], "stampm")) {
......@@ -373,6 +443,10 @@ int main(int argc, char **argv)
cmd->command = WR_DIO_CMD_INOUT;
if (scan_inout(argc, argv) < 0)
exit(1);
} else if (!strcmp(argv[0], "irq")) {
cmd->command = WR_DIO_CMD_IRQ;
if (scan_irq(argc, argv) < 0)
exit(1);
} else {
fprintf(stderr, "%s: unknown command \"%s\"\n", prgname,
argv[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