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 <jmcne...@invisible.ca> @@ -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 <jmcne...@invisible.ca> @@ -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 <jmcne...@invisible.ca> @@ -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 */