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/3810dd4f0855
branches: netbsd-9
changeset: 454802:3810dd4f0855
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 ee99de740173 -r 3810dd4f0855 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 ee99de740173 -r 3810dd4f0855 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 ee99de740173 -r 3810dd4f0855 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