]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
rawmidi: substream_status: add properties
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Mon, 18 Nov 2019 04:22:44 +0000 (13:22 +0900)
committer坂本 貴史 <o-takashi@sakamocchi.jp>
Sun, 12 Apr 2020 05:30:33 +0000 (14:30 +0900)
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
src/rawmidi/privates.h
src/rawmidi/substream-status.c
src/rawmidi/substream-status.h
tests/alsarawmidi-substream-status

index ff284dd6d56141643ec612684c9ef3a1f2bccf4e..ae579de769efb0ea84a38d14260a56d263c4aeba 100644 (file)
@@ -9,7 +9,6 @@
 
 #include "substream-info.h"
 #include "substream-params.h"
-#include "substream-status.h"
 
 #include <sound/asound.h>
 
index 8c6e766e7dc34259c7b68a97db09519fc1651f6c..39ed60b46c846db9277d8561d6543d4533e7de1d 100644 (file)
@@ -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 <sound/asound.h>
+
+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)
index 6d48c24d0e4212f4a0028f84f6e4b6af000d6911..f1af9b5302da6a88e05a6d4fddb7b753ef6273b9 100644 (file)
@@ -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 {
index 65cbfd7b2f588911285ba36a129f505e22b03554..8e6dc8746d31ad3d11713f31c32c9a1292655323 100644 (file)
@@ -10,7 +10,10 @@ gi.require_version('ALSARawmidi', '0.0')
 from gi.repository import ALSARawmidi
 
 target = ALSARawmidi.SubstreamStatus()
-props = ()
+props = (
+    'avail',
+    'xruns',
+)
 methods = (
     'new',
 )