]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
ctl: elem_value: add APIs to set/get indexes of enumerated type
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Mon, 18 Nov 2019 04:22:44 +0000 (13:22 +0900)
committerTakashi Sakamoto <o-takashi@sakamocchi.jp>
Thu, 12 Dec 2019 05:29:12 +0000 (14:29 +0900)
src/ctl/alsactl.map
src/ctl/elem-value.c
src/ctl/elem-value.h
tests/alsactl-elem-value

index 06c4fa50cdb77ec88b069d3ac35ae818ccbb65bd..90787c28d5af142ce5a9ae4d114cd35802631840 100644 (file)
@@ -67,6 +67,8 @@ ALSA_GOBJECT_0_0_0 {
     "alsactl_elem_value_get_bool";
     "alsactl_elem_value_set_int";
     "alsactl_elem_value_get_int";
+    "alsactl_elem_value_set_enum";
+    "alsactl_elem_value_get_enum";
   local:
     *;
 };
index 33583a8c92924d2626df3e6dda898dcef907cef9..35de7c7bf06be1137d362400c47f5617d6282267 100644 (file)
@@ -169,3 +169,53 @@ void alsactl_elem_value_get_int(ALSACtlElemValue *self, gint32 *const *values,
     for (i = 0; i < *value_count; ++i)
         (*values)[i] = (gint32)value->value.integer.value[i];
 }
+
+/**
+ * alsactl_elem_value_set_enum:
+ * @self: A #ALSACtlElemValue.
+ * @values: (array length=value_count): The array for values of enumeration
+ *          index.
+ * @value_count: The number of values up to 128.
+ *
+ * Copy the array for values of enumeration index into internal storage.
+ */
+void alsactl_elem_value_set_enum(ALSACtlElemValue *self,
+                                 const guint32 *values, gsize value_count)
+{
+    ALSACtlElemValuePrivate *priv;
+    struct snd_ctl_elem_value *value;
+    int i;
+
+    g_return_if_fail(ALSACTL_IS_ELEM_VALUE(self));
+    priv = alsactl_elem_value_get_instance_private(self);
+    value = &priv->value;
+
+    value_count = MIN(value_count, G_N_ELEMENTS(value->value.integer.value));
+    for (i = 0; i < value_count; ++i)
+        value->value.integer.value[i] = (long)values[i];
+}
+
+/**
+ * alsactl_elem_value_get_enum:
+ * @self: A #ALSACtlElemValue.
+ * @values: (array length=value_count)(inout): The array for values of
+ *          enumeration index.
+ * @value_count: The number of values up to 128.
+ *
+ * Copy the array for values of enumeration index from internal storage.
+ */
+void alsactl_elem_value_get_enum(ALSACtlElemValue *self,
+                                 guint32 *const *values, gsize *value_count)
+{
+    ALSACtlElemValuePrivate *priv;
+    struct snd_ctl_elem_value *value;
+    int i;
+
+    g_return_if_fail(ALSACTL_IS_ELEM_VALUE(self));
+    priv = alsactl_elem_value_get_instance_private(self);
+    value = &priv->value;
+
+    *value_count = MIN(*value_count, G_N_ELEMENTS(value->value.integer.value));
+    for (i = 0; i < *value_count; ++i)
+        (*values)[i] = (guint32)value->value.integer.value[i];
+}
index 4c0afbecfc229b9a04eecc648102524b8a2d3787..579165c960dee8823699ed595e243a577c421bf3 100644 (file)
@@ -59,6 +59,11 @@ void alsactl_elem_value_set_int(ALSACtlElemValue *self, const gint32 *values,
 void alsactl_elem_value_get_int(ALSACtlElemValue *self, gint32 *const *values,
                                 gsize *value_count);
 
+void alsactl_elem_value_set_enum(ALSACtlElemValue *self,
+                                 const guint32 *values, gsize value_count);
+void alsactl_elem_value_get_enum(ALSACtlElemValue *self,
+                                 guint32 *const *values, gsize *value_count);
+
 G_END_DECLS
 
 #endif
index e08f9d48f8b01da3db2e3061e6ce3de4a3bd18f5..c78aadbaff288bee204e4b875dd40f62b4f8ee1e 100644 (file)
@@ -19,6 +19,8 @@ methods = (
     'get_bool',
     'set_int',
     'get_int',
+    'set_enum',
+    'get_enum',
 )
 signals = ()