snd_config_t *control, *comment, *item, *value;
char *s;
char buf[256];
- int idx, err;
+ unsigned int idx;
+ int err;
memset(&info, 0, sizeof(info));
info.id = *id;
case SND_CONTROL_TYPE_BYTES:
case SND_CONTROL_TYPE_IEC958:
{
- int count = info.type == SND_CONTROL_TYPE_BYTES ?
+ size_t count = info.type == SND_CONTROL_TYPE_BYTES ?
info.values_count : sizeof(snd_aes_iec958_t);
char buf[count * 2 + 1];
char *p = buf;
snd_ctl_hw_info_t info;
snd_config_t *state, *card, *control;
snd_control_list_t list;
- int idx, err;
+ unsigned int idx;
+ int err;
char name[32];
sprintf(name, "hw:%d", cardno);
{ SND_CONTROL_IFACE_TIMER, "timer" },
{ SND_CONTROL_IFACE_SEQUENCER, "sequencer" }
};
- long idx;
+ unsigned long i;
+ unsigned int idx;
char *str;
- switch (snd_config_type(n)) {
+ switch (snd_enum_to_int(snd_config_type(n))) {
case SND_CONFIG_TYPE_INTEGER:
- snd_config_integer_get(n, &idx);
- return idx;
+ snd_config_integer_get(n, &i);
+ return i;
case SND_CONFIG_TYPE_STRING:
snd_config_string_get(n, &str);
break;
{
char *str;
long val;
- switch (snd_config_type(n)) {
+ switch (snd_enum_to_int(snd_config_type(n))) {
case SND_CONFIG_TYPE_INTEGER:
snd_config_integer_get(n, &val);
if (val < 0 || val > 1)
{
char *str;
long val;
- int idx;
- switch (snd_config_type(n)) {
+ unsigned int idx;
+ switch (snd_enum_to_int(snd_config_type(n))) {
case SND_CONFIG_TYPE_INTEGER:
snd_config_integer_get(n, &val);
return val;
snd_control_t ctl;
snd_control_info_t info;
snd_config_iterator_t i;
- int numid;
+ unsigned int numid;
long iface = -1;
long device = -1;
long subdevice = -1;
long index = -1;
snd_config_t *value = NULL;
long val;
- int idx, err;
+ unsigned int idx;
+ int err;
char *set;
if (snd_config_type(control) != SND_CONFIG_TYPE_COMPOUND) {
error("control is not a compound");
if (err >= 0) {
int c1 = 0;
int len = strlen(buf);
- int idx = 0;
+ unsigned int idx = 0;
int count = info.type == SND_CONTROL_TYPE_BYTES ?
info.values_count : sizeof(snd_aes_iec958_t);
if (count * 2 != len) {
};
/* left and right channels for each type */
-static int mixer_elem_chn[][2] = {
+static snd_mixer_channel_id_t mixer_elem_chn[][2] = {
{ SND_MIXER_CHN_FRONT_LEFT, SND_MIXER_CHN_FRONT_RIGHT },
{ SND_MIXER_CHN_REAR_LEFT, SND_MIXER_CHN_REAR_RIGHT },
- { SND_MIXER_CHN_FRONT_CENTER, -1 },
- { SND_MIXER_CHN_WOOFER, -1 },
+ { SND_MIXER_CHN_FRONT_CENTER, SND_MIXER_CHN_UNKNOWN },
+ { SND_MIXER_CHN_WOOFER, SND_MIXER_CHN_UNKNOWN },
};
static snd_mixer_sid_t *mixer_sid = NULL;
}
static int
-mixer_calc_volume(snd_mixer_simple_control_t *scontrol, int vol, int chn)
+mixer_calc_volume(snd_mixer_simple_control_t *scontrol, int vol, snd_mixer_channel_id_t chn)
{
int vol1;
-
vol1 = (vol < 0) ? -vol : vol;
if (vol1 > 0) {
if (vol1 > 100)
if (vol < 0)
vol1 = -vol1;
}
- vol1 += scontrol->volume.values[chn];
+ vol1 += scontrol->volume.values[snd_enum_to_int(chn)];
return CLAMP(vol1, scontrol->min, scontrol->max);
}
{
snd_mixer_simple_control_t scontrol;
int vleft, vright, vbalance;
- int type, chn_left, chn_right;
- int i, err, changed;
+ int type;
+ snd_mixer_channel_id_t chn_left, chn_right, chn;
+ int err, changed;
bzero(&scontrol, sizeof(scontrol));
if (mixer_sid == NULL)
type = mixer_type[elem_index];
chn_left = mixer_elem_chn[type][MIXER_CHN_LEFT];
- if (! (scontrol.channels & (1 << chn_left)))
+ if (! (scontrol.channels & (1 << snd_enum_to_int(chn_left))))
return; /* ..??.. */
chn_right = mixer_elem_chn[type][MIXER_CHN_RIGHT];
- if (chn_right >= 0 && ! (scontrol.channels & (1 << chn_right)))
- chn_right = -1;
+ if (chn_right != SND_MIXER_CHN_UNKNOWN && ! (scontrol.channels & (1 << snd_enum_to_int(chn_right))))
+ chn_right = SND_MIXER_CHN_UNKNOWN;
changed = 0;
mixer_balance_volumes) &&
(scontrol.caps & SND_MIXER_SCTCAP_VOLUME)) {
int mono =
- (chn_right < 0 || (scontrol.caps & SND_MIXER_SCTCAP_JOINTLY_VOLUME));
+ (chn_right == SND_MIXER_CHN_UNKNOWN || (scontrol.caps & SND_MIXER_SCTCAP_JOINTLY_VOLUME));
if (mono && !mixer_volume_delta[MIXER_CHN_LEFT])
mixer_volume_delta[MIXER_CHN_LEFT] = mixer_volume_delta[MIXER_CHN_RIGHT];
vleft = mixer_calc_volume(&scontrol, mixer_volume_delta[MIXER_CHN_LEFT], chn_left);
vright = vleft;
if (vleft >= 0 && vright >= 0) {
if (scontrol.caps & SND_MIXER_SCTCAP_JOINTLY_VOLUME) {
- for (i = 0; i < SND_MIXER_CHN_LAST; i++) {
- if (scontrol.channels & (1 << i))
- scontrol.volume.values[i] = vleft;
+ for (chn = 0; chn < SND_MIXER_CHN_LAST; snd_enum_incr(chn)) {
+ int c = snd_enum_to_int(chn);
+ if (scontrol.channels & (1 << c))
+ scontrol.volume.values[c] = vleft;
}
} else {
if (mixer_balance_volumes)
vleft = vright = vbalance;
- scontrol.volume.values[chn_left] = vleft;
+ scontrol.volume.values[snd_enum_to_int(chn_left)] = vleft;
if (! mono)
- scontrol.volume.values[chn_right] = vright;
+ scontrol.volume.values[snd_enum_to_int(chn_right)] = vright;
}
changed = 1;
}
scontrol.mute = scontrol.mute ? 0 : scontrol.channels;
else {
if (mixer_toggle_mute & MIXER_MASK_LEFT)
- scontrol.mute ^= (1 << chn_left);
- if (chn_right >= 0 && (mixer_toggle_mute & MIXER_MASK_RIGHT))
- scontrol.mute ^= (1 << chn_right);
+ scontrol.mute ^= (1 << snd_enum_to_int(chn_left));
+ if (chn_right != SND_MIXER_CHN_UNKNOWN &&
+ (mixer_toggle_mute & MIXER_MASK_RIGHT))
+ scontrol.mute ^= (1 << snd_enum_to_int(chn_right));
}
changed = 1;
}
scontrol.capture = scontrol.capture ? 0 : scontrol.channels;
else {
if (mixer_toggle_capture & MIXER_MASK_LEFT)
- scontrol.capture ^= (1 << chn_left);
- if (chn_right >= 0 && (mixer_toggle_capture & MIXER_MASK_RIGHT))
- scontrol.capture ^= (1 << chn_right);
+ scontrol.capture ^= (1 << snd_enum_to_int(chn_left));
+ if (chn_right != SND_MIXER_CHN_UNKNOWN && (mixer_toggle_capture & MIXER_MASK_RIGHT))
+ scontrol.capture ^= (1 << snd_enum_to_int(chn_right));
}
changed = 1;
}
int err, dc;
snd_mixer_simple_control_t scontrol;
int vleft, vright;
- int type, chn_left, chn_right;
+ int type;
+ snd_mixer_channel_id_t chn_left, chn_right;
int x, y, i;
+ int c_left, c_right;
/* set new scontrol indices and read info
*/
type = mixer_type[elem_index];
chn_left = mixer_elem_chn[type][MIXER_CHN_LEFT];
- if (! (scontrol.channels & (1 << chn_left)))
+ if (! (scontrol.channels & (1 << snd_enum_to_int(chn_left))))
return; /* ..??.. */
chn_right = mixer_elem_chn[type][MIXER_CHN_RIGHT];
- if (chn_right >= 0 && ! (scontrol.channels & (1 << chn_right)))
- chn_right = -1;
+ if (chn_right != SND_MIXER_CHN_UNKNOWN &&
+ ! (scontrol.channels & (1 << snd_enum_to_int(chn_right))))
+ chn_right = SND_MIXER_CHN_UNKNOWN;
+ c_left = snd_enum_to_int(chn_left);
+ c_right = snd_enum_to_int(chn_right);
/* first, read values for the numbers to be displayed
*/
if ((err = snd_mixer_simple_control_read (mixer_handle, &scontrol)) < 0)
CHECK_ABORT (ERR_FCN, "snd_mixer_simple_control_read()", err);
- vleft = scontrol.volume.values[chn_left];
+ vleft = scontrol.volume.values[c_left];
vleft = mixer_conv(vleft, scontrol.min, scontrol.max, 0, 100);
- if (chn_right >= 0) {
- vright = scontrol.volume.values[chn_right];
+ if (chn_right != SND_MIXER_CHN_UNKNOWN) {
+ vright = scontrol.volume.values[c_right];
vright = mixer_conv(vright, scontrol.min, scontrol.max, 0, 100);
} else {
vright = vleft;
mvaddstr (y, x, " ");
mixer_dc (DC_CBAR_FRAME);
mvaddch (y, x + 2, ACS_ULCORNER);
- dc = scontrol.mute & (1 << chn_left) ? DC_CBAR_MUTE : DC_CBAR_NOMUTE;
+ dc = scontrol.mute & (1 << c_left) ? DC_CBAR_MUTE : DC_CBAR_NOMUTE;
mvaddch (y, x + 3, mixer_dc (dc));
- if (chn_right >= 0)
- dc = scontrol.mute & (1 << chn_right) ? DC_CBAR_MUTE : DC_CBAR_NOMUTE;
+ if (chn_right != SND_MIXER_CHN_UNKNOWN)
+ dc = scontrol.mute & (1 << c_right) ? DC_CBAR_MUTE : DC_CBAR_NOMUTE;
mvaddch (y, x + 4, mixer_dc (dc));
mixer_dc (DC_CBAR_FRAME);
mvaddch (y, x + 5, ACS_URCORNER);
/* capture input?
*/
- if ((scontrol.capture & (1 << chn_left)) ||
- (chn_right >= 0 && (scontrol.capture & (1 << chn_right))))
+ if ((scontrol.capture & (1 << c_left)) ||
+ (chn_right != SND_MIXER_CHN_UNKNOWN && (scontrol.capture & (1 << c_right))))
{
mixer_dc (DC_CBAR_CAPTURE);
mvaddstr (y, x + 1, "CAPTUR");
- if (scontrol.capture & (1 << chn_left)) {
+ if (scontrol.capture & (1 << c_left)) {
mvaddstr (y + 1, x + 1, "L");
- if (chn_right < 0)
+ if (chn_right == SND_MIXER_CHN_UNKNOWN)
mvaddstr (y + 1, x + 6, "R");
}
- if (chn_right >= 0 && (scontrol.capture & (1 << chn_right)))
+ if (chn_right != SND_MIXER_CHN_UNKNOWN &&
+ (scontrol.capture & (1 << c_right)))
mvaddstr (y + 1, x + 6, "R");
}
else if (scontrol.caps & SND_MIXER_SCTCAP_CAPTURE)
}
static void
-mixer_callback_rebuild (snd_mixer_t *handle, void *private_data)
+mixer_callback_rebuild (snd_mixer_t *handle ATTRIBUTE_UNUSED, void *private_data ATTRIBUTE_UNUSED)
{
/* we don't actually need to update the individual channels because
* we redraw the whole screen upon every main iteration anyways.
}
static void
-mixer_callback_scontrol (snd_mixer_t *handle, void *private_data, snd_mixer_sid_t *gid)
+mixer_callback_scontrol (snd_mixer_t *handle ATTRIBUTE_UNUSED, void *private_data ATTRIBUTE_UNUSED, snd_mixer_sid_t *gid ATTRIBUTE_UNUSED)
{
mixer_reinit ();
}
static int
mixer_iteration (void)
{
- struct timeval delay = { 0, };
+ struct timeval delay = { 0, 0 };
snd_mixer_simple_callbacks_t callbacks = { 0, };
int mixer_fd;
fd_set rfds;
static int controls(int level)
{
- int err, idx;
+ int err;
+ unsigned int idx;
snd_ctl_t *handle;
snd_hcontrol_list_t list;
static int show_simple_control(void *handle, snd_mixer_sid_t *sid, const char *space, int level)
{
- int err, chn;
+ int err;
+ snd_mixer_channel_id_t chn;
snd_mixer_simple_control_t scontrol;
bzero(&scontrol, sizeof(scontrol));
if (scontrol.channels == SND_MIXER_CHN_MASK_MONO) {
printf("Mono");
} else {
- for (chn = 0; chn <= SND_MIXER_CHN_LAST; chn++) {
- if (!(scontrol.channels & (1<<chn)))
+ for (chn = 0; chn <= SND_MIXER_CHN_LAST; snd_enum_incr(chn)){
+ if (!(scontrol.channels & (1<<snd_enum_to_int(chn))))
continue;
printf("%s ", snd_mixer_simple_channel_name(chn));
}
if (scontrol.channels == SND_MIXER_CHN_MASK_MONO) {
printf("%sMono: %s [%s]\n", space, get_percent(scontrol.volume.names.front_left, scontrol.min, scontrol.max), scontrol.mute & SND_MIXER_CHN_MASK_MONO ? "mute" : "on");
} else {
- for (chn = 0; chn <= SND_MIXER_CHN_LAST; chn++) {
- if (!(scontrol.channels & (1<<chn)))
+ for (chn = 0; chn <= SND_MIXER_CHN_LAST; snd_enum_incr(chn)) {
+ int c = snd_enum_to_int(chn);
+ if (!(scontrol.channels & (1<<c)))
continue;
printf("%s%s: %s [%s] [%s]\n",
space,
snd_mixer_simple_channel_name(chn),
- get_percent(scontrol.volume.values[chn], scontrol.min, scontrol.max),
- scontrol.mute & (1<<chn) ? "mute" : "on",
- scontrol.capture & (1<<chn) ? "capture" : "---");
+ get_percent(scontrol.volume.values[c], scontrol.min, scontrol.max),
+ scontrol.mute & (1<<c) ? "mute" : "on",
+ scontrol.capture & (1<<c) ? "capture" : "---");
}
}
}
static int simple_controls(int level)
{
- int err, idx;
+ int err;
+ unsigned int idx;
snd_mixer_t *handle;
snd_mixer_simple_control_list_t list;
snd_mixer_sid_t *sid;
snd_control_id_t id;
snd_control_t control;
char *ptr;
- int idx;
+ unsigned int idx;
long tmp;
if (argc < 1) {
{"rearright", SND_MIXER_CHN_MASK_REAR_RIGHT},
{"rear", SND_MIXER_CHN_MASK_REAR_LEFT|SND_MIXER_CHN_MASK_REAR_RIGHT},
{"woofer", SND_MIXER_CHN_MASK_WOOFER},
- {NULL}
+ {NULL, 0}
};
static int check_channels(char *arg, unsigned int mask, unsigned int *mask_return)
return 0;
}
-static int sset(int argc, char *argv[], int roflag)
+static int sset(unsigned int argc, char *argv[], int roflag)
{
- int err, idx, chn;
+ int err;
+ unsigned int idx;
+ snd_mixer_channel_id_t chn;
unsigned int channels;
snd_mixer_t *handle;
snd_mixer_sid_t sid;
multi = (strchr(argv[idx], ',') != NULL);
ptr = argv[idx];
- for (chn = 0; chn <= SND_MIXER_CHN_LAST; chn++) {
- if (!(control.channels & (1<<chn)) ||
- !(channels & (1<<chn)))
+ for (chn = 0; chn <= SND_MIXER_CHN_LAST; snd_enum_incr(chn)) {
+ int c = snd_enum_to_int(chn);
+ if (!(control.channels & (1<<c)) ||
+ !(channels & (1<<c)))
continue;
if (! multi)
ptr = argv[idx];
- control.volume.values[chn] = get_volume_simple(&ptr, control.min, control.max, control.volume.values[chn]);
+ control.volume.values[c] = get_volume_simple(&ptr, control.min, control.max, control.volume.values[c]);
}
} else {
error("Unknown setup '%s'..\n", argv[idx]);
return 0;
}
-static void events_change(snd_ctl_t *handle, snd_hcontrol_t *hcontrol)
+static void events_change(snd_ctl_t *handle ATTRIBUTE_UNUSED, snd_hcontrol_t *hcontrol)
{
printf("event change: ");
show_control_id(&hcontrol->id);
printf("\n");
}
-static void events_value(snd_ctl_t *handle, snd_hcontrol_t *hcontrol)
+static void events_value(snd_ctl_t *handle ATTRIBUTE_UNUSED, snd_hcontrol_t *hcontrol)
{
printf("event value: ");
show_control_id(&hcontrol->id);
printf("\n");
}
-static void events_remove(snd_ctl_t *handle, snd_hcontrol_t *hcontrol)
+static void events_remove(snd_ctl_t *handle ATTRIBUTE_UNUSED, snd_hcontrol_t *hcontrol)
{
printf("event remove: ");
show_control_id(&hcontrol->id);
printf("\n");
}
-static void events_rebuild(snd_ctl_t *handle, void *private_data)
+static void events_rebuild(snd_ctl_t *handle ATTRIBUTE_UNUSED, void *private_data)
{
assert(private_data != (void *)1);
printf("event rebuild\n");
}
-static void events_add(snd_ctl_t *handle, void *private_data, snd_hcontrol_t *hcontrol)
+static void events_add(snd_ctl_t *handle ATTRIBUTE_UNUSED, void *private_data, snd_hcontrol_t *hcontrol)
{
assert(private_data != (void *)1);
printf("event add: ");
hcontrol->event_remove = events_remove;
}
-static int events(int argc, char *argv[])
+static int events(int argc ATTRIBUTE_UNUSED, char *argv[] ATTRIBUTE_UNUSED)
{
snd_ctl_t *handle;
snd_hcontrol_t *hcontrol;
snd_ctl_close(handle);
}
-static void sevents_rebuild(snd_mixer_t *handle, void *private_data)
+static void sevents_rebuild(snd_mixer_t *handle ATTRIBUTE_UNUSED, void *private_data ATTRIBUTE_UNUSED)
{
printf("event rebuild\n");
}
-static void sevents_value(snd_mixer_t *handle, void *private_data, snd_mixer_sid_t *sid)
+static void sevents_value(snd_mixer_t *handle ATTRIBUTE_UNUSED, void *private_data ATTRIBUTE_UNUSED, snd_mixer_sid_t *sid)
{
char name[simple_name_size];
printf("event value: '%s',%i\n", simple_name(sid->name, name), sid->index);
}
-static void sevents_change(snd_mixer_t *handle, void *private_data, snd_mixer_sid_t *sid)
+static void sevents_change(snd_mixer_t *handle ATTRIBUTE_UNUSED, void *private_data ATTRIBUTE_UNUSED, snd_mixer_sid_t *sid)
{
char name[simple_name_size];
printf("event change: '%s',%i\n", simple_name(sid->name, name), sid->index);
}
-static void sevents_add(snd_mixer_t *handle, void *private_data, snd_mixer_sid_t *sid)
+static void sevents_add(snd_mixer_t *handle ATTRIBUTE_UNUSED, void *private_data ATTRIBUTE_UNUSED, snd_mixer_sid_t *sid)
{
char name[simple_name_size];
printf("event add: '%s',%i\n", simple_name(sid->name, name), sid->index);
}
-static void sevents_remove(snd_mixer_t *handle, void *private_data, snd_mixer_sid_t *sid)
+static void sevents_remove(snd_mixer_t *handle ATTRIBUTE_UNUSED, void *private_data ATTRIBUTE_UNUSED, snd_mixer_sid_t *sid)
{
char name[simple_name_size];
printf("event remove: '%s',%i\n", simple_name(sid->name, name), sid->index);
}
-static int sevents(int argc, char *argv[])
+static int sevents(int argc ATTRIBUTE_UNUSED, char *argv[] ATTRIBUTE_UNUSED)
{
snd_mixer_t *handle;
static snd_mixer_simple_callbacks_t callbacks = {
rhwparams.channels = 2;
} else {
rhwparams.format = snd_pcm_format_value(optarg);
- if (rhwparams.format < 0) {
+ if (rhwparams.format == SND_PCM_FORMAT_UNKNOWN) {
error("wrong extended format '%s'", optarg);
exit(EXIT_FAILURE);
}