mirror of https://github.com/ericonr/sndio.git
Use "hw" group for hw controls to get stable control names.
To ensure chained sndiod controls get unique names, we prefix groups sndiod creates with "dev".
This commit is contained in:
parent
5f82859275
commit
0031ec4a72
|
@ -224,6 +224,7 @@ scanvol(struct sioctl_sun_hdl *hdl, struct wskbd_vol *vol)
|
|||
int i, val;
|
||||
|
||||
memset(&desc, 0, sizeof(struct sioctl_desc));
|
||||
strlcpy(desc.group, "hw", SIOCTL_NAMEMAX);
|
||||
if (vol->level_idx >= 0) {
|
||||
ctrl.dev = vol->level_idx;
|
||||
ctrl.type = AUDIO_MIXER_VALUE;
|
||||
|
|
|
@ -53,7 +53,7 @@ dev_sioctl_ondesc(void *arg, struct sioctl_desc *desc, int val)
|
|||
{
|
||||
#define GROUP_PREFIX "dev"
|
||||
#define GROUP_PREFIX_LEN (sizeof(GROUP_PREFIX))
|
||||
char group[CTL_NAMEMAX];
|
||||
char group_buf[CTL_NAMEMAX], *group;
|
||||
struct dev *d = arg;
|
||||
size_t len;
|
||||
int addr;
|
||||
|
@ -62,13 +62,22 @@ dev_sioctl_ondesc(void *arg, struct sioctl_desc *desc, int val)
|
|||
return;
|
||||
addr = CTLADDR_END + desc->addr;
|
||||
dev_rmctl(d, addr);
|
||||
if (desc->group[0] != 0) {
|
||||
len = snprintf(group, CTL_NAMEMAX,
|
||||
|
||||
/*
|
||||
* prefix group names we use (top-level and "app") with "dev."
|
||||
* to ensure that all controls have unique names when multiple
|
||||
* sndiod's are chained
|
||||
*/
|
||||
if (desc->group[0] == 0)
|
||||
group = GROUP_PREFIX;
|
||||
else if (strcmp(desc->group, "app") == 0) {
|
||||
group = group_buf;
|
||||
len = snprintf(group_buf, CTL_NAMEMAX,
|
||||
GROUP_PREFIX ".%s", desc->group);
|
||||
if (len >= CTL_NAMEMAX)
|
||||
return;
|
||||
} else
|
||||
strlcpy(group, GROUP_PREFIX, CTL_NAMEMAX);
|
||||
group = desc->group;
|
||||
|
||||
dev_addctl(d, group, desc->type, addr,
|
||||
desc->chan0.str, desc->chan0.unit, desc->func,
|
||||
|
|
Loading…
Reference in New Issue