third_party_alsa-lib/test/control.c
xuxuehai 582d7b6130 commit msg
Signed-off-by: xuxuehai <xuxuehai2@huawei.com>
2024-05-16 17:35:05 +08:00

108 lines
4.1 KiB
C

#include "config.h"
#include <stdio.h>
#include <string.h>
#include "../include/asoundlib.h"
int main(void)
{
int idx, dev, err;
snd_ctl_t *handle;
snd_ctl_card_info_t *info;
snd_pcm_info_t *pcminfo;
snd_rawmidi_info_t *rawmidiinfo;
char str[128];
snd_ctl_card_info_alloca(&info);
snd_pcm_info_alloca(&pcminfo);
snd_rawmidi_info_alloca(&rawmidiinfo);
idx = -1;
while (1) {
if ((err = snd_card_next(&idx)) < 0) {
printf("Card next error: %s\n", snd_strerror(err));
break;
}
if (idx < 0)
break;
sprintf(str, "hw:CARD=%i", idx);
if ((err = snd_ctl_open(&handle, str, 0)) < 0) {
printf("Open error: %s\n", snd_strerror(err));
continue;
}
if ((err = snd_ctl_card_info(handle, info)) < 0) {
printf("HW info error: %s\n", snd_strerror(err));
continue;
}
printf("Soundcard #%i:\n", idx + 1);
printf(" card - %i\n", snd_ctl_card_info_get_card(info));
printf(" id - '%s'\n", snd_ctl_card_info_get_id(info));
printf(" driver - '%s'\n", snd_ctl_card_info_get_driver(info));
printf(" name - '%s'\n", snd_ctl_card_info_get_name(info));
printf(" longname - '%s'\n", snd_ctl_card_info_get_longname(info));
printf(" mixername - '%s'\n", snd_ctl_card_info_get_mixername(info));
printf(" components - '%s'\n", snd_ctl_card_info_get_components(info));
dev = -1;
while (1) {
snd_pcm_sync_id_t sync;
if ((err = snd_ctl_pcm_next_device(handle, &dev)) < 0) {
printf(" PCM next device error: %s\n", snd_strerror(err));
break;
}
if (dev < 0)
break;
snd_pcm_info_set_device(pcminfo, dev);
snd_pcm_info_set_subdevice(pcminfo, 0);
snd_pcm_info_set_stream(pcminfo, SND_PCM_STREAM_PLAYBACK);
if ((err = snd_ctl_pcm_info(handle, pcminfo)) < 0) {
printf(" PCM info error: %s\n", snd_strerror(err));
continue;
}
printf("PCM info, device #%i:\n", dev);
printf(" device - %i\n", snd_pcm_info_get_device(pcminfo));
printf(" subdevice - %i\n", snd_pcm_info_get_subdevice(pcminfo));
printf(" stream - %i\n", snd_pcm_info_get_stream(pcminfo));
printf(" card - %i\n", snd_pcm_info_get_card(pcminfo));
printf(" id - '%s'\n", snd_pcm_info_get_id(pcminfo));
printf(" name - '%s'\n", snd_pcm_info_get_name(pcminfo));
printf(" subdevice name - '%s'\n", snd_pcm_info_get_subdevice_name(pcminfo));
printf(" class - 0x%x\n", snd_pcm_info_get_class(pcminfo));
printf(" subclass - 0x%x\n", snd_pcm_info_get_subclass(pcminfo));
printf(" subdevices count - %i\n", snd_pcm_info_get_subdevices_count(pcminfo));
printf(" subdevices avail - %i\n", snd_pcm_info_get_subdevices_avail(pcminfo));
sync = snd_pcm_info_get_sync(pcminfo);
printf(" sync - 0x%x,0x%x,0x%x,0x%x\n", sync.id32[0], sync.id32[1], sync.id32[2], sync.id32[3]);
}
dev = -1;
while (1) {
if ((err = snd_ctl_rawmidi_next_device(handle, &dev)) < 0) {
printf(" RAWMIDI next device error: %s\n", snd_strerror(err));
break;
}
if (dev < 0)
break;
snd_rawmidi_info_set_device(rawmidiinfo, dev);
snd_rawmidi_info_set_subdevice(rawmidiinfo, 0);
snd_rawmidi_info_set_stream(rawmidiinfo, SND_RAWMIDI_STREAM_OUTPUT);
if ((err = snd_ctl_rawmidi_info(handle, rawmidiinfo)) < 0) {
printf(" RAWMIDI info error: %s\n", snd_strerror(err));
continue;
}
printf("RAWMIDI info, device #%i:\n", dev);
printf(" device - %i\n", snd_rawmidi_info_get_device(rawmidiinfo));
printf(" subdevice - %i\n", snd_rawmidi_info_get_subdevice(rawmidiinfo));
printf(" stream - %i\n", snd_rawmidi_info_get_stream(rawmidiinfo));
printf(" card - %i\n", snd_rawmidi_info_get_card(rawmidiinfo));
printf(" flags - 0x%x\n", snd_rawmidi_info_get_flags(rawmidiinfo));
printf(" id - '%s'\n", snd_rawmidi_info_get_id(rawmidiinfo));
printf(" name - '%s'\n", snd_rawmidi_info_get_name(rawmidiinfo));
printf(" subname - '%s'\n", snd_rawmidi_info_get_subdevice_name(rawmidiinfo));
printf(" subdevices count - %i\n", snd_rawmidi_info_get_subdevices_count(rawmidiinfo));
printf(" subdevices avail - %i\n", snd_rawmidi_info_get_subdevices_avail(rawmidiinfo));
}
snd_ctl_close(handle);
}
snd_config_update_free_global();
return 0;
}