snd_ctl_elem_value_alloca(&ctl);
snd_ctl_elem_id_alloca(&id);
snd_ctl_elem_id_set_name(id, ctl_name);
- snd_ctl_elem_id_set_numid(id, 0);
- snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
- snd_ctl_elem_id_set_device(id, 0);
- snd_ctl_elem_id_set_subdevice(id, 0);
+ snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER);
snd_ctl_elem_id_set_index(id, 0);
snd_ctl_elem_value_set_id(ctl, id);
snd_ctl_elem_value_set_integer(ctl, 0, val);
return;
}
if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
- fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
- return;
+ snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
+ snd_ctl_elem_value_set_id(ctl, id);
+ if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
+ fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
+ snd_ctl_close(handle);
+ return;
+ }
}
snd_ctl_close(handle);
}
snd_ctl_elem_value_alloca(&ctl);
snd_ctl_elem_id_alloca(&id);
snd_ctl_elem_id_set_name(id, ctl_name);
- snd_ctl_elem_id_set_numid(id, 0);
- snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
- snd_ctl_elem_id_set_device(id, 0);
- snd_ctl_elem_id_set_subdevice(id, 0);
+ snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER);
snd_ctl_elem_id_set_index(id, 0);
snd_ctl_elem_value_set_id(ctl, id);
snd_ctl_elem_value_set_integer(ctl, 0, val);
return;
}
if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
- fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
- return;
+ snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
+ snd_ctl_elem_value_set_id(ctl, id);
+ if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
+ fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
+ snd_ctl_close(handle);
+ return;
+ }
}
snd_ctl_close(handle);
}
snd_ctl_elem_value_alloca(&ctl);
snd_ctl_elem_id_alloca(&id);
snd_ctl_elem_id_set_name(id, "Sample Clock Source");
- snd_ctl_elem_id_set_numid(id, 0);
- snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_PCM);
- snd_ctl_elem_id_set_device(id, 0);
- snd_ctl_elem_id_set_subdevice(id, 0);
+ snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER);
snd_ctl_elem_id_set_index(id, 0);
snd_ctl_elem_value_set_id(ctl, id);
snd_ctl_elem_value_set_enumerated(ctl, 0, src);
return;
}
if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
- fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
- return;
- }
+ snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_PCM);
+ snd_ctl_elem_value_set_id(ctl, id);
+ if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
+ fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
+ snd_ctl_close(handle);
+ return;
+ }
+ }
snd_ctl_close(handle);
}
snd_ctl_elem_value_alloca(&ctl);
snd_ctl_elem_id_alloca(&id);
snd_ctl_elem_id_set_name(id, "AD Gain");
- snd_ctl_elem_id_set_numid(id, 0);
- snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
- snd_ctl_elem_id_set_device(id, 0);
- snd_ctl_elem_id_set_subdevice(id, 0);
+ snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER);
snd_ctl_elem_id_set_index(id, 0);
snd_ctl_elem_value_set_id(ctl, id);
snd_ctl_elem_value_set_enumerated(ctl, 0, gain);
return;
}
if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
- fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
- return;
+ snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
+ snd_ctl_elem_value_set_id(ctl, id);
+ if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
+ fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
+ snd_ctl_close(handle);
+ return;
+ }
}
snd_ctl_close(handle);
}
snd_ctl_elem_value_alloca(&ctl);
snd_ctl_elem_id_alloca(&id);
snd_ctl_elem_id_set_name(id, "DA Gain");
- snd_ctl_elem_id_set_numid(id, 0);
- snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
- snd_ctl_elem_id_set_device(id, 0);
- snd_ctl_elem_id_set_subdevice(id, 0);
+ snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER);
snd_ctl_elem_id_set_index(id, 0);
snd_ctl_elem_value_set_id(ctl, id);
snd_ctl_elem_value_set_enumerated(ctl, 0, gain);
return;
}
if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
- fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
- return;
+ snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
+ snd_ctl_elem_value_set_id(ctl, id);
+ if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
+ fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
+ snd_ctl_close(handle);
+ return;
+ }
}
snd_ctl_close(handle);
}
snd_ctl_elem_value_alloca(&ctl);
snd_ctl_elem_id_alloca(&id);
snd_ctl_elem_id_set_name(id, "Phones Gain");
- snd_ctl_elem_id_set_numid(id, 0);
- snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
- snd_ctl_elem_id_set_device(id, 0);
- snd_ctl_elem_id_set_subdevice(id, 0);
+ snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER);
snd_ctl_elem_id_set_index(id, 0);
snd_ctl_elem_value_set_id(ctl, id);
snd_ctl_elem_value_set_enumerated(ctl, 0, gain);
return;
}
if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
- fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
- return;
+ snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
+ snd_ctl_elem_value_set_id(ctl, id);
+ if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
+ fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
+ snd_ctl_close(handle);
+ return;
+ }
}
snd_ctl_close(handle);
}
snd_ctl_elem_value_alloca(&ctl);
snd_ctl_elem_id_alloca(&id);
snd_ctl_elem_id_set_name(id, "Preferred Sync Reference");
- snd_ctl_elem_id_set_numid(id, 0);
- snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
- snd_ctl_elem_id_set_device(id, 0);
- snd_ctl_elem_id_set_subdevice(id, 0);
+ snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER);
snd_ctl_elem_id_set_index(id, 0);
snd_ctl_elem_value_set_id(ctl, id);
snd_ctl_elem_value_set_enumerated(ctl, 0, ref);
return;
}
if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
- fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
- return;
+ snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
+ snd_ctl_elem_value_set_id(ctl, id);
+ if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
+ fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
+ snd_ctl_close(handle);
+ return;
+ }
}
snd_ctl_close(handle);
}
snd_ctl_elem_value_alloca(&ctl);
snd_ctl_elem_id_alloca(&id);
snd_ctl_elem_id_set_name(id, "IEC958 Input Connector");
- snd_ctl_elem_id_set_numid(id, 0);
- snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_PCM);
- snd_ctl_elem_id_set_device(id, 0);
- snd_ctl_elem_id_set_subdevice(id, 0);
+ snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER);
snd_ctl_elem_id_set_index(id, 0);
snd_ctl_elem_value_set_id(ctl, id);
snd_ctl_elem_value_set_enumerated(ctl, 0, in);
return;
}
if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
- fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
- return;
+ snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_PCM);
+ snd_ctl_elem_value_set_id(ctl, id);
+ if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
+ fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
+ snd_ctl_close(handle);
+ return;
+ }
}
snd_ctl_close(handle);
}
snd_ctl_elem_value_alloca(&ctl);
snd_ctl_elem_id_alloca(&id);
snd_ctl_elem_id_set_name(id, ctl_name);
- snd_ctl_elem_id_set_numid(id, 0);
- snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
- snd_ctl_elem_id_set_device(id, 0);
- snd_ctl_elem_id_set_subdevice(id, 0);
+ snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_MIXER);
snd_ctl_elem_id_set_index(id, 0);
snd_ctl_elem_value_set_id(ctl, id);
snd_ctl_elem_value_set_integer(ctl, 0, val);
return;
}
if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
- fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
- return;
+ snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
+ snd_ctl_elem_value_set_id(ctl, id);
+ if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
+ fprintf(stderr, "Error accessing ctl interface on card %s\n", card_name);
+ snd_ctl_close(handle);
+ return;
+ }
}
snd_ctl_close(handle);
}
}
snd_ctl_elem_id_set_name(elemid, "System Sample Rate");
- snd_ctl_elem_id_set_numid(elemid, 16);
- snd_ctl_elem_id_set_interface(elemid, SND_CTL_ELEM_IFACE_HWDEP);
- snd_ctl_elem_id_set_device(elemid, 0);
- snd_ctl_elem_id_set_subdevice(elemid, 0);
+ snd_ctl_elem_id_set_interface(elemid, SND_CTL_ELEM_IFACE_MIXER);
snd_ctl_elem_id_set_index(elemid, 0);
snd_ctl_elem_value_set_id(elemval, elemid);
- snd_ctl_elem_read(handle, elemval);
+ if (snd_ctl_elem_read(handle, elemval) < 0) {
+ snd_ctl_elem_id_set_interface(elemid, SND_CTL_ELEM_IFACE_HWDEP);
+ snd_ctl_elem_value_set_id(elemval, elemid);
+ snd_ctl_elem_read(handle, elemval);
+ }
rate = snd_ctl_elem_value_get_integer(elemval, 0);
snd_ctl_close(handle);
return -1;
}
snd_ctl_elem_id_set_name(elemid, "Sample Clock Source");
- snd_ctl_elem_id_set_numid(elemid, 11);
- snd_ctl_elem_id_set_interface(elemid, SND_CTL_ELEM_IFACE_PCM);
- snd_ctl_elem_id_set_device(elemid, 0);
- snd_ctl_elem_id_set_subdevice(elemid, 0);
+ snd_ctl_elem_id_set_interface(elemid, SND_CTL_ELEM_IFACE_MIXER);
snd_ctl_elem_id_set_index(elemid, 0);
snd_ctl_elem_value_set_id(elemval, elemid);
- snd_ctl_elem_read(handle, elemval);
+ if (snd_ctl_elem_read(handle, elemval) < 0) {
+ snd_ctl_elem_id_set_interface(elemid, SND_CTL_ELEM_IFACE_PCM);
+ snd_ctl_elem_value_set_id(elemval, elemid);
+ snd_ctl_elem_read(handle, elemval);
+ }
val = snd_ctl_elem_value_get_enumerated(elemval, 0);
snd_ctl_close(handle);
switch (val) {
snd_ctl_elem_value_alloca(&ctl);
snd_ctl_elem_id_alloca(&id);
snd_ctl_elem_id_set_name(id, "Mixer");
- snd_ctl_elem_id_set_numid(id, 0);
snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
snd_ctl_elem_id_set_device(id, 0);
- snd_ctl_elem_id_set_subdevice(id, 0);
snd_ctl_elem_id_set_index(id, 0);
snd_ctl_elem_value_set_id(ctl, id);
snd_ctl_elem_value_alloca(&ctl);
snd_ctl_elem_id_alloca(&id);
snd_ctl_elem_id_set_name(id, "Mixer");
- snd_ctl_elem_id_set_numid(id, 0);
snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
snd_ctl_elem_id_set_device(id, 0);
- snd_ctl_elem_id_set_subdevice(id, 0);
snd_ctl_elem_id_set_index(id, 0);
snd_ctl_elem_value_set_id(ctl, id);
snd_ctl_elem_value_set_integer(ctl, 2, (int)left_val);
if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
fprintf(stderr, "Alsa error: %s\n", snd_strerror(err));
+ snd_ctl_close(handle);
return;
}
snd_ctl_elem_value_set_integer(ctl, 0, src*cards[current_card]->playbacks_offset+cards[current_card]->channel_map[idx-1]);
snd_ctl_elem_value_set_integer(ctl, 2, (int)right_val);
if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
fprintf(stderr, "Alsa error: %s\n", snd_strerror(err));
+ snd_ctl_close(handle);
return;
}
snd_ctl_close(handle);