From 2371b927816de9ba937ff79dcebc5d19b89294e6 Mon Sep 17 00:00:00 2001 From: Takashi Sakamoto Date: Mon, 18 Nov 2019 13:22:44 +0900 Subject: [PATCH] rawmidi: substream_status: add properties Signed-off-by: Takashi Sakamoto --- src/rawmidi/privates.h | 1 - src/rawmidi/substream-status.c | 56 ++++++++++++++++++++++++++++-- src/rawmidi/substream-status.h | 3 ++ tests/alsarawmidi-substream-status | 5 ++- 4 files changed, 61 insertions(+), 4 deletions(-) diff --git a/src/rawmidi/privates.h b/src/rawmidi/privates.h index ff284dd..ae579de 100644 --- a/src/rawmidi/privates.h +++ b/src/rawmidi/privates.h @@ -9,7 +9,6 @@ #include "substream-info.h" #include "substream-params.h" -#include "substream-status.h" #include diff --git a/src/rawmidi/substream-status.c b/src/rawmidi/substream-status.c index 8c6e766..39ed60b 100644 --- a/src/rawmidi/substream-status.c +++ b/src/rawmidi/substream-status.c @@ -1,11 +1,63 @@ // SPDX-License-Identifier: LGPL-3.0-or-later #include "substream-status.h" -G_DEFINE_TYPE(ALSARawmidiSubstreamStatus, alsarawmidi_substream_status, G_TYPE_OBJECT) +#include + +struct _ALSARawmidiSubstreamStatusPrivate { + struct snd_rawmidi_status status; +}; +G_DEFINE_TYPE_WITH_PRIVATE(ALSARawmidiSubstreamStatus, alsarawmidi_substream_status, G_TYPE_OBJECT) + +enum rawmidi_substream_status_prop_type { + RAWMIDI_SUBSTREAM_STATUS_PROP_AVAIL = 1, + RAWMIDI_SUBSTREAM_STATUS_PROP_XRUN, + RAWMIDI_SUBSTREAM_STATUS_PROP_COUNT, +}; +static GParamSpec *rawmidi_substream_status_props[RAWMIDI_SUBSTREAM_STATUS_PROP_COUNT] = { NULL, }; + +static void rawmidi_substream_status_get_property(GObject *obj, guint id, + GValue *val, GParamSpec *spec) +{ + ALSARawmidiSubstreamStatus *self = ALSARAWMIDI_SUBSTREAM_STATUS(obj); + ALSARawmidiSubstreamStatusPrivate *priv = + alsarawmidi_substream_status_get_instance_private(self); + + switch (id) { + case RAWMIDI_SUBSTREAM_STATUS_PROP_AVAIL: + g_value_set_long(val, priv->status.avail); + break; + case RAWMIDI_SUBSTREAM_STATUS_PROP_XRUN: + g_value_set_long(val, priv->status.xruns); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, spec); + break; + } +} static void alsarawmidi_substream_status_class_init(ALSARawmidiSubstreamStatusClass *klass) { - return; + GObjectClass *gobject_class = G_OBJECT_CLASS(klass); + + gobject_class->get_property = rawmidi_substream_status_get_property; + + rawmidi_substream_status_props[RAWMIDI_SUBSTREAM_STATUS_PROP_AVAIL] = + g_param_spec_ulong("avail", "avail", + "The size of available space in intermediate buffer.", + 0, G_MAXULONG, + 0, + G_PARAM_READABLE); + + rawmidi_substream_status_props[RAWMIDI_SUBSTREAM_STATUS_PROP_XRUN] = + g_param_spec_ulong("xruns", "xruns", + "The count of XRUNs since the last query of status.", + 0, G_MAXULONG, + 0, + G_PARAM_READABLE); + + g_object_class_install_properties(gobject_class, + RAWMIDI_SUBSTREAM_STATUS_PROP_COUNT, + rawmidi_substream_status_props); } static void alsarawmidi_substream_status_init(ALSARawmidiSubstreamStatus *self) diff --git a/src/rawmidi/substream-status.h b/src/rawmidi/substream-status.h index 6d48c24..f1af9b5 100644 --- a/src/rawmidi/substream-status.h +++ b/src/rawmidi/substream-status.h @@ -31,9 +31,12 @@ G_BEGIN_DECLS typedef struct _ALSARawmidiSubstreamStatus ALSARawmidiSubstreamStatus; typedef struct _ALSARawmidiSubstreamStatusClass ALSARawmidiSubstreamStatusClass; +typedef struct _ALSARawmidiSubstreamStatusPrivate ALSARawmidiSubstreamStatusPrivate; struct _ALSARawmidiSubstreamStatus { GObject parent_instance; + + ALSARawmidiSubstreamStatusPrivate *priv; }; struct _ALSARawmidiSubstreamStatusClass { diff --git a/tests/alsarawmidi-substream-status b/tests/alsarawmidi-substream-status index 65cbfd7..8e6dc87 100644 --- a/tests/alsarawmidi-substream-status +++ b/tests/alsarawmidi-substream-status @@ -10,7 +10,10 @@ gi.require_version('ALSARawmidi', '0.0') from gi.repository import ALSARawmidi target = ALSARawmidi.SubstreamStatus() -props = () +props = ( + 'avail', + 'xruns', +) methods = ( 'new', ) -- 2.47.3