From: Takashi Sakamoto Date: Thu, 2 Jun 2022 09:26:26 +0000 (+0900) Subject: ctl: elem-info-bytes: add class for element information of bytes type X-Git-Tag: v0.3.0~117 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=164a04bd4ba7857ae8b0a70aa193411944cecd30;p=alsa-gobject.git ctl: elem-info-bytes: add class for element information of bytes type Nothing specific. Signed-off-by: Takashi Sakamoto --- diff --git a/src/ctl/alsactl.h b/src/ctl/alsactl.h index 710e13f..141632e 100644 --- a/src/ctl/alsactl.h +++ b/src/ctl/alsactl.h @@ -21,6 +21,7 @@ #include #include #include +#include #include #include diff --git a/src/ctl/alsactl.map b/src/ctl/alsactl.map index 96aa3ea..7c498bb 100644 --- a/src/ctl/alsactl.map +++ b/src/ctl/alsactl.map @@ -91,4 +91,7 @@ ALSA_GOBJECT_0_3_0 { "alsactl_elem_info_boolean_get_type"; "alsactl_elem_info_boolean_new"; + + "alsactl_elem_info_bytes_get_type"; + "alsactl_elem_info_bytes_new"; } ALSA_GOBJECT_0_2_0; diff --git a/src/ctl/elem-info-bytes.c b/src/ctl/elem-info-bytes.c new file mode 100644 index 0000000..531f4b7 --- /dev/null +++ b/src/ctl/elem-info-bytes.c @@ -0,0 +1,82 @@ +// SPDX-License-Identifier: LGPL-3.0-or-later +#include "privates.h" + +/** + * ALSACtlElemInfoBytes: + * An object to express information for bytes type of element. + * + * A [class@GObject.Object] derived object class for bytes type of element. + * + * The object wraps `struct snd_ctl_elem_info` in UAPI of Linux sound subsystem. + */ +typedef struct { + struct snd_ctl_elem_info data; +} ALSACtlElemInfoBytesPrivate; + +static void elem_info_common_iface_init(ALSACtlElemInfoCommonInterface *iface); +static void elem_info_single_array_iface_init(ALSACtlElemInfoSingleArrayInterface *iface); + +G_DEFINE_TYPE_WITH_CODE(ALSACtlElemInfoBytes, alsactl_elem_info_bytes, G_TYPE_OBJECT, + G_ADD_PRIVATE(ALSACtlElemInfoBytes) + G_IMPLEMENT_INTERFACE(ALSACTL_TYPE_ELEM_INFO_COMMON, + elem_info_common_iface_init) + G_IMPLEMENT_INTERFACE(ALSACTL_TYPE_ELEM_INFO_SINGLE_ARRAY, + elem_info_single_array_iface_init)) + +static void ctl_elem_info_bytes_set_property(GObject *obj, guint id, const GValue *val, + GParamSpec *spec) +{ + ALSACtlElemInfoBytes *self = ALSACTL_ELEM_INFO_BYTES(obj); + ALSACtlElemInfoBytesPrivate *priv = alsactl_elem_info_bytes_get_instance_private(self); + struct snd_ctl_elem_info *data = &priv->data; + + elem_info_single_array_set_property(data, obj, id, val, spec); +} + +static void ctl_elem_info_bytes_get_property(GObject *obj, guint id, GValue *val, + GParamSpec *spec) +{ + ALSACtlElemInfoBytes *self = ALSACTL_ELEM_INFO_BYTES(obj); + ALSACtlElemInfoBytesPrivate *priv = alsactl_elem_info_bytes_get_instance_private(self); + const struct snd_ctl_elem_info *data = &priv->data; + + elem_info_single_array_get_property(data, obj, id, val, spec); +} + +static void alsactl_elem_info_bytes_class_init(ALSACtlElemInfoBytesClass *klass) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS(klass); + + gobject_class->set_property = ctl_elem_info_bytes_set_property; + gobject_class->get_property = ctl_elem_info_bytes_get_property; + + elem_info_single_array_class_override_properties(gobject_class); +} + +static void alsactl_elem_info_bytes_init(ALSACtlElemInfoBytes *self) +{ + return; +} + +static void elem_info_single_array_iface_init(ALSACtlElemInfoSingleArrayInterface *iface) +{ + return; +} + +static void elem_info_common_iface_init(ALSACtlElemInfoCommonInterface *iface) +{ + return; +} + +/** + * alsactl_elem_info_bytes_new: + * + * Allocate and return an instance of [class@ElemInfoBytes]. + * + * Returns: An instance of [class@ElemInfoBytes]. + */ +ALSACtlElemInfoBytes *alsactl_elem_info_bytes_new() +{ + return g_object_new(ALSACTL_TYPE_ELEM_INFO_BYTES, ELEM_TYPE_PROP_NAME, ALSACTL_ELEM_TYPE_BYTES, + NULL); +} diff --git a/src/ctl/elem-info-bytes.h b/src/ctl/elem-info-bytes.h new file mode 100644 index 0000000..cb47619 --- /dev/null +++ b/src/ctl/elem-info-bytes.h @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: LGPL-3.0-or-later +#ifndef __ALSA_GOBJECT_ALSACTL_ELEM_INFO_BYTES_H__ +#define __ALSA_GOBJECT_ALSACTL_ELEM_INFO_BYTES_H__ + +#include + +G_BEGIN_DECLS + +#define ALSACTL_TYPE_ELEM_INFO_BYTES (alsactl_elem_info_bytes_get_type()) + +G_DECLARE_DERIVABLE_TYPE(ALSACtlElemInfoBytes, alsactl_elem_info_bytes, ALSACTL, ELEM_INFO_BYTES, GObject) + +struct _ALSACtlElemInfoBytesClass { + GObjectClass parent_class; +}; + +ALSACtlElemInfoBytes *alsactl_elem_info_bytes_new(); + +G_END_DECLS + +#endif diff --git a/src/ctl/meson.build b/src/ctl/meson.build index 2e49ab4..4b6884c 100644 --- a/src/ctl/meson.build +++ b/src/ctl/meson.build @@ -19,6 +19,7 @@ sources = files( 'elem-info-iec60958.c', 'elem-info-single-array.c', 'elem-info-boolean.c', + 'elem-info-bytes.c', ) headers = files( @@ -32,6 +33,7 @@ headers = files( 'elem-info-iec60958.h', 'elem-info-single-array.h', 'elem-info-boolean.h', + 'elem-info-bytes.h', ) privates = files( diff --git a/tests/alsactl-elem-info-bytes b/tests/alsactl-elem-info-bytes new file mode 100644 index 0000000..378b3c4 --- /dev/null +++ b/tests/alsactl-elem-info-bytes @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 + +from sys import exit +from errno import ENXIO + +from helper import test + +import gi +gi.require_version('ALSACtl', '0.0') +from gi.repository import ALSACtl + +target = ALSACtl.ElemInfoBytes.new() +props = ( + 'elem-id', + 'elem-type', + 'access', + 'owner', + 'value-count', +) +methods = ( + 'new', +) +signals = () + +if not test(target, props, methods, signals): + exit(ENXIO) diff --git a/tests/meson.build b/tests/meson.build index 015cd68..8ea4375 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -9,6 +9,7 @@ tests = { 'alsactl-elem-info', 'alsactl-elem-info-iec60958', 'alsactl-elem-info-boolean', + 'alsactl-elem-info-bytes', 'alsactl-elem-value', ], 'timer': [