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