version 1.44, 2022/12/26 19:16:00 |
version 1.45, 2023/01/08 06:58:07 |
|
|
#define STR 2 |
#define STR 2 |
#define ENC 3 |
#define ENC 3 |
int type; |
int type; |
|
int show; |
int set; |
int set; |
} fields[] = { |
} fields[] = { |
{"name", &rname.name, NULL, STR}, |
{"name", &rname.name, NULL, STR}, |
|
|
}; |
}; |
|
|
const char usagestr[] = |
const char usagestr[] = |
"usage: audioctl [-f file]\n" |
"usage: audioctl [-f file] [-w wait_sec]\n" |
" audioctl [-n] [-f file] name ...\n" |
" audioctl [-n] [-f file] [-w wait_sec] name ...\n" |
" audioctl [-nq] [-f file] name=value ...\n"; |
" audioctl [-nq] [-f file] name=value ...\n"; |
|
|
int fd, show_names = 1, quiet = 0; |
int fd, show_names = 1, quiet = 0, wait_sec = 0; |
|
|
/* |
/* |
* parse encoding string (examples: s8, u8, s16, s16le, s24be ...) |
* parse encoding string (examples: s8, u8, s16, s16le, s24be ...) |
|
|
char *lhs, *rhs; |
char *lhs, *rhs; |
int set = 0; |
int set = 0; |
|
|
if (ioctl(fd, AUDIO_GETSTATUS, &rstatus) == -1) |
|
err(1, "AUDIO_GETSTATUS"); |
|
if (ioctl(fd, AUDIO_GETDEV, &rname) == -1) |
|
err(1, "AUDIO_GETDEV"); |
|
if (ioctl(fd, AUDIO_GETPAR, &rpar) == -1) |
|
err(1, "AUDIO_GETPAR"); |
|
if (ioctl(fd, AUDIO_GETPOS, &rpos) == -1) |
|
err(1, "AUDIO_GETPOS"); |
|
if (argc == 0) { |
if (argc == 0) { |
for (f = fields; f->name != NULL; f++) { |
for (f = fields; f->name != NULL; f++) |
printf("%s=", f->name); |
f->show = 1; |
print_field(f, f->raddr); |
|
printf("\n"); |
|
} |
|
} |
} |
AUDIO_INITPAR(&wpar); |
AUDIO_INITPAR(&wpar); |
for (; argc > 0; argc--, argv++) { |
for (; argc > 0; argc--, argv++) { |
|
|
parse_field(f, f->waddr, rhs); |
parse_field(f, f->waddr, rhs); |
f->set = 1; |
f->set = 1; |
set = 1; |
set = 1; |
} else { |
} else |
|
f->show = 1; |
|
} |
|
|
|
if (set && wait_sec) |
|
errx(1, "Can't set variables wait_secically"); |
|
|
|
while (1) { |
|
if (ioctl(fd, AUDIO_GETSTATUS, &rstatus) == -1) |
|
err(1, "AUDIO_GETSTATUS"); |
|
if (ioctl(fd, AUDIO_GETDEV, &rname) == -1) |
|
err(1, "AUDIO_GETDEV"); |
|
if (ioctl(fd, AUDIO_GETPAR, &rpar) == -1) |
|
err(1, "AUDIO_GETPAR"); |
|
if (ioctl(fd, AUDIO_GETPOS, &rpos) == -1) |
|
err(1, "AUDIO_GETPOS"); |
|
for (f = fields; f->name != NULL; f++) { |
|
if (!f->show) |
|
continue; |
if (show_names) |
if (show_names) |
printf("%s=", f->name); |
printf("%s=", f->name); |
print_field(f, f->raddr); |
print_field(f, f->raddr); |
printf("\n"); |
printf("\n"); |
} |
} |
|
|
|
if (wait_sec == 0) |
|
break; |
|
|
|
/* ioctls are fast, we neglect drift from real-time clock */ |
|
sleep(wait_sec); |
} |
} |
|
|
if (!set) |
if (!set) |
return; |
return; |
|
|
if (ioctl(fd, AUDIO_SETPAR, &wpar) == -1) |
if (ioctl(fd, AUDIO_SETPAR, &wpar) == -1) |
err(1, "AUDIO_SETPAR"); |
err(1, "AUDIO_SETPAR"); |
if (ioctl(fd, AUDIO_GETPAR, &wpar) == -1) |
if (ioctl(fd, AUDIO_GETPAR, &wpar) == -1) |
|
|
main(int argc, char **argv) |
main(int argc, char **argv) |
{ |
{ |
char *path = "/dev/audioctl0"; |
char *path = "/dev/audioctl0"; |
|
const char *errstr; |
int c; |
int c; |
|
|
while ((c = getopt(argc, argv, "anf:q")) != -1) { |
while ((c = getopt(argc, argv, "anf:qw:")) != -1) { |
switch (c) { |
switch (c) { |
case 'a': /* ignored, compat */ |
case 'a': /* ignored, compat */ |
break; |
break; |
|
|
break; |
break; |
case 'q': |
case 'q': |
quiet = 1; |
quiet = 1; |
|
break; |
|
case 'w': |
|
wait_sec = strtonum(optarg, 1, INT_MAX, &errstr); |
|
if (errstr != NULL) |
|
errx(1, "wait is %s: %s", errstr, optarg); |
break; |
break; |
default: |
default: |
fputs(usagestr, stderr); |
fputs(usagestr, stderr); |