Completed conf. Better name for snd_card_get_index. Cleaned card access

This commit is contained in:
Abramo Bagnara 2000-08-25 14:33:53 +00:00
parent 845d917797
commit b5576ef229
10 changed files with 144 additions and 89 deletions

View file

@ -36,17 +36,19 @@ int snd_card_load(int card)
{
int open_dev;
char control[32];
char aload[32];
sprintf(control, SND_FILE_CONTROL, card);
sprintf(aload, SND_FILE_LOAD, card);
if ((open_dev=open(control, O_RDONLY)) < 0) {
close(open(aload, O_RDONLY));
} else {
close (open_dev);
char aload[32];
sprintf(aload, SND_FILE_LOAD, card);
open_dev = open(aload, O_RDONLY);
}
return 0;
if (open_dev >= 0) {
close (open_dev);
return 0;
}
return open_dev;
}
int snd_cards(void)
@ -70,50 +72,39 @@ int snd_cards(void)
unsigned int snd_cards_mask(void)
{
int fd, idx;
int idx;
unsigned int mask;
char filename[32];
static unsigned int save_mask = 0;
if (save_mask)
return save_mask;
for (idx = 0, mask = 0; idx < SND_CARDS; idx++) {
snd_card_load(idx);
sprintf(filename, SND_FILE_CONTROL, idx);
if ((fd = open(filename, O_RDWR)) < 0) {
snd_card_load(idx);
if ((fd = open(filename, O_RDWR)) < 0)
continue;
}
close(fd);
mask |= 1 << idx;
if (snd_card_load(idx) >= 0)
mask |= 1 << idx;
}
save_mask = mask;
return mask;
}
int snd_card_name(const char *string)
int snd_card_get_index(const char *string)
{
int card, bitmask;
int card;
snd_ctl_t *handle;
struct snd_ctl_hw_info info;
snd_ctl_hw_info_t info;
if (!string || *string == '\0')
return -EINVAL;
bitmask = snd_cards_mask();
if (!bitmask)
return -ENODEV;
if ((isdigit(*string) && *(string + 1) == 0) ||
(isdigit(*string) && isdigit(*(string + 1)) && *(string + 2) == 0)) {
sscanf(string, "%i", &card);
if (card < 0 || card > 31)
return -EINVAL;
if (card < 0 || !((1 << card) & bitmask))
return -EINVAL;
return card;
if (snd_card_load(card) >= 0)
return card;
return -EINVAL;
}
for (card = 0; card < 32; card++) {
if (!((1 << card) & bitmask))
if (snd_card_load(card) < 0)
continue;
if (snd_ctl_open(&handle, card) < 0)
continue;
@ -131,7 +122,7 @@ int snd_card_name(const char *string)
int snd_card_get_name(int card, char **name)
{
snd_ctl_t *handle;
struct snd_ctl_hw_info info;
snd_ctl_hw_info_t info;
int err;
if (name == NULL)
@ -152,7 +143,7 @@ int snd_card_get_name(int card, char **name)
int snd_card_get_longname(int card, char **name)
{
snd_ctl_t *handle;
struct snd_ctl_hw_info info;
snd_ctl_hw_info_t info;
int err;
if (name == NULL)

View file

@ -84,7 +84,7 @@ int snd_ctl_file_descriptor(snd_ctl_t *handle)
return handle->fd;
}
int snd_ctl_hw_info(snd_ctl_t *handle, struct snd_ctl_hw_info *info)
int snd_ctl_hw_info(snd_ctl_t *handle, snd_ctl_hw_info_t *info)
{
assert(handle && info);
if (ioctl(handle->fd, SND_CTL_IOCTL_HW_INFO, info) < 0)

View file

@ -31,7 +31,7 @@ static int defaults_card(const char *env)
e = getenv(env);
if (!e)
return -ENOENT;
return snd_card_name(e);
return snd_card_get_index(e);
}
static int defaults_device(const char *env)