Module Name: src
Committed By: isaki
Date: Sat Aug 24 04:04:10 UTC 2019
Modified Files:
src/usr.bin/audiocfg: audiodev.c audiodev.h main.c
Log Message:
Revert to use single descriptor for "audiocfg test" as before.
To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/usr.bin/audiocfg/audiodev.c
cvs rdiff -u -r1.6 -r1.7 src/usr.bin/audiocfg/audiodev.h
cvs rdiff -u -r1.10 -r1.11 src/usr.bin/audiocfg/main.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.bin/audiocfg/audiodev.c
diff -u src/usr.bin/audiocfg/audiodev.c:1.8 src/usr.bin/audiocfg/audiodev.c:1.9
--- src/usr.bin/audiocfg/audiodev.c:1.8 Sat Aug 24 03:28:37 2019
+++ src/usr.bin/audiocfg/audiodev.c Sat Aug 24 04:04:10 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: audiodev.c,v 1.8 2019/08/24 03:28:37 isaki Exp $ */
+/* $NetBSD: audiodev.c,v 1.9 2019/08/24 04:04:10 isaki Exp $ */
/*
* Copyright (c) 2010 Jared D. McNeill <[email protected]>
@@ -43,6 +43,9 @@
#include "drvctl.h"
#include "dtmf.h"
+static int audiodev_test_chmask(struct audiodev *, unsigned int,
+ audio_info_t *);
+
static TAILQ_HEAD(audiodevhead, audiodev) audiodevlist =
TAILQ_HEAD_INITIALIZER(audiodevlist);
@@ -298,17 +301,16 @@ audiodev_set_param(struct audiodev *adev
}
int
-audiodev_test(struct audiodev *adev, unsigned int chanmask)
+audiodev_test(struct audiodev *adev)
{
audio_info_t info;
- int16_t *buf;
- size_t buflen;
- off_t off;
- int fd;
- int rv = -1;
+ unsigned int i;
+ int rv;
- fd = open(adev->path, O_WRONLY);
- if (fd == -1) {
+ rv = -1;
+
+ adev->fd = open(adev->path, O_WRONLY);
+ if (adev->fd == -1) {
perror("open");
return -1;
}
@@ -319,19 +321,44 @@ audiodev_test(struct audiodev *adev, uns
info.play.precision = 16;
info.play.encoding = AUDIO_ENCODING_SLINEAR_LE;
info.mode = AUMODE_PLAY;
- if (ioctl(fd, AUDIO_SETINFO, &info) == -1) {
+ if (ioctl(adev->fd, AUDIO_SETINFO, &info) == -1) {
perror("ioctl AUDIO_SETINFO");
- goto abort;
+ goto done;
}
- if (ioctl(fd, AUDIO_GETINFO, &info) == -1) {
+ if (ioctl(adev->fd, AUDIO_GETINFO, &info) == -1) {
perror("ioctl AUDIO_GETINFO");
- goto abort;
+ goto done;
+ }
+
+ for (i = 0; i < adev->hwinfo.play.channels; i++) {
+ printf(" testing channel %u...", i);
+ fflush(stdout);
+ if (audiodev_test_chmask(adev, 1 << i, &info) == -1)
+ goto done;
+ printf(" done\n");
}
- dtmf_new(&buf, &buflen, info.play.sample_rate, 2,
+ rv = 0;
+done:
+ close(adev->fd);
+ return rv;
+}
+
+static int
+audiodev_test_chmask(struct audiodev *adev, unsigned int chanmask,
+ audio_info_t *info)
+{
+ int16_t *buf;
+ size_t buflen;
+ off_t off;
+ int rv;
+
+ rv = -1;
+
+ dtmf_new(&buf, &buflen, info->play.sample_rate, 2,
adev->hwinfo.play.channels, chanmask, 350.0, 440.0);
if (buf == NULL) {
- goto abort;
+ return -1;
}
off = 0;
@@ -339,10 +366,10 @@ audiodev_test(struct audiodev *adev, uns
size_t wlen;
ssize_t ret;
- wlen = info.play.buffer_size;
+ wlen = info->play.buffer_size;
if (wlen > buflen)
wlen = buflen;
- ret = write(fd, (char *)buf + off, wlen);
+ ret = write(adev->fd, (char *)buf + off, wlen);
if (ret == -1) {
perror("write");
goto done;
@@ -352,7 +379,7 @@ audiodev_test(struct audiodev *adev, uns
buflen -= wlen;
}
- if (ioctl(fd, AUDIO_DRAIN) == -1) {
+ if (ioctl(adev->fd, AUDIO_DRAIN) == -1) {
perror("ioctl AUDIO_DRAIN");
goto done;
}
@@ -360,8 +387,5 @@ audiodev_test(struct audiodev *adev, uns
rv = 0;
done:
free(buf);
-abort:
- close(fd);
-
return rv;
}
Index: src/usr.bin/audiocfg/audiodev.h
diff -u src/usr.bin/audiocfg/audiodev.h:1.6 src/usr.bin/audiocfg/audiodev.h:1.7
--- src/usr.bin/audiocfg/audiodev.h:1.6 Sat Aug 24 03:28:37 2019
+++ src/usr.bin/audiocfg/audiodev.h Sat Aug 24 04:04:10 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: audiodev.h,v 1.6 2019/08/24 03:28:37 isaki Exp $ */
+/* $NetBSD: audiodev.h,v 1.7 2019/08/24 04:04:10 isaki Exp $ */
/*
* Copyright (c) 2010 Jared D. McNeill <[email protected]>
@@ -46,6 +46,7 @@ struct audiodev {
uint16_t unit;
char path[PATH_MAX+1];
char ctlpath[PATH_MAX+1];
+ int fd;
int ctlfd;
dev_t dev;
@@ -65,7 +66,7 @@ int audiodev_set_default(struct audiod
int audiodev_set_param(struct audiodev *, int,
const char *, unsigned int, unsigned int,
unsigned int);
-int audiodev_test(struct audiodev *, unsigned int);
+int audiodev_test(struct audiodev *);
extern const char * encoding_names[];
extern u_int encoding_max;
Index: src/usr.bin/audiocfg/main.c
diff -u src/usr.bin/audiocfg/main.c:1.10 src/usr.bin/audiocfg/main.c:1.11
--- src/usr.bin/audiocfg/main.c:1.10 Sat Aug 24 03:28:37 2019
+++ src/usr.bin/audiocfg/main.c Sat Aug 24 04:04:10 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: main.c,v 1.10 2019/08/24 03:28:37 isaki Exp $ */
+/* $NetBSD: main.c,v 1.11 2019/08/24 04:04:10 isaki Exp $ */
/*
* Copyright (c) 2010 Jared D. McNeill <[email protected]>
@@ -253,13 +253,8 @@ main(int argc, char *argv[])
return EXIT_FAILURE;
}
print_audiodev(adev, i);
- for (i = 0; i < adev->hwinfo.play.channels; i++) {
- printf(" testing channel %d...", i);
- fflush(stdout);
- if (audiodev_test(adev, 1 << i) == -1)
- return EXIT_FAILURE;
- printf(" done\n");
- }
+ if (audiodev_test(adev) == -1)
+ return EXIT_FAILURE;
} else
usage(argv[0]);
/* NOTREACHED */