aboutsummaryrefslogtreecommitdiffstats
path: root/src/libqmi-glib/qmi-message-context.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libqmi-glib/qmi-message-context.c')
-rw-r--r--src/libqmi-glib/qmi-message-context.c123
1 files changed, 123 insertions, 0 deletions
diff --git a/src/libqmi-glib/qmi-message-context.c b/src/libqmi-glib/qmi-message-context.c
new file mode 100644
index 0000000..96f7a67
--- /dev/null
+++ b/src/libqmi-glib/qmi-message-context.c
@@ -0,0 +1,123 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+
+/*
+ * libqmi-glib -- GLib/GIO based library to control QMI devices
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * Copyright (C) 2017 Aleksander Morgado <aleksander@aleksander.es>
+ */
+
+#include <glib.h>
+
+#include "qmi-message-context.h"
+
+/*****************************************************************************/
+/* Basic context */
+
+struct _QmiMessageContext {
+ volatile gint ref_count;
+
+ /* Vendor ID */
+ guint16 vendor_id;
+};
+
+/**
+ * qmi_message_context_new:
+ *
+ * Create a new empty #QmiMessageContext.
+ *
+ * Returns: (transfer full): a newly created #QmiMessageContext. The returned value should be freed with qmi_message_context_unref().
+ */
+QmiMessageContext *
+qmi_message_context_new (void)
+{
+ QmiMessageContext *self;
+
+ self = g_slice_new0 (QmiMessageContext);
+ self->ref_count = 1;
+ return self;
+}
+
+GType
+qmi_message_context_get_type (void)
+{
+ static volatile gsize g_define_type_id__volatile = 0;
+
+ if (g_once_init_enter (&g_define_type_id__volatile)) {
+ GType g_define_type_id =
+ g_boxed_type_register_static (g_intern_static_string ("QmiMessageContext"),
+ (GBoxedCopyFunc) qmi_message_context_ref,
+ (GBoxedFreeFunc) qmi_message_context_unref);
+
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+
+/**
+ * qmi_message_context_ref:
+ * @self: a #QmiMessageContext.
+ *
+ * Atomically increments the reference count of @self by one.
+ *
+ * Returns: (transfer full) the new reference to @self.
+ */
+QmiMessageContext *
+qmi_message_context_ref (QmiMessageContext *self)
+{
+ g_return_val_if_fail (self != NULL, NULL);
+
+ g_atomic_int_inc (&self->ref_count);
+ return self;
+}
+
+/**
+ * qmi_message_context_unref:
+ * @self: a #QmiMessageContext.
+ *
+ * Atomically decrements the reference count of @self by one.
+ * If the reference count drops to 0, @self is completely disposed.
+ */
+void
+qmi_message_context_unref (QmiMessageContext *self)
+{
+ g_return_if_fail (self != NULL);
+
+ if (g_atomic_int_dec_and_test (&self->ref_count)) {
+ g_slice_free (QmiMessageContext, self);
+ }
+}
+
+/*****************************************************************************/
+/* Vendor ID */
+
+void
+qmi_message_context_set_vendor_id (QmiMessageContext *self,
+ guint16 vendor_id)
+{
+ g_return_if_fail (self != NULL);
+
+ self->vendor_id = vendor_id;
+}
+
+guint16
+qmi_message_context_get_vendor_id (QmiMessageContext *self)
+{
+ g_return_val_if_fail (self != NULL, QMI_MESSAGE_VENDOR_GENERIC);
+ return self->vendor_id;
+}