From: Takashi Sakamoto Date: Mon, 18 Nov 2019 04:22:44 +0000 (+0900) Subject: rawmidi: stream_pair: add properties X-Git-Tag: v0.1.0~182 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=7b36dfbfa7166b28d95ff982c86cace1fbfa4fb1;p=alsa-gobject.git rawmidi: stream_pair: add properties Signed-off-by: Takashi Sakamoto --- diff --git a/src/rawmidi/stream-pair.c b/src/rawmidi/stream-pair.c index bc00c29..deb0c5f 100644 --- a/src/rawmidi/stream-pair.c +++ b/src/rawmidi/stream-pair.c @@ -12,17 +12,42 @@ 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; } diff --git a/tests/alsarawmidi-stream-pair b/tests/alsarawmidi-stream-pair index f785617..0419539 100644 --- a/tests/alsarawmidi-stream-pair +++ b/tests/alsarawmidi-stream-pair @@ -10,7 +10,9 @@ gi.require_version('ALSARawmidi', '0.0') from gi.repository import ALSARawmidi target = ALSARawmidi.StreamPair() -props = () +props = ( + 'devnode', +) methods = ( 'new', 'open',