]> git.alsa-project.org Git - alsa-gobject.git/commitdiff
rawmidi: stream_pair: 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/stream-pair.c
tests/alsarawmidi-stream-pair

index bc00c2942ed18a8d10271ced5cb6034eb0ce07d2..deb0c5f60fcba622c21814383a3b8b61b474d8af 100644 (file)
 
 struct _ALSARawmidiStreamPairPrivate {
     int fd;
+    char *devnode;
 };
 G_DEFINE_TYPE_WITH_PRIVATE(ALSARawmidiStreamPair, alsarawmidi_stream_pair, G_TYPE_OBJECT)
 
+enum rawmidi_stream_pair_prop_type {
+    RAWMIDI_STREAM_PAIR_PROP_DEVNODE = 1,
+    RAWMIDI_STREAM_PAIR_PROP_COUNT,
+};
+static GParamSpec *rawmidi_stream_pair_props[RAWMIDI_STREAM_PAIR_PROP_COUNT] = { NULL, };
+
+static void rawmidi_stream_pair_get_property(GObject *obj, guint id,
+                                             GValue *val, GParamSpec *spec)
+{
+    ALSARawmidiStreamPair *self = ALSARAWMIDI_STREAM_PAIR(obj);
+    ALSARawmidiStreamPairPrivate *priv =
+                            alsarawmidi_stream_pair_get_instance_private(self);
+    switch (id) {
+    case RAWMIDI_STREAM_PAIR_PROP_DEVNODE:
+        g_value_set_string(val, priv->devnode);
+        break;
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, id, spec);
+        break;
+    }
+}
+
 static void rawmidi_stream_pair_finalize(GObject *obj)
 {
     ALSARawmidiStreamPair *self = ALSARAWMIDI_STREAM_PAIR(obj);
     ALSARawmidiStreamPairPrivate *priv =
                             alsarawmidi_stream_pair_get_instance_private(self);
 
-    if (priv->fd >= 0)
+    if (priv->fd >= 0) {
         close(priv->fd);
+        g_free(priv->devnode);
+    }
 
     G_OBJECT_CLASS(alsarawmidi_stream_pair_parent_class)->finalize(obj);
 }
@@ -32,6 +57,17 @@ static void alsarawmidi_stream_pair_class_init(ALSARawmidiStreamPairClass *klass
     GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
 
     gobject_class->finalize = rawmidi_stream_pair_finalize;
+    gobject_class->get_property = rawmidi_stream_pair_get_property;
+
+    rawmidi_stream_pair_props[RAWMIDI_STREAM_PAIR_PROP_DEVNODE] =
+        g_param_spec_string("devnode", "devnode",
+                            "The full path of rawmidi character device.",
+                            "",
+                            G_PARAM_READABLE);
+
+    g_object_class_install_properties(gobject_class,
+                                      RAWMIDI_STREAM_PAIR_PROP_COUNT,
+                                      rawmidi_stream_pair_props);
 }
 
 static void alsarawmidi_stream_pair_init(ALSARawmidiStreamPair *self)
@@ -107,8 +143,11 @@ void alsarawmidi_stream_pair_open(ALSARawmidiStreamPair *self, guint card_id,
     }
 
     priv->fd = open(devnode, open_flag);
-    if (priv->fd < 0)
+    if (priv->fd < 0) {
         generate_error(error, errno);
+        g_free(devnode);
+        return;
+    }
 
-    g_free(devnode);
+    priv->devnode = devnode;
 }
index f785617f9fc7a0f9165fe97cc999989d94ab5c36..04195396721f46a250085342f838f04432ddaa1a 100644 (file)
@@ -10,7 +10,9 @@ gi.require_version('ALSARawmidi', '0.0')
 from gi.repository import ALSARawmidi
 
 target = ALSARawmidi.StreamPair()
-props = ()
+props = (
+    'devnode',
+)
 methods = (
     'new',
     'open',