mirror of
https://github.com/openharmony/third_party_tinyalsa.git
synced 2026-07-19 15:24:22 -04:00
Add integer range getters to mixer
This commit is contained in:
@@ -131,4 +131,8 @@ int mixer_ctl_get_value(struct mixer_ctl *ctl, unsigned int id);
|
||||
int mixer_ctl_set_value(struct mixer_ctl *ctl, unsigned int id, int value);
|
||||
int mixer_ctl_set_enum_by_string(struct mixer_ctl *ctl, const char *string);
|
||||
|
||||
/* Determe range of integer mixer controls */
|
||||
int mixer_ctl_get_range_min(struct mixer_ctl *ctl);
|
||||
int mixer_ctl_get_range_max(struct mixer_ctl *ctl);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -372,6 +372,40 @@ int mixer_ctl_set_value(struct mixer_ctl *ctl, unsigned int id, int value)
|
||||
return ioctl(ctl->mixer->fd, SNDRV_CTL_IOCTL_ELEM_WRITE, &ev);
|
||||
}
|
||||
|
||||
int mixer_ctl_get_range_min(struct mixer_ctl *ctl)
|
||||
{
|
||||
struct snd_ctl_elem_value ev;
|
||||
|
||||
if (!ctl || (ctl->info->type != SNDRV_CTL_ELEM_TYPE_INTEGER)) {
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
memset(&ev, 0, sizeof(ev));
|
||||
ev.id.numid = ctl->info->id.numid;
|
||||
if (ioctl(ctl->mixer->fd, SNDRV_CTL_IOCTL_ELEM_READ, &ev))
|
||||
return -1;
|
||||
|
||||
return ctl->info->value.integer.min;
|
||||
}
|
||||
|
||||
int mixer_ctl_get_range_max(struct mixer_ctl *ctl)
|
||||
{
|
||||
struct snd_ctl_elem_value ev;
|
||||
|
||||
if (!ctl || (ctl->info->type != SNDRV_CTL_ELEM_TYPE_INTEGER)) {
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
memset(&ev, 0, sizeof(ev));
|
||||
ev.id.numid = ctl->info->id.numid;
|
||||
if (ioctl(ctl->mixer->fd, SNDRV_CTL_IOCTL_ELEM_READ, &ev))
|
||||
return -1;
|
||||
|
||||
return ctl->info->value.integer.max;
|
||||
}
|
||||
|
||||
unsigned int mixer_ctl_get_num_enums(struct mixer_ctl *ctl)
|
||||
{
|
||||
if (!ctl) {
|
||||
|
||||
@@ -102,6 +102,7 @@ static void tinymix_detail_control(struct mixer *mixer, unsigned int id)
|
||||
unsigned int num_values;
|
||||
char buffer[256];
|
||||
unsigned int i;
|
||||
int min, max;
|
||||
|
||||
if (id >= mixer_get_num_ctls(mixer)) {
|
||||
fprintf(stderr, "Invalid mixer control\n");
|
||||
@@ -119,19 +120,24 @@ static void tinymix_detail_control(struct mixer *mixer, unsigned int id)
|
||||
switch (type)
|
||||
{
|
||||
case MIXER_CTL_TYPE_INT:
|
||||
printf("\t%d", mixer_ctl_get_value(ctl, i));
|
||||
printf(" %d", mixer_ctl_get_value(ctl, i));
|
||||
break;
|
||||
case MIXER_CTL_TYPE_BOOL:
|
||||
printf("\t%s", mixer_ctl_get_value(ctl, i) ? "On" : "Off");
|
||||
printf(" %s", mixer_ctl_get_value(ctl, i) ? "On" : "Off");
|
||||
break;
|
||||
case MIXER_CTL_TYPE_ENUM:
|
||||
tinymix_print_enum(ctl);
|
||||
break;
|
||||
default:
|
||||
printf("\tunknown");
|
||||
printf(" unknown");
|
||||
break;
|
||||
};
|
||||
}
|
||||
if (type == MIXER_CTL_TYPE_INT) {
|
||||
min = mixer_ctl_get_range_min(ctl);
|
||||
max = mixer_ctl_get_range_max(ctl);
|
||||
printf(" (range %d->%d)", min, max);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user