]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
ctl: elem_value: add APIs to set/get values of boolean 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 2d06a24ff1a86ff15f5fb7674f6df1f71c0e4607..01b28c34e387a9922080c45fa406c02f99701920 100644 (file)
@@ -63,6 +63,8 @@ ALSA_GOBJECT_0_0_0 {
 
     "alsactl_elem_value_get_type";
     "alsactl_elem_value_new";
+    "alsactl_elem_value_set_bool";
+    "alsactl_elem_value_get_bool";
   local:
     *;
 };
index 2e88691a2d6dce4d17deab6fcbb13ace0dcadd3c..07ff6199b1f95401635ddc70c08ac3a46d28263b 100644 (file)
@@ -71,3 +71,52 @@ void ctl_elem_value_refer_private(ALSACtlElemValue *self,
                                 alsactl_elem_value_get_instance_private(self);
     *value = &priv->value;
 }
+
+/**
+ * alsactl_elem_value_set_bool:
+ * @self: A #ALSACtlElemValue.
+ * @values: (array length=value_count): The array for values of boolean type.
+ * @value_count: The number of values up to 128.
+ *
+ * Copy the array for values of boolean type into internal data.
+ */
+void alsactl_elem_value_set_bool(ALSACtlElemValue *self,
+                                 const gboolean *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_bool:
+ * @self: A #ALSACtlElemValue.
+ * @values: (array length=value_count)(inout): The array for values of boolean
+ *          type.
+ * @value_count: The number of values up to 128.
+ *
+ * Copy the array for values of boolean type from internal data.
+ */
+void alsactl_elem_value_get_bool(ALSACtlElemValue *self,
+                                 gboolean *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] = (gboolean)value->value.integer.value[i];
+}
index c31efb70a8f520fb04ac645926312fb4c1a8b7da..ece63125e83544effa092c5a467f5dd1e760f03e 100644 (file)
@@ -49,6 +49,11 @@ GType alsactl_elem_value_get_type() G_GNUC_CONST;
 
 ALSACtlElemValue *alsactl_elem_value_new();
 
+void alsactl_elem_value_set_bool(ALSACtlElemValue *self,
+                                 const gboolean *values, gsize value_count);
+void alsactl_elem_value_get_bool(ALSACtlElemValue *self,
+                                 gboolean *const *values, gsize *value_count);
+
 G_END_DECLS
 
 #endif
index 7e5675bd58c3388feee55f0ce3040320849a22ae..d2623ff4ce09124ebef83ee739d7c78434830a42 100644 (file)
@@ -13,7 +13,11 @@ target = ALSACtl.ElemValue()
 props = (
     'elem-id',
 )
-methods = ()
+props = ()
+methods = (
+    'set_bool',
+    'get_bool',
+)
 signals = ()
 
 if not test(target, props, methods, signals):