Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/netbsd-9]: src/usr.bin/audiocfg Pull up following revision(s) (requested...



details:   https://anonhg.NetBSD.org/src/rev/e20976d20d08
branches:  netbsd-9
changeset: 458423:e20976d20d08
user:      martin <martin%NetBSD.org@localhost>
date:      Sat Sep 28 07:41:18 2019 +0000

description:
Pull up following revision(s) (requested by isaki in ticket #262):

        usr.bin/audiocfg/main.c: revision 1.10
        usr.bin/audiocfg/main.c: revision 1.11
        usr.bin/audiocfg/audiodev.c: revision 1.8
        usr.bin/audiocfg/audiodev.h: revision 1.6
        usr.bin/audiocfg/audiodev.c: revision 1.9
        usr.bin/audiocfg/audiodev.h: revision 1.7

Rename some members in adev for clarity.  No functional changes intended.

Revert to use single descriptor for "audiocfg test" as before.

diffstat:

 usr.bin/audiocfg/audiodev.c |  98 ++++++++++++++++++++++++++++----------------
 usr.bin/audiocfg/audiodev.h |   9 ++-
 usr.bin/audiocfg/main.c     |  27 +++++------
 3 files changed, 79 insertions(+), 55 deletions(-)

diffs (300 lines):

diff -r dff4d9b6d820 -r e20976d20d08 usr.bin/audiocfg/audiodev.c
--- a/usr.bin/audiocfg/audiodev.c       Sat Sep 28 07:34:50 2019 +0000
+++ b/usr.bin/audiocfg/audiodev.c       Sat Sep 28 07:41:18 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: audiodev.c,v 1.7 2019/05/08 14:36:12 isaki Exp $ */
+/* $NetBSD: audiodev.c,v 1.7.2.1 2019/09/28 07:41:18 martin Exp $ */
 
 /*
  * Copyright (c) 2010 Jared D. McNeill <jmcneill%invisible.ca@localhost>
@@ -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);
 
@@ -63,26 +66,26 @@
        if (stat(_PATH_AUDIOCTL, &st) != -1 && st.st_rdev == adev->dev)
                adev->defaultdev = true;
 
-       adev->fd = open(adev->ctlpath, O_RDONLY);
-       if (adev->fd == -1) {
+       adev->ctlfd = open(adev->ctlpath, O_RDONLY);
+       if (adev->ctlfd == -1) {
                        return -1;
        }
-       if (ioctl(adev->fd, AUDIO_GETDEV, &adev->audio_device) == -1) {
-               close(adev->fd);
+       if (ioctl(adev->ctlfd, AUDIO_GETDEV, &adev->audio_device) == -1) {
+               close(adev->ctlfd);
                return -1;
        }
 
        for (i = 0; ;i++) {
                memset(&query, 0, sizeof(query));
                query.index = i;
-               if (ioctl(adev->fd, AUDIO_QUERYFORMAT, &query) == -1) {
+               if (ioctl(adev->ctlfd, AUDIO_QUERYFORMAT, &query) == -1) {
                        if (errno == ENODEV) {
                                /* QUERYFORMAT not supported. */
                                break;
                        }
                        if (errno == EINVAL)
                                break;
-                       close(adev->fd);
+                       close(adev->ctlfd);
                        return -1;
                }
 
@@ -91,8 +94,8 @@
                TAILQ_INSERT_TAIL(&adev->formats, f, next);
        }
 
-       if (ioctl(adev->fd, AUDIO_GETFORMAT, &adev->info) == -1) {
-               close(adev->fd);
+       if (ioctl(adev->ctlfd, AUDIO_GETFORMAT, &adev->hwinfo) == -1) {
+               close(adev->ctlfd);
                return -1;
        }
 
@@ -158,8 +161,8 @@
 
        while (!TAILQ_EMPTY(&audiodevlist)) {
                adev = TAILQ_FIRST(&audiodevlist);
-               if (adev->fd != -1)
-                       close(adev->fd);
+               if (adev->ctlfd != -1)
+                       close(adev->ctlfd);
                TAILQ_REMOVE(&audiodevlist, adev, next);
                free(adev);
        }
@@ -250,12 +253,12 @@
 audiodev_set_param(struct audiodev *adev, int mode,
        const char *encname, unsigned int prec, unsigned int ch, unsigned int freq)
 {
-       struct audio_info ai;
+       audio_info_t ai;
        int setmode;
        u_int enc;
 
        setmode = 0;
-       ai = adev->info;
+       ai = adev->hwinfo;
 
        for (enc = 0; enc < encoding_max; enc++) {
                if (strcmp(encname, encoding_names[enc]) == 0)
@@ -290,7 +293,7 @@
        ai.mode = setmode;
        printf("setting %s to %s:%u, %uch, %uHz\n",
            adev->xname, encname, prec, ch, freq);
-       if (ioctl(adev->fd, AUDIO_SETFORMAT, &ai) == -1) {
+       if (ioctl(adev->ctlfd, AUDIO_SETFORMAT, &ai) == -1) {
                perror("ioctl AUDIO_SETFORMAT");
                return -1;
        }
@@ -298,40 +301,64 @@
 }
 
 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;
        }
 
        AUDIO_INITINFO(&info);
        info.play.sample_rate = AUDIODEV_SAMPLE_RATE;
-       info.play.channels = adev->info.play.channels;
+       info.play.channels = adev->hwinfo.play.channels;
        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(adev->fd, AUDIO_GETINFO, &info) == -1) {
+               perror("ioctl AUDIO_GETINFO");
+               goto done;
        }
-       if (ioctl(fd, AUDIO_GETINFO, &info) == -1) {
-               perror("ioctl AUDIO_GETINFO");
-               goto abort;
+
+       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,
-           adev->info.play.channels, chanmask, 350.0, 440.0);
+       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 @@
                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 @@
                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 @@
        rv = 0;
 done:
        free(buf);
-abort:
-       close(fd);
-
        return rv;
 }
diff -r dff4d9b6d820 -r e20976d20d08 usr.bin/audiocfg/audiodev.h
--- a/usr.bin/audiocfg/audiodev.h       Sat Sep 28 07:34:50 2019 +0000
+++ b/usr.bin/audiocfg/audiodev.h       Sat Sep 28 07:41:18 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: audiodev.h,v 1.5 2019/05/08 14:36:12 isaki Exp $ */
+/* $NetBSD: audiodev.h,v 1.5.2.1 2019/09/28 07:41:18 martin Exp $ */
 
 /*
  * Copyright (c) 2010 Jared D. McNeill <jmcneill%invisible.ca@localhost>
@@ -46,14 +46,15 @@
        uint16_t unit;
        char path[PATH_MAX+1];
        char ctlpath[PATH_MAX+1];
+       int fd;
+       int ctlfd;
 
-       int fd;
        dev_t dev;
        bool defaultdev;
 
        audio_device_t audio_device;
        TAILQ_HEAD(, audiofmt) formats;
-       struct audio_info info;
+       audio_info_t hwinfo;
 
        TAILQ_ENTRY(audiodev) next;
 };
@@ -65,7 +66,7 @@
 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;
diff -r dff4d9b6d820 -r e20976d20d08 usr.bin/audiocfg/main.c
--- a/usr.bin/audiocfg/main.c   Sat Sep 28 07:34:50 2019 +0000
+++ b/usr.bin/audiocfg/main.c   Sat Sep 28 07:41:18 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: main.c,v 1.8.2.1 2019/09/28 07:25:53 martin Exp $ */
+/* $NetBSD: main.c,v 1.8.2.2 2019/09/28 07:41:18 martin Exp $ */
 
 /*
  * Copyright (c) 2010 Jared D. McNeill <jmcneill%invisible.ca@localhost>
@@ -87,17 +87,21 @@
                printf(" %s", adev->audio_device.version);
        printf("\n");
        printf("       playback: ");
-       if ((adev->info.mode & AUMODE_PLAY))
+       if ((adev->hwinfo.mode & AUMODE_PLAY)) {
                printf("%uch, %uHz\n",
-                   adev->info.play.channels, adev->info.play.sample_rate);
-       else
+                   adev->hwinfo.play.channels,
+                   adev->hwinfo.play.sample_rate);
+       } else {
                printf("unavailable\n");
+       }
        printf("       record:   ");
-       if ((adev->info.mode & AUMODE_RECORD))
+       if ((adev->hwinfo.mode & AUMODE_RECORD)) {
                printf("%uch, %uHz\n",
-                   adev->info.record.channels, adev->info.record.sample_rate);
-       else
+                   adev->hwinfo.record.channels,
+                   adev->hwinfo.record.sample_rate);
+       } else {
                printf("unavailable\n");
+       }
 
        TAILQ_FOREACH(f, &adev->formats, next) {
                printf("       ");
@@ -249,13 +253,8 @@
                        return EXIT_FAILURE;
                }
                print_audiodev(adev, i);
-               for (i = 0; i < adev->info.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 */



Home | Main Index | Thread Index | Old Index