]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
ctl: card: use ALSACtl.ElemInfoCommon instead of ElemInfo
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Thu, 2 Jun 2022 09:26:26 +0000 (18:26 +0900)
committer坂本 貴史 <o-takashi@sakamocchi.jp>
Thu, 2 Jun 2022 09:32:52 +0000 (18:32 +0900)
Current implementation to handle element information is by ALSACtl.ElemInfo
gobject class, and uses some helper functions for setter/getter properties
of information. The implementation is not necessarily convenient to add
more type of element information since it requires to add such helper
functions per each.

This commit uses ALSACtl.ElemInfoCommon interface to handle any type of
element information in ALSACtl.Card for system call.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
samples/ctl
src/ctl/card.c
src/ctl/card.h
src/ctl/elem-info-boolean.c
src/ctl/elem-info-bytes.c
src/ctl/elem-info-enumerated.c
src/ctl/elem-info-iec60958.c
src/ctl/elem-info-integer.c
src/ctl/elem-info-integer64.c
src/ctl/privates.h

index b47c3d227b1b50769ec247992395daca18aa424a..813b5f24a19a2c809e8fa0599443f7a6fd8134fb 100755 (executable)
@@ -17,8 +17,7 @@ _ = card.open(card_id_list[0], 0)
 # Get the information of card and dump.
 _, info = card.get_info()
 print('Sound card:')
-for prop in ('card-id', 'id', 'driver', 'name', 'long-name', 'mixer-name',
-             'components'):
+for prop in ('card-id', 'id', 'driver', 'name', 'long-name', 'mixer-name', 'components'):
     print('  {}: {}'.format(prop, info.get_property(prop)))
 
 # Enumerate available elements for the card.
@@ -27,60 +26,63 @@ _, elem_id_list = card.get_elem_id_list()
 for elem_id in elem_id_list:
     _, info = card.get_elem_info(elem_id)
     print('  name:', elem_id.get_name())
-    print('    type', info.get_property('type').value_nick)
+    print('    elem-type', info.get_property('elem-type').value_nick)
     print('    access', info.get_property('access').value_nicks)
-    print('    value-count', info.get_property('value-count'))
+    if isinstance(info, ALSACtl.ElemInfoSingleArray):
+        print('    value-count', info.get_property('value-count'))
 
 # Dispatch event.
 def handle_elem_event(card, elem_id, events):
     print('Event:')
     print('  ', elem_id.get_name(), events.value_nicks)
     _, info = card.get_elem_info(elem_id)
-    value_count = info.get_property('value-count')
     elem_value = ALSACtl.ElemValue.new()
     _, elem_value = card.read_elem_value(elem_id, elem_value)
-    value = [0] * value_count
-    if info.get_property('type') == ALSACtl.ElemType.BOOLEAN:
-        value = elem_value.get_bool(value)
-    elif info.get_property('type') == ALSACtl.ElemType.INTEGER:
-        value = elem_value.get_int(value)
-    elif info.get_property('type') == ALSACtl.ElemType.ENUMERATED:
-        value = elem_value.get_enum(value)
-    elif info.get_property('type') == ALSACtl.ElemType.BYTES:
-        value = elem_value.get_bytes(value)
-    elif info.get_property('type') == ALSACtl.ElemType.IEC60958:
+    if isinstance(info, ALSACtl.ElemInfoSingleArray):
+        value_count = info.get_property('value-count')
+        value = [0] * value_count
+        if info.get_property('elem-type') == ALSACtl.ElemType.BOOLEAN:
+            value = elem_value.get_bool(value)
+        elif info.get_property('elem-type') == ALSACtl.ElemType.INTEGER:
+            value = elem_value.get_int(value)
+        elif info.get_property('elem-type') == ALSACtl.ElemType.ENUMERATED:
+            value = elem_value.get_enum(value)
+        elif info.get_property('elem-type') == ALSACtl.ElemType.BYTES:
+            value = elem_value.get_bytes(value)
+        elif info.get_property('elem-type') == ALSACtl.ElemType.INTEGER64:
+            value = elem_value.get_int64(value)
+        print(value)
+    elif info.get_property('elem-type') == ALSACtl.ElemType.IEC60958:
         channel_status = elem_value.get_channel_status()
         user_data = elem_value.get_user_data()
-    elif info.get_property('type') == ALSACtl.ElemType.INTEGER64:
-        value = elem_value.get_int64(value)
-    else:
-        return
-    print(value)
+        print(channel_status, user_data)
 card.connect('handle-elem-event', handle_elem_event)
 
 # Register my elements.
 elem_id = ALSACtl.ElemId.new_by_name(ALSACtl.ElemIfaceType.CARD, 10, 20, "my-elements", 0)
-elem_info = ALSACtl.ElemInfo.new(ALSACtl.ElemType.INTEGER)
+elem_info = ALSACtl.ElemInfoInteger.new()
 flags = (ALSACtl.ElemAccessFlag.READ |
          ALSACtl.ElemAccessFlag.WRITE)
 elem_info.set_property('access', flags)
 elem_info.set_property('value-count', 32)
-elem_info.set_int_data((-123, 456, 21))
+elem_info.set_property('value-min', -123)
+elem_info.set_property('value-max', 456)
+elem_info.set_property('value-step', 21)
 _, elem_id_list = card.add_elems(elem_id, 10, elem_info)
 
+for elem_id in elem_id_list:
+    card.lock_elem(elem_id, False)
+
 # Create event dispatcher.
 dispatcher = GLib.MainLoop.new(None, False)
 _, src = card.create_source()
 src.attach(dispatcher.get_context())
 
 # Register UNIX signal handler.
-def handle_unix_signal(dispatcher):
-    dispatcher.quit()
-GLib.unix_signal_add(GLib.PRIORITY_DEFAULT, SIGINT,
-                     handle_unix_signal, dispatcher)
+GLib.unix_signal_add(GLib.PRIORITY_DEFAULT, SIGINT, lambda d: d.quit(), dispatcher)
 
 # Start to dispatch events.
 dispatcher.run()
 
-# Remove my elems.
+## Remove my elems.
 _ = card.remove_elems(elem_id_list[0])
index 56ce39ed661185477d82aaeecf209862f97aaeea..8b0bfbb3f3584de7428c2a0d62e22f0bcfe9cfb9 100644 (file)
@@ -468,17 +468,17 @@ gboolean alsactl_card_lock_elem(ALSACtlCard *self, const ALSACtlElemId *elem_id,
     return TRUE;
 }
 
-static gboolean parse_enum_names(ALSACtlCardPrivate *priv, struct snd_ctl_elem_info *info,
+static gboolean parse_enum_names(ALSACtlCardPrivate *priv, struct snd_ctl_elem_info *data,
                                  gchar ***labels, GError **error)
 {
-    gsize count = info->value.enumerated.items;
+    gsize count = data->value.enumerated.items;
     int i;
 
     *labels = g_malloc0_n(count + 1, sizeof(**labels));
 
     for (i = 0; i < count; ++i) {
-        info->value.enumerated.item = i;
-        if (ioctl(priv->fd, SNDRV_CTL_IOCTL_ELEM_INFO, info)) {
+        data->value.enumerated.item = i;
+        if (ioctl(priv->fd, SNDRV_CTL_IOCTL_ELEM_INFO, data)) {
             if (errno == ENODEV)
                 generate_local_error(error, ALSACTL_CARD_ERROR_DISCONNECTED);
             else
@@ -486,7 +486,7 @@ static gboolean parse_enum_names(ALSACtlCardPrivate *priv, struct snd_ctl_elem_i
             goto error;
         }
 
-        (*labels)[i] = g_strdup(info->value.enumerated.name);
+        (*labels)[i] = g_strdup(data->value.enumerated.name);
     }
 
     (*labels)[count] = NULL;
@@ -500,7 +500,7 @@ error:
  * alsactl_card_get_elem_info:
  * @self: A [class@Card].
  * @elem_id: A [struct@ElemId].
- * @elem_info: (out): A [class@ElemInfo].
+ * @elem_info: (out): An instance of object which implements [iface@ElemInfoCommon].
  * @error: A [struct@GLib.Error]. Error is generated with domain of `ALSACtl.CardError`.
  *
  * Get information of element corresponding to given id.
@@ -512,10 +512,10 @@ error:
  * Returns: %TRUE when the overall operation finishes successfully, else %FALSE.
  */
 gboolean alsactl_card_get_elem_info(ALSACtlCard *self, const ALSACtlElemId *elem_id,
-                                    ALSACtlElemInfo **elem_info, GError **error)
+                                    ALSACtlElemInfoCommon **elem_info, GError **error)
 {
     ALSACtlCardPrivate *priv;
-    struct snd_ctl_elem_info *info;
+    struct snd_ctl_elem_info *dst, data = {0};
 
     g_return_val_if_fail(ALSACTL_IS_CARD(self), FALSE);
     priv = alsactl_card_get_instance_private(self);
@@ -524,11 +524,8 @@ gboolean alsactl_card_get_elem_info(ALSACtlCard *self, const ALSACtlElemId *elem
     g_return_val_if_fail(elem_info != NULL, FALSE);
     g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
 
-    *elem_info = g_object_new(ALSACTL_TYPE_ELEM_INFO, NULL);
-    ctl_elem_info_refer_private(*elem_info, &info);
-
-    info->id = *elem_id;
-    if (ioctl(priv->fd, SNDRV_CTL_IOCTL_ELEM_INFO, info)) {
+    data.id = *elem_id;
+    if (ioctl(priv->fd, SNDRV_CTL_IOCTL_ELEM_INFO, &data)) {
         if (errno == ENODEV)
             generate_local_error(error, ALSACTL_CARD_ERROR_DISCONNECTED);
         else if (errno == ENOENT)
@@ -538,27 +535,55 @@ gboolean alsactl_card_get_elem_info(ALSACtlCard *self, const ALSACtlElemId *elem
         return FALSE;
     }
 
-    switch (info->type) {
+    switch (data.type) {
     case SNDRV_CTL_ELEM_TYPE_BOOLEAN:
+    {
+        ALSACtlElemInfoBoolean *info = alsactl_elem_info_boolean_new();
+        ctl_elem_info_boolean_refer_private(info, &dst);
+        *elem_info = ALSACTL_ELEM_INFO_COMMON(info);
+        break;
+    }
     case SNDRV_CTL_ELEM_TYPE_INTEGER:
+    {
+        ALSACtlElemInfoInteger *info = alsactl_elem_info_integer_new();
+        ctl_elem_info_integer_refer_private(info, &dst);
+        *elem_info = ALSACTL_ELEM_INFO_COMMON(info);
+        break;
+    }
     case SNDRV_CTL_ELEM_TYPE_BYTES:
+    {
+        ALSACtlElemInfoBytes *info = alsactl_elem_info_bytes_new();
+        ctl_elem_info_bytes_refer_private(info, &dst);
+        *elem_info = ALSACTL_ELEM_INFO_COMMON(info);
+        break;
+    }
     case SNDRV_CTL_ELEM_TYPE_IEC958:
+    {
+        ALSACtlElemInfoIec60958 *info = alsactl_elem_info_iec60958_new();
+        ctl_elem_info_iec60958_refer_private(info, &dst);
+        *elem_info = ALSACTL_ELEM_INFO_COMMON(info);
+        break;
+    }
     case SNDRV_CTL_ELEM_TYPE_INTEGER64:
+    {
+        ALSACtlElemInfoInteger64 *info = alsactl_elem_info_integer64_new();
+        ctl_elem_info_integer64_refer_private(info, &dst);
+        *elem_info = ALSACTL_ELEM_INFO_COMMON(info);
         break;
+    }
     case SNDRV_CTL_ELEM_TYPE_ENUMERATED:
     {
+        ALSACtlElemInfoEnumerated *info;
         gchar **labels;
-        gboolean result;
 
-        if (!parse_enum_names(priv, info, &labels, error))
+        if (!parse_enum_names(priv, &data, &labels, error))
             return FALSE;
 
-        result = alsactl_elem_info_set_enum_data(*elem_info, (const gchar **)labels, error);
+        info = alsactl_elem_info_enumerated_new();
+        g_object_set(info, "labels", labels, NULL);
         g_strfreev(labels);
-        if (!result) {
-            g_object_unref(*elem_info);
-            return FALSE;
-        }
+        ctl_elem_info_enumerated_refer_private(info, &dst);
+        *elem_info = ALSACTL_ELEM_INFO_COMMON(info);
 
         break;
     }
@@ -566,6 +591,8 @@ gboolean alsactl_card_get_elem_info(ALSACtlCard *self, const ALSACtlElemId *elem
         g_return_val_if_reached(FALSE);
     }
 
+    *dst = data;
+
     return TRUE;
 }
 
@@ -743,7 +770,7 @@ gboolean alsactl_card_command_elem_tlv(ALSACtlCard *self, const ALSACtlElemId *e
     return TRUE;
 }
 
-static gboolean prepare_enum_names(struct snd_ctl_elem_info *info, const gchar **labels)
+static gboolean prepare_enum_names(struct snd_ctl_elem_info *info, const gchar *const *labels)
 {
     unsigned int count;
     unsigned int length;
@@ -777,41 +804,77 @@ static gboolean prepare_enum_names(struct snd_ctl_elem_info *info, const gchar *
 }
 
 static gboolean add_or_replace_elems(int fd, const ALSACtlElemId *elem_id, guint elem_count,
-                                     ALSACtlElemInfo *elem_info, gboolean replace, GList **entries,
-                                     GError **error)
+                                     ALSACtlElemInfoCommon *elem_info, gboolean replace,
+                                     GList **entries, GError **error)
 {
-    struct snd_ctl_elem_info *info;
+    struct snd_ctl_elem_info *data;
+    ALSACtlElemType elem_type;
     long request;
     const char *req_name;
     gboolean result;
+    struct snd_ctl_elem_id src;
     int i;
 
-    ctl_elem_info_refer_private(elem_info, &info);
+    g_object_get(elem_info, "elem-type", &elem_type, NULL);
 
-    switch (info->type) {
+    switch (elem_type) {
     case SNDRV_CTL_ELEM_TYPE_BOOLEAN:
+        ctl_elem_info_boolean_refer_private(ALSACTL_ELEM_INFO_BOOLEAN(elem_info), &data);
+        break;
     case SNDRV_CTL_ELEM_TYPE_INTEGER:
+    {
+        gint min, max, step;
+        ctl_elem_info_integer_refer_private(ALSACTL_ELEM_INFO_INTEGER(elem_info), &data);
+        min = data->value.integer.min;
+        max = data->value.integer.max;
+        step = data->value.integer.step;
+        g_return_val_if_fail(min <= max, FALSE);
+        g_return_val_if_fail(min + step <= max, FALSE);
+        break;
+    }
     case SNDRV_CTL_ELEM_TYPE_BYTES:
+        ctl_elem_info_bytes_refer_private(ALSACTL_ELEM_INFO_BYTES(elem_info), &data);
+        break;
     case SNDRV_CTL_ELEM_TYPE_IEC958:
-    case SNDRV_CTL_ELEM_TYPE_INTEGER64:
+        ctl_elem_info_iec60958_refer_private(ALSACTL_ELEM_INFO_IEC60958(elem_info), &data);
         break;
-    case SNDRV_CTL_ELEM_TYPE_ENUMERATED:
+    case SNDRV_CTL_ELEM_TYPE_INTEGER64:
     {
-        const gchar **labels;
-
-        if (!alsactl_elem_info_get_enum_data(elem_info, &labels, error))
-            return FALSE;
-
-        if (!prepare_enum_names(info, labels))
-            return FALSE;
-
+        gint64 min, max, step;
+        ctl_elem_info_integer64_refer_private(ALSACTL_ELEM_INFO_INTEGER64(elem_info), &data);
+        min = data->value.integer64.min;
+        max = data->value.integer64.max;
+        step = data->value.integer64.step;
+        g_return_val_if_fail(min <= max, FALSE);
+        g_return_val_if_fail(min + step <= max, FALSE);
         break;
     }
+    case SNDRV_CTL_ELEM_TYPE_ENUMERATED:
+        ctl_elem_info_enumerated_refer_private(ALSACTL_ELEM_INFO_ENUMERATED(elem_info), &data);
+        break;
     default:
         g_return_val_if_reached(FALSE);
     }
 
-    info->id = *elem_id;
+    g_return_val_if_fail(data->type == elem_type, FALSE);
+    g_return_val_if_fail(data->access > 0, FALSE);
+    g_return_val_if_fail(data->count > 0, FALSE);
+
+    if (elem_type == SNDRV_CTL_ELEM_TYPE_ENUMERATED) {
+        gchar **labels;
+        gboolean result;
+
+        g_object_get(ALSACTL_ELEM_INFO_ENUMERATED(elem_info), "labels", &labels, NULL);
+
+        result = prepare_enum_names(data, (const gchar *const *)labels);
+        g_strfreev(labels);
+        if (!result)
+            return FALSE;
+    } else {
+        data->value.enumerated.names_ptr = 0;
+    }
+
+    data->id = *elem_id;
 
     if (!replace) {
         request = SNDRV_CTL_IOCTL_ELEM_ADD;
@@ -821,8 +884,8 @@ static gboolean add_or_replace_elems(int fd, const ALSACtlElemId *elem_id, guint
         req_name = "ELEM_REPLACE";
     }
 
-    info->owner = (__kernel_pid_t)elem_count;
-    if (ioctl(fd, request, info) < 0) {
+    data->owner = (__kernel_pid_t)elem_count;
+    if (ioctl(fd, request, data) < 0) {
         if (errno == ENODEV) {
             generate_local_error(error, ALSACTL_CARD_ERROR_DISCONNECTED);
         } else if (errno == ENOENT) {
@@ -839,16 +902,22 @@ static gboolean add_or_replace_elems(int fd, const ALSACtlElemId *elem_id, guint
     } else {
         result = TRUE;
     }
-    g_free((void *)info->value.enumerated.names_ptr);
+
+    if (elem_type == SNDRV_CTL_ELEM_TYPE_ENUMERATED) {
+        g_free((void *)data->value.enumerated.names_ptr);
+        data->value.enumerated.names_ptr = 0;
+    }
+
     if (!result)
         return FALSE;
 
+    src = data->id;
     for (i = 0; i < elem_count; ++i) {
-        ALSACtlElemId *entry = g_boxed_copy(ALSACTL_TYPE_ELEM_ID, &info->id);
+        ALSACtlElemId *entry = g_boxed_copy(ALSACTL_TYPE_ELEM_ID, &src);
         *entries = g_list_append(*entries, (gpointer)entry);
 
-        ++info->id.numid;
-        ++info->id.index;
+        ++src.numid;
+        ++src.index;
     }
 
     return TRUE;
@@ -859,7 +928,7 @@ static gboolean add_or_replace_elems(int fd, const ALSACtlElemId *elem_id, guint
  * @self: A [class@Card].
  * @elem_id: A [struct@ElemId].
  * @elem_count: The number of elements going to be added.
- * @elem_info: A [class@ElemInfo].
+ * @elem_info: An instance of object which implements [iface@ElemInfoCommon].
  * @entries: (element-type ALSACtl.ElemId)(out): The list of added element identifiers.
  * @error: A [struct@GLib.Error]. Error is generated with domain of `ALSACtl.CardError`.
  *
@@ -871,7 +940,7 @@ static gboolean add_or_replace_elems(int fd, const ALSACtlElemId *elem_id, guint
  * Returns: %TRUE when the overall operation finishes successfully, else %FALSE.
  */
 gboolean alsactl_card_add_elems(ALSACtlCard *self, const ALSACtlElemId *elem_id, guint elem_count,
-                                ALSACtlElemInfo *elem_info, GList **entries, GError **error)
+                                ALSACtlElemInfoCommon *elem_info, GList **entries, GError **error)
 {
     ALSACtlCardPrivate *priv;
 
@@ -880,7 +949,7 @@ gboolean alsactl_card_add_elems(ALSACtlCard *self, const ALSACtlElemId *elem_id,
 
     g_return_val_if_fail(elem_id != NULL, FALSE);
     g_return_val_if_fail(elem_count > 0, FALSE);
-    g_return_val_if_fail(ALSACTL_IS_ELEM_INFO(elem_info), FALSE);
+    g_return_val_if_fail(ALSACTL_IS_ELEM_INFO_COMMON(elem_info), FALSE);
     g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
 
     return add_or_replace_elems(priv->fd, elem_id, elem_count, elem_info, FALSE, entries, error);
@@ -891,7 +960,7 @@ gboolean alsactl_card_add_elems(ALSACtlCard *self, const ALSACtlElemId *elem_id,
  * @self: A [class@Card].
  * @elem_id: A [struct@ElemId].
  * @elem_count: The number of elements going to be added.
- * @elem_info: A [class@ElemInfo].
+ * @elem_info: An instance of object which implements [iface@ElemInfoCommon].
  * @entries: (element-type ALSACtl.ElemId)(out): The list of renewed element identifiers.
  * @error: A [struct@GLib.Error]. Error is generated with domain of `ALSACtl.CardError`.
  *
@@ -903,8 +972,8 @@ gboolean alsactl_card_add_elems(ALSACtlCard *self, const ALSACtlElemId *elem_id,
  * Returns: %TRUE when the overall operation finishes successfully, else %FALSE.
  */
 gboolean alsactl_card_replace_elems(ALSACtlCard *self, const ALSACtlElemId *elem_id,
-                                    guint elem_count, ALSACtlElemInfo *elem_info, GList **entries,
-                                    GError **error)
+                                    guint elem_count, ALSACtlElemInfoCommon *elem_info,
+                                    GList **entries, GError **error)
 {
     ALSACtlCardPrivate *priv;
 
@@ -913,7 +982,7 @@ gboolean alsactl_card_replace_elems(ALSACtlCard *self, const ALSACtlElemId *elem
 
     g_return_val_if_fail(elem_id != NULL, FALSE);
     g_return_val_if_fail(elem_count > 0, FALSE);
-    g_return_val_if_fail(ALSACTL_IS_ELEM_INFO(elem_info), FALSE);
+    g_return_val_if_fail(ALSACTL_IS_ELEM_INFO_COMMON(elem_info), FALSE);
     g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
 
     return add_or_replace_elems(priv->fd, elem_id, elem_count, elem_info, TRUE, entries, error);
index cf7804b50ec040c776b7315132af8648235fe11f..03f914971ff6b6fb867f039c97cd4a1de977f830 100644 (file)
@@ -52,7 +52,7 @@ gboolean alsactl_card_lock_elem(ALSACtlCard *self, const ALSACtlElemId *elem_id,
                                 GError **error);
 
 gboolean alsactl_card_get_elem_info(ALSACtlCard *self, const ALSACtlElemId *elem_id,
-                                    ALSACtlElemInfo **elem_info, GError **error);
+                                    ALSACtlElemInfoCommon **elem_info, GError **error);
 
 gboolean alsactl_card_write_elem_tlv(ALSACtlCard *self, const ALSACtlElemId *elem_id,
                                      const guint32 *container, gsize container_count,
@@ -65,9 +65,9 @@ gboolean alsactl_card_command_elem_tlv(ALSACtlCard *self, const ALSACtlElemId *e
                                        GError **error);
 
 gboolean alsactl_card_add_elems(ALSACtlCard *self, const ALSACtlElemId *elem_id, guint elem_count,
-                                ALSACtlElemInfo *elem_info, GList **entries, GError **error);
+                                ALSACtlElemInfoCommon *elem_info, GList **entries, GError **error);
 gboolean alsactl_card_replace_elems(ALSACtlCard *self, const ALSACtlElemId *elem_id, guint elem_count,
-                                    ALSACtlElemInfo *elem_info, GList **entries, GError **error);
+                                    ALSACtlElemInfoCommon *elem_info, GList **entries, GError **error);
 gboolean alsactl_card_remove_elems(ALSACtlCard *self, const ALSACtlElemId *elem_id, GError **error);
 
 gboolean alsactl_card_write_elem_value(ALSACtlCard *self, const ALSACtlElemId *elem_id,
index 331d744330a987f6b0cd6bd9e90fc02d97408564..a57f458e4a01656844b68647b091c09d345b2962 100644 (file)
@@ -80,3 +80,11 @@ ALSACtlElemInfoBoolean *alsactl_elem_info_boolean_new()
     return g_object_new(ALSACTL_TYPE_ELEM_INFO_BOOLEAN,
                         ELEM_TYPE_PROP_NAME, ALSACTL_ELEM_TYPE_BOOLEAN, NULL);
 }
+
+void ctl_elem_info_boolean_refer_private(ALSACtlElemInfoBoolean *self,
+                                         struct snd_ctl_elem_info **data)
+{
+    ALSACtlElemInfoBooleanPrivate *priv = alsactl_elem_info_boolean_get_instance_private(self);
+
+    *data = &priv->data;
+}
index 531f4b7397f87dc4e07cf66d1822708c3b05b01d..49c9eb3bd9a89f518943132c37a91b657d3a774e 100644 (file)
@@ -80,3 +80,10 @@ ALSACtlElemInfoBytes *alsactl_elem_info_bytes_new()
     return g_object_new(ALSACTL_TYPE_ELEM_INFO_BYTES, ELEM_TYPE_PROP_NAME, ALSACTL_ELEM_TYPE_BYTES,
                         NULL);
 }
+
+void ctl_elem_info_bytes_refer_private(ALSACtlElemInfoBytes *self, struct snd_ctl_elem_info **data)
+{
+    ALSACtlElemInfoBytesPrivate *priv = alsactl_elem_info_bytes_get_instance_private(self);
+
+    *data = &priv->data;
+}
index 6070f00fa2085cfb1308f164f804b63b9926f6fb..052a63c2322073c31cc77f3ef5d79e22e99e789c 100644 (file)
@@ -127,3 +127,11 @@ ALSACtlElemInfoEnumerated *alsactl_elem_info_enumerated_new()
     return g_object_new(ALSACTL_TYPE_ELEM_INFO_ENUMERATED,
                         ELEM_TYPE_PROP_NAME, ALSACTL_ELEM_TYPE_ENUMERATED, NULL);
 }
+
+void ctl_elem_info_enumerated_refer_private(ALSACtlElemInfoEnumerated *self,
+                                            struct snd_ctl_elem_info **data)
+{
+    ALSACtlElemInfoEnumeratedPrivate *priv = alsactl_elem_info_enumerated_get_instance_private(self);
+
+    *data = &priv->data;
+}
index 5fc77ddb20a2b38bf0d2bf79a70a3994fa380e30..21733ea524927dfe074d3b9bbec10073a4409eae 100644 (file)
@@ -72,3 +72,11 @@ ALSACtlElemInfoIec60958 *alsactl_elem_info_iec60958_new()
     return g_object_new(ALSACTL_TYPE_ELEM_INFO_IEC60958,
                         ELEM_TYPE_PROP_NAME, ALSACTL_ELEM_TYPE_IEC60958, NULL);
 }
+
+void ctl_elem_info_iec60958_refer_private(ALSACtlElemInfoIec60958 *self,
+                                          struct snd_ctl_elem_info **data)
+{
+    ALSACtlElemInfoIec60958Private *priv = alsactl_elem_info_iec60958_get_instance_private(self);
+
+    *data = &priv->data;
+}
index be1cf1807e3ecb5ef820953e2cfc6281a77b1bb0..21609bd152e29f21649e5f6476393bb1cf041e75 100644 (file)
@@ -152,3 +152,11 @@ ALSACtlElemInfoInteger *alsactl_elem_info_integer_new()
     return g_object_new(ALSACTL_TYPE_ELEM_INFO_INTEGER, ELEM_TYPE_PROP_NAME, ALSACTL_ELEM_TYPE_INTEGER,
                         NULL);
 }
+
+void ctl_elem_info_integer_refer_private(ALSACtlElemInfoInteger *self,
+                                         struct snd_ctl_elem_info **data)
+{
+    ALSACtlElemInfoIntegerPrivate *priv = alsactl_elem_info_integer_get_instance_private(self);
+
+    *data = &priv->data;
+}
index d9e380574a46a15999144b174df44e377eb5f15a..9224e6f8f5cd22e103aa5bae0be10efbd417a826 100644 (file)
@@ -152,3 +152,11 @@ ALSACtlElemInfoInteger64 *alsactl_elem_info_integer64_new()
     return g_object_new(ALSACTL_TYPE_ELEM_INFO_INTEGER64,
                         ELEM_TYPE_PROP_NAME, ALSACTL_ELEM_TYPE_INTEGER64, NULL);
 }
+
+void ctl_elem_info_integer64_refer_private(ALSACtlElemInfoInteger64 *self,
+                                           struct snd_ctl_elem_info **data)
+{
+    ALSACtlElemInfoInteger64Private *priv = alsactl_elem_info_integer64_get_instance_private(self);
+
+    *data = &priv->data;
+}
index 14ac223f3bc80f152e380448b335e9629c93dba8..5a14f06730d92a70f09cf1125aefeca02e58170a 100644 (file)
@@ -12,6 +12,23 @@ void ctl_card_info_refer_private(ALSACtlCardInfo *self,
 void ctl_elem_info_refer_private(ALSACtlElemInfo *self,
                                  struct snd_ctl_elem_info **info);
 
+void ctl_elem_info_boolean_refer_private(ALSACtlElemInfoBoolean *self,
+                                         struct snd_ctl_elem_info **data);
+
+void ctl_elem_info_bytes_refer_private(ALSACtlElemInfoBytes *self, struct snd_ctl_elem_info **data);
+
+void ctl_elem_info_enumerated_refer_private(ALSACtlElemInfoEnumerated *self,
+                                            struct snd_ctl_elem_info **data);
+
+void ctl_elem_info_iec60958_refer_private(ALSACtlElemInfoIec60958 *self,
+                                          struct snd_ctl_elem_info **data);
+
+void ctl_elem_info_integer_refer_private(ALSACtlElemInfoInteger *self,
+                                         struct snd_ctl_elem_info **data);
+
+void ctl_elem_info_integer64_refer_private(ALSACtlElemInfoInteger64 *self,
+                                           struct snd_ctl_elem_info **data);
+
 void ctl_elem_value_refer_private(ALSACtlElemValue *self,
                                   struct snd_ctl_elem_value **value);