summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 9673f57)
raw | patch | inline | side by side (parent: 9673f57)
author | Simon Wilson <simonwilson@google.com> | |
Mon, 24 Jun 2013 22:40:34 +0000 (15:40 -0700) | ||
committer | Simon Wilson <simonwilson@google.com> | |
Mon, 24 Jun 2013 22:40:34 +0000 (15:40 -0700) |
include/tinyalsa/asoundlib.h | patch | blob | history | |
mixer.c | patch | blob | history |
index bb4005a954ccaf366a5307fa2c5fbeb7153d4b31..2e16392f81403be4a80bb0f4eb36cce0011b03d2 100644 (file)
int mixer_ctl_set_percent(struct mixer_ctl *ctl, unsigned int id, int percent);
int mixer_ctl_get_value(struct mixer_ctl *ctl, unsigned int id);
int mixer_ctl_set_percent(struct mixer_ctl *ctl, unsigned int id, int percent);
int mixer_ctl_get_value(struct mixer_ctl *ctl, unsigned int id);
-int mixer_ctl_get_bytes(struct mixer_ctl *ctl, void *data, size_t len);
+int mixer_ctl_get_array(struct mixer_ctl *ctl, void *array, size_t count);
int mixer_ctl_set_value(struct mixer_ctl *ctl, unsigned int id, int value);
int mixer_ctl_set_value(struct mixer_ctl *ctl, unsigned int id, int value);
-int mixer_ctl_set_bytes(struct mixer_ctl *ctl, const void *data, size_t len);
+int mixer_ctl_set_array(struct mixer_ctl *ctl, const void *array, size_t count);
int mixer_ctl_set_enum_by_string(struct mixer_ctl *ctl, const char *string);
/* Determe range of integer mixer controls */
int mixer_ctl_set_enum_by_string(struct mixer_ctl *ctl, const char *string);
/* Determe range of integer mixer controls */
index f52bca9940cd848a02c1ef9912ba73a329ce5dd3..7419d3f0e28e93128b0051ee25b763fd0780c4e7 100644 (file)
--- a/mixer.c
+++ b/mixer.c
return 0;
}
return 0;
}
-int mixer_ctl_get_bytes(struct mixer_ctl *ctl, void *data, size_t len)
+int mixer_ctl_get_array(struct mixer_ctl *ctl, void *array, size_t count)
{
struct snd_ctl_elem_value ev;
int ret;
{
struct snd_ctl_elem_value ev;
int ret;
+ size_t size;
+ void *source;
- if (!ctl || (len > ctl->info->count) || !len || !data ||
- (ctl->info->type != SNDRV_CTL_ELEM_TYPE_BYTES))
+ if (!ctl || (count > ctl->info->count) || !count || !array)
return -EINVAL;
memset(&ev, 0, sizeof(ev));
return -EINVAL;
memset(&ev, 0, sizeof(ev));
if (ret < 0)
return ret;
if (ret < 0)
return ret;
- memcpy(data, ev.value.bytes.data, len);
+ switch (ctl->info->type) {
+ case SNDRV_CTL_ELEM_TYPE_BOOLEAN:
+ case SNDRV_CTL_ELEM_TYPE_INTEGER:
+ size = sizeof(ev.value.integer.value[0]);
+ source = ev.value.integer.value;
+ break;
+
+ case SNDRV_CTL_ELEM_TYPE_BYTES:
+ size = sizeof(ev.value.bytes.data[0]);
+ source = ev.value.bytes.data;
+ break;
+
+ default:
+ return -EINVAL;
+ }
+
+ memcpy(array, source, size * count);
return 0;
}
return 0;
}
return ioctl(ctl->mixer->fd, SNDRV_CTL_IOCTL_ELEM_WRITE, &ev);
}
return ioctl(ctl->mixer->fd, SNDRV_CTL_IOCTL_ELEM_WRITE, &ev);
}
-int mixer_ctl_set_bytes(struct mixer_ctl *ctl, const void *data, size_t len)
+int mixer_ctl_set_array(struct mixer_ctl *ctl, const void *array, size_t count)
{
struct snd_ctl_elem_value ev;
{
struct snd_ctl_elem_value ev;
+ size_t size;
+ void *dest;
- if (!ctl || (len > ctl->info->count) || !len || !data ||
- (ctl->info->type != SNDRV_CTL_ELEM_TYPE_BYTES))
+ if (!ctl || (count > ctl->info->count) || !count || !array)
return -EINVAL;
memset(&ev, 0, sizeof(ev));
ev.id.numid = ctl->info->id.numid;
return -EINVAL;
memset(&ev, 0, sizeof(ev));
ev.id.numid = ctl->info->id.numid;
- memcpy(ev.value.bytes.data, data, len);
+ switch (ctl->info->type) {
+ case SNDRV_CTL_ELEM_TYPE_BOOLEAN:
+ case SNDRV_CTL_ELEM_TYPE_INTEGER:
+ size = sizeof(ev.value.integer.value[0]);
+ dest = ev.value.integer.value;
+ break;
+
+ case SNDRV_CTL_ELEM_TYPE_BYTES:
+ size = sizeof(ev.value.bytes.data[0]);
+ dest = ev.value.bytes.data;
+ break;
+
+ default:
+ return -EINVAL;
+ }
+
+ memcpy(dest, array, size * count);
return ioctl(ctl->mixer->fd, SNDRV_CTL_IOCTL_ELEM_WRITE, &ev);
}
return ioctl(ctl->mixer->fd, SNDRV_CTL_IOCTL_ELEM_WRITE, &ev);
}