xref: /third_party/alsa-lib/test/control.c (revision d5ac70f0)
1#include "config.h"
2#include <stdio.h>
3#include <string.h>
4#include "../include/asoundlib.h"
5
6int main(void)
7{
8	int idx, dev, err;
9	snd_ctl_t *handle;
10	snd_ctl_card_info_t *info;
11	snd_pcm_info_t *pcminfo;
12	snd_rawmidi_info_t *rawmidiinfo;
13	char str[128];
14
15	snd_ctl_card_info_alloca(&info);
16	snd_pcm_info_alloca(&pcminfo);
17	snd_rawmidi_info_alloca(&rawmidiinfo);
18
19	idx = -1;
20	while (1) {
21		if ((err = snd_card_next(&idx)) < 0) {
22			printf("Card next error: %s\n", snd_strerror(err));
23			break;
24		}
25		if (idx < 0)
26			break;
27		sprintf(str, "hw:CARD=%i", idx);
28		if ((err = snd_ctl_open(&handle, str, 0)) < 0) {
29			printf("Open error: %s\n", snd_strerror(err));
30			continue;
31		}
32		if ((err = snd_ctl_card_info(handle, info)) < 0) {
33			printf("HW info error: %s\n", snd_strerror(err));
34			continue;
35		}
36		printf("Soundcard #%i:\n", idx + 1);
37		printf("  card - %i\n", snd_ctl_card_info_get_card(info));
38		printf("  id - '%s'\n", snd_ctl_card_info_get_id(info));
39		printf("  driver - '%s'\n", snd_ctl_card_info_get_driver(info));
40		printf("  name - '%s'\n", snd_ctl_card_info_get_name(info));
41		printf("  longname - '%s'\n", snd_ctl_card_info_get_longname(info));
42		printf("  mixername - '%s'\n", snd_ctl_card_info_get_mixername(info));
43		printf("  components - '%s'\n", snd_ctl_card_info_get_components(info));
44		dev = -1;
45		while (1) {
46			snd_pcm_sync_id_t sync;
47			if ((err = snd_ctl_pcm_next_device(handle, &dev)) < 0) {
48				printf("  PCM next device error: %s\n", snd_strerror(err));
49				break;
50			}
51			if (dev < 0)
52				break;
53			snd_pcm_info_set_device(pcminfo, dev);
54			snd_pcm_info_set_subdevice(pcminfo, 0);
55			snd_pcm_info_set_stream(pcminfo, SND_PCM_STREAM_PLAYBACK);
56			if ((err = snd_ctl_pcm_info(handle, pcminfo)) < 0) {
57				printf("  PCM info error: %s\n", snd_strerror(err));
58				continue;
59			}
60			printf("PCM info, device #%i:\n", dev);
61			printf("  device - %i\n", snd_pcm_info_get_device(pcminfo));
62			printf("  subdevice - %i\n", snd_pcm_info_get_subdevice(pcminfo));
63			printf("  stream - %i\n", snd_pcm_info_get_stream(pcminfo));
64			printf("  card - %i\n", snd_pcm_info_get_card(pcminfo));
65			printf("  id - '%s'\n", snd_pcm_info_get_id(pcminfo));
66			printf("  name - '%s'\n", snd_pcm_info_get_name(pcminfo));
67			printf("  subdevice name - '%s'\n", snd_pcm_info_get_subdevice_name(pcminfo));
68			printf("  class - 0x%x\n", snd_pcm_info_get_class(pcminfo));
69			printf("  subclass - 0x%x\n", snd_pcm_info_get_subclass(pcminfo));
70			printf("  subdevices count - %i\n", snd_pcm_info_get_subdevices_count(pcminfo));
71			printf("  subdevices avail - %i\n", snd_pcm_info_get_subdevices_avail(pcminfo));
72			sync = snd_pcm_info_get_sync(pcminfo);
73			printf("  sync - 0x%x,0x%x,0x%x,0x%x\n", sync.id32[0], sync.id32[1], sync.id32[2], sync.id32[3]);
74		}
75		dev = -1;
76		while (1) {
77			if ((err = snd_ctl_rawmidi_next_device(handle, &dev)) < 0) {
78				printf("  RAWMIDI next device error: %s\n", snd_strerror(err));
79				break;
80			}
81			if (dev < 0)
82				break;
83			snd_rawmidi_info_set_device(rawmidiinfo, dev);
84			snd_rawmidi_info_set_subdevice(rawmidiinfo, 0);
85			snd_rawmidi_info_set_stream(rawmidiinfo, SND_RAWMIDI_STREAM_OUTPUT);
86			if ((err = snd_ctl_rawmidi_info(handle, rawmidiinfo)) < 0) {
87				printf("  RAWMIDI info error: %s\n", snd_strerror(err));
88				continue;
89			}
90			printf("RAWMIDI info, device #%i:\n", dev);
91			printf("  device - %i\n", snd_rawmidi_info_get_device(rawmidiinfo));
92			printf("  subdevice - %i\n", snd_rawmidi_info_get_subdevice(rawmidiinfo));
93			printf("  stream - %i\n", snd_rawmidi_info_get_stream(rawmidiinfo));
94			printf("  card - %i\n", snd_rawmidi_info_get_card(rawmidiinfo));
95			printf("  flags - 0x%x\n", snd_rawmidi_info_get_flags(rawmidiinfo));
96			printf("  id - '%s'\n", snd_rawmidi_info_get_id(rawmidiinfo));
97			printf("  name - '%s'\n", snd_rawmidi_info_get_name(rawmidiinfo));
98			printf("  subname - '%s'\n", snd_rawmidi_info_get_subdevice_name(rawmidiinfo));
99			printf("  subdevices count - %i\n", snd_rawmidi_info_get_subdevices_count(rawmidiinfo));
100			printf("  subdevices avail - %i\n", snd_rawmidi_info_get_subdevices_avail(rawmidiinfo));
101		}
102		snd_ctl_close(handle);
103	}
104
105	snd_config_update_free_global();
106	return 0;
107}
108