diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2020-02-02 12:18:24 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2020-02-02 20:51:05 +0100 |
commit | 25366087fd0d73aac301191fddfc9eee21252b7b (patch) | |
tree | 0da34f36265e5e4638860cc995428508daef46c6 | |
parent | 2367204fc9441da4237c0da9c245419694b541a6 (diff) | |
download | libqmi-25366087fd0d73aac301191fddfc9eee21252b7b.tar.gz |
libqrtr-glib: separate QRTR backend in its own library
27 files changed, 358 insertions, 210 deletions
@@ -26,11 +26,8 @@ Makefile.in /data/pkg-config/qmi-glib.pc -/src/Makefile -/src/Makefile.in +/src/libqrtr-glib/qrtr-version.h -/src/libqmi-glib/Makefile -/src/libqmi-glib/Makefile.in /src/libqmi-glib/libqmi-glib.la /src/libqmi-glib/qmi-version.h @@ -38,16 +35,12 @@ Makefile.in /src/libqmi-glib/generated/*.h /src/libqmi-glib/generated/*.sections -/src/libqmi-glib/test/Makefile -/src/libqmi-glib/test/Makefile.in /src/libqmi-glib/test/test-utils /src/libqmi-glib/test/test-compat-utils /src/libqmi-glib/test/test-message /src/libqmi-glib/test/test-generated /src/qmicli/qmicli -/src/qmicli/test/Makefile -/src/qmicli/test/Makefile.in /src/qmicli/test/test-helpers /src/qmi-proxy/qmi-proxy diff --git a/configure.ac b/configure.ac index 7c2c1a96..910c3095 100644 --- a/configure.ac +++ b/configure.ac @@ -243,6 +243,7 @@ AC_CONFIG_FILES([Makefile build-aux/templates/Makefile build-aux/qmi-codegen/Makefile src/Makefile + src/libqrtr-glib/Makefile src/libqmi-glib/Makefile src/libqmi-glib/qmi-version.h src/libqmi-glib/generated/Makefile @@ -285,9 +286,9 @@ echo " Features: QMUX over MBIM: ${enable_mbim_qmux} QMI username: ${QMI_USERNAME_ENABLED} (${QMI_USERNAME}) - QRTR: ${enable_qrtr} Built items: + libqrtr-glib: ${enable_qrtr} libqmi-glib: yes qmicli: yes qmi-firmware-update: ${build_firmware_update} diff --git a/docs/reference/libqmi-glib/libqmi-glib-common.sections b/docs/reference/libqmi-glib/libqmi-glib-common.sections index 1e8e1db9..dec79494 100644 --- a/docs/reference/libqmi-glib/libqmi-glib-common.sections +++ b/docs/reference/libqmi-glib/libqmi-glib-common.sections @@ -1563,3 +1563,21 @@ qmi_dms_dell_device_mode_get_type qmi_message_dms_dell_change_device_mode_input_get_type qmi_message_dms_dell_change_device_mode_output_get_type </SECTION> + +<SECTION> +<SUBSECTION Private> +QMI_DEVICE_NODE +QMI_ENDPOINT_QRTR +QMI_ENDPOINT_QRTR_CLASS +QMI_ENDPOINT_QRTR_GET_CLASS +QMI_IS_ENDPOINT_QRTR +QMI_IS_ENDPOINT_QRTR_CLASS +QMI_QRTR_SUPPORTED +QMI_TYPE_ENDPOINT_QRTR +QmiEndpointQrtr +QmiEndpointQrtrClass +QmiEndpointQrtrPrivate +qmi_device_new_from_node +qmi_endpoint_qrtr_get_type +qmi_endpoint_qrtr_new +</SECTION>
\ No newline at end of file diff --git a/src/Makefile.am b/src/Makefile.am index 1ef5d357..3ffb032d 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,5 +1,5 @@ -SUBDIRS = libqmi-glib qmicli qmi-proxy +SUBDIRS = libqrtr-glib libqmi-glib qmicli qmi-proxy if BUILD_FIRMWARE_UPDATE SUBDIRS += qmi-firmware-update diff --git a/src/libqmi-glib/Makefile.am b/src/libqmi-glib/Makefile.am index 5b9dcc0d..01e75789 100644 --- a/src/libqmi-glib/Makefile.am +++ b/src/libqmi-glib/Makefile.am @@ -20,6 +20,13 @@ libqmi_glib_compat_la_CPPFLAGS = \ -Wno-deprecated-declarations \ $(NULL) +if QMI_QRTR_SUPPORTED +libqmi_glib_compat_la_CPPFLAGS += \ + -I$(top_srcdir)/src/libqrtr-glib \ + -I$(top_builddir)/src/libqrtr-glib \ + $(NULL) +endif + libqmi_glib_compat_la_LDFLAGS = \ $(WARN_LDFLAGS) \ $(GLIB_LIBS) \ @@ -72,24 +79,33 @@ libqmi_glib_la_SOURCES = \ qmi-endpoint.h qmi-endpoint.c \ qmi-endpoint-qmux.h qmi-endpoint-qmux.c +libqmi_glib_la_LIBADD = \ + ${top_builddir}/src/libqmi-glib/generated/libqmi-glib-generated.la \ + libqmi-glib-compat.la \ + $(NULL) + if QMI_MBIM_QMUX_SUPPORTED libqmi_glib_la_SOURCES += \ qmi-endpoint-mbim.h qmi-endpoint-mbim.c endif if QMI_QRTR_SUPPORTED + +libqmi_glib_la_CPPFLAGS += \ + -I$(top_srcdir)/src/libqrtr-glib \ + -I$(top_builddir)/src/libqrtr-glib \ + $(NULL) + libqmi_glib_la_SOURCES += \ - qmi-qrtr-control-socket.h qmi-qrtr-control-socket.c \ - qmi-qrtr-node.h qmi-qrtr-node.c \ - qmi-qrtr-utils.h qmi-qrtr-utils.c \ - qmi-endpoint-qrtr.h qmi-endpoint-qrtr.c -endif + qmi-endpoint-qrtr.h qmi-endpoint-qrtr.c \ + $(NULL) -libqmi_glib_la_LIBADD = \ - ${top_builddir}/src/libqmi-glib/generated/libqmi-glib-generated.la \ - libqmi-glib-compat.la \ +libqmi_glib_la_LIBADD += \ + ${top_builddir}/src/libqrtr-glib/libqrtr-glib.la \ $(NULL) +endif + libqmi_glib_la_LDFLAGS = \ -version-info $(QMI_GLIB_LT_CURRENT):$(QMI_GLIB_LT_REVISION):$(QMI_GLIB_LT_AGE) \ $(WARN_CFLAGS) \ @@ -127,12 +143,5 @@ include_HEADERS = \ qmi-client.h \ qmi-proxy.h -if QMI_QRTR_SUPPORTED -include_HEADERS += \ - qmi-qrtr-control-socket.h \ - qmi-qrtr-node.h \ - qmi-qrtr-utils.h -endif - EXTRA_DIST = \ qmi-version.h.in diff --git a/src/libqmi-glib/generated/Makefile.am b/src/libqmi-glib/generated/Makefile.am index bb874d71..8e207ab5 100644 --- a/src/libqmi-glib/generated/Makefile.am +++ b/src/libqmi-glib/generated/Makefile.am @@ -336,6 +336,13 @@ libqmi_glib_generated_la_LDFLAGS = \ $(GLIB_LIBS) \ $(NULL) +if QMI_QRTR_SUPPORTED +libqmi_glib_generated_la_CPPFLAGS += \ + -I$(top_srcdir)/src/libqrtr-glib \ + -I$(top_builddir)/src/libqrtr-glib \ + $(NULL) +endif + includedir = @includedir@/libqmi-glib nodist_include_HEADERS = \ qmi-error-types.h \ diff --git a/src/libqmi-glib/libqmi-glib.h b/src/libqmi-glib/libqmi-glib.h index 06ba24cf..467421b7 100644 --- a/src/libqmi-glib/libqmi-glib.h +++ b/src/libqmi-glib/libqmi-glib.h @@ -37,12 +37,6 @@ #include "qmi-enums.h" #include "qmi-utils.h" -#if QMI_QRTR_SUPPORTED -#include "qmi-qrtr-control-socket.h" -#include "qmi-qrtr-node.h" -#include "qmi-qrtr-utils.h" -#endif - #include "qmi-compat.h" #include "qmi-enums-dms.h" @@ -99,4 +93,8 @@ #include "qmi-enum-types.h" #include "qmi-flags64-types.h" +#if QMI_QRTR_SUPPORTED +# include <libqrtr-glib.h> +#endif + #endif /* _LIBQMI_GLIB_H_ */ diff --git a/src/libqmi-glib/qmi-device.c b/src/libqmi-glib/qmi-device.c index 47c5d0b0..8b63e6ca 100644 --- a/src/libqmi-glib/qmi-device.c +++ b/src/libqmi-glib/qmi-device.c @@ -59,8 +59,8 @@ #include "qmi-version.h" #if QMI_QRTR_SUPPORTED -#include "qmi-endpoint-qrtr.h" -#include "qmi-qrtr-utils.h" +# include <libqrtr-glib.h> +# include "qmi-endpoint-qrtr.h" #endif static void async_initable_iface_init (GAsyncInitableIface *iface); diff --git a/src/libqmi-glib/qmi-device.h b/src/libqmi-glib/qmi-device.h index abad7e1f..7fec691c 100644 --- a/src/libqmi-glib/qmi-device.h +++ b/src/libqmi-glib/qmi-device.h @@ -37,7 +37,7 @@ #include "qmi-version.h" #if QMI_QRTR_SUPPORTED -#include "qmi-qrtr-node.h" +# include <libqrtr-glib.h> #endif G_BEGIN_DECLS @@ -101,17 +101,6 @@ typedef struct _QmiDevicePrivate QmiDevicePrivate; #define QMI_DEVICE_WWAN_IFACE "device-wwan-iface" /** - * QMI_DEVICE_NODE: - * - * Symbol defining the #QmiDevice:device-node property. - * - * Since: 1.24 - */ -#if QMI_QRTR_SUPPORTED -#define QMI_DEVICE_NODE "device-node" -#endif - -/** * QMI_DEVICE_SIGNAL_INDICATION: * * Symbol defining the #QmiDevice::indication signal. @@ -170,28 +159,6 @@ void qmi_device_new (GFile *file, gpointer user_data); /** - * qmi_device_new_from_node: - * @node: a #QrtrNode. - * @cancellable: optional #GCancellable object, #NULL to ignore. - * @callback: a #GAsyncReadyCallback to call when the initialization is finished. - * @user_data: the data to pass to callback function. - * - * Asynchronously creates a #QmiDevice object to manage @node. - * When the operation is finished, @callback will be invoked. You can then call - * qmi_device_new_finish() to get the result of the operation. - * - * Only available if libqmi was compiled with QRTR support. - * - * Since: 1.24 - */ -#if QMI_QRTR_SUPPORTED -void qmi_device_new_from_node (QrtrNode *node, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); -#endif - -/** * qmi_device_new_finish: * @res: a #GAsyncResult. * @error: Return location for error or %NULL. @@ -884,6 +851,38 @@ gboolean qmi_device_set_expected_data_format (QmiDevice *self QmiDeviceExpectedDataFormat format, GError **error); + +/******************************************************************************/ +/* New QRTR based APIs */ + +#if QMI_QRTR_SUPPORTED + +/** + * QMI_DEVICE_NODE: + * + * Symbol defining the #QmiDevice:device-node property. + */ +#define QMI_DEVICE_NODE "device-node" + +/** + * qmi_device_new_from_node: + * @node: a #QrtrNode. + * @cancellable: optional #GCancellable object, #NULL to ignore. + * @callback: a #GAsyncReadyCallback to call when the initialization is finished. + * @user_data: the data to pass to callback function. + * + * Asynchronously creates a #QmiDevice object to manage @node. + * When the operation is finished, @callback will be invoked. You can then call + * qmi_device_new_finish() to get the result of the operation. + * + * Only available if libqmi was compiled with QRTR support. + */ +void qmi_device_new_from_node (QrtrNode *node, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); +#endif /* QMI_QRTR_SUPPORTED */ + G_END_DECLS #endif /* _LIBQMI_GLIB_QMI_DEVICE_H_ */ diff --git a/src/libqmi-glib/qmi-endpoint-qrtr.c b/src/libqmi-glib/qmi-endpoint-qrtr.c index 3106cce2..09db8f9b 100644 --- a/src/libqmi-glib/qmi-endpoint-qrtr.c +++ b/src/libqmi-glib/qmi-endpoint-qrtr.c @@ -17,7 +17,8 @@ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * - * Copyright (C) 2019 Eric Caruso <ejcaruso@chromium.org> + * Copyright (C) 2019-2020 Eric Caruso <ejcaruso@chromium.org> + * Copyright (C) 2020 Aleksander Morgado <aleksander@aleksander.es> */ #include <errno.h> @@ -29,11 +30,12 @@ #include <gmodule.h> #include <gio/gio.h> +#include <libqrtr-glib.h> + #include "qmi-endpoint-qrtr.h" #include "qmi-errors.h" #include "qmi-error-types.h" #include "qmi-message.h" -#include "qmi-qrtr-utils.h" #define QMI_MESSAGE_OUTPUT_TLV_RESULT 0x02 diff --git a/src/libqmi-glib/qmi-endpoint-qrtr.h b/src/libqmi-glib/qmi-endpoint-qrtr.h index 4995495d..a765ff4c 100644 --- a/src/libqmi-glib/qmi-endpoint-qrtr.h +++ b/src/libqmi-glib/qmi-endpoint-qrtr.h @@ -17,14 +17,16 @@ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * - * Copyright (C) 2019 Eric Caruso <ejcaruso@chromium.org> + * Copyright (C) 2019-2020 Eric Caruso <ejcaruso@chromium.org> + * Copyright (C) 2020 Aleksander Morgado <aleksander@aleksander.es> */ #ifndef _LIBQMI_GLIB_QMI_ENDPOINT_QRTR_H_ #define _LIBQMI_GLIB_QMI_ENDPOINT_QRTR_H_ +#include <libqrtr-glib.h> + #include "qmi-endpoint.h" -#include "qmi-qrtr-node.h" #define QMI_TYPE_ENDPOINT_QRTR (qmi_endpoint_qrtr_get_type ()) #define QMI_ENDPOINT_QRTR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), QMI_TYPE_ENDPOINT_QRTR, QmiEndpointQrtr)) diff --git a/src/libqmi-glib/qmi-proxy.c b/src/libqmi-glib/qmi-proxy.c index a0297fbf..d3e3b6b4 100644 --- a/src/libqmi-glib/qmi-proxy.c +++ b/src/libqmi-glib/qmi-proxy.c @@ -41,7 +41,7 @@ #include "qmi-version.h" #if QMI_QRTR_SUPPORTED -#include "qmi-qrtr-utils.h" +# include "libqrtr-glib.h" #endif #define BUFFER_SIZE 512 diff --git a/src/libqmi-glib/qmi-version.h.in b/src/libqmi-glib/qmi-version.h.in index 0fedaace..257413aa 100644 --- a/src/libqmi-glib/qmi-version.h.in +++ b/src/libqmi-glib/qmi-version.h.in @@ -107,7 +107,7 @@ * #endif * ]| * - * Since: 1.24 + * Since: 1.26 */ #define QMI_QRTR_SUPPORTED @QMI_QRTR_SUPPORTED@ diff --git a/src/libqmi-glib/test/Makefile.am b/src/libqmi-glib/test/Makefile.am index f181f820..23ccece1 100644 --- a/src/libqmi-glib/test/Makefile.am +++ b/src/libqmi-glib/test/Makefile.am @@ -11,6 +11,13 @@ AM_CFLAGS = \ -DLIBQMI_GLIB_COMPILATION \ $(NULL) +if QMI_QRTR_SUPPORTED +AM_CFLAGS += \ + -I$(top_srcdir)/src/libqrtr-glib \ + -I$(top_builddir)/src/libqrtr-glib \ + $(NULL) +endif + AM_LDFLAGS = \ $(WARN_LDFLAGS) \ $(GLIB_LIBS) \ diff --git a/src/libqrtr-glib/Makefile.am b/src/libqrtr-glib/Makefile.am new file mode 100644 index 00000000..77a89053 --- /dev/null +++ b/src/libqrtr-glib/Makefile.am @@ -0,0 +1,39 @@ + +# ship under libqmi-glib for now +includedir = @includedir@/libqmi-glib + +if QMI_QRTR_SUPPORTED + +noinst_LTLIBRARIES = libqrtr-glib.la + +libqrtr_glib_la_CPPFLAGS = \ + $(WARN_CFLAGS) \ + $(GLIB_CFLAGS) \ + -I$(top_srcdir) \ + -I$(top_builddir) \ + -I$(top_srcdir)/src/libqrtr-glib \ + -I$(top_builddir)/src/libqrtr-glib \ + -DLIBQRTR_GLIB_COMPILATION \ + -DLIBEXEC_PATH=\""$(libexecdir)"\" \ + -DG_LOG_DOMAIN=\"Qrtr\" \ + $(NULL) + +libqrtr_glib_la_SOURCES = \ + libqrtr-glib.h \ + qrtr-control-socket.h qrtr-control-socket.c \ + qrtr-node.h qrtr-node.c \ + qrtr-utils.h qrtr-utils.c \ + $(NULL) + +libqrtr_glib_la_LDFLAGS = \ + $(WARN_CFLAGS) \ + $(GLIB_LIBS) \ + $(NULL) + +include_HEADERS = \ + qrtr-control-socket.h \ + qrtr-node.h \ + qrtr-utils.h \ + $(NULL) + +endif diff --git a/src/libqrtr-glib/libqrtr-glib.h b/src/libqrtr-glib/libqrtr-glib.h new file mode 100644 index 00000000..cfe5a77b --- /dev/null +++ b/src/libqrtr-glib/libqrtr-glib.h @@ -0,0 +1,33 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * libqrtr-glib -- GLib/GIO based library to control QRTR 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) 2020 Eric Caruso <ejcaruso@chromium.org> + * Copyright (C) 2020 Aleksander Morgado <aleksander@aleksander.es> + */ + +#ifndef _LIBQRTR_GLIB_H_ +#define _LIBQRTR_GLIB_H_ + +#define __LIBQRTR_GLIB_H_INSIDE__ + +#include "qrtr-control-socket.h" +#include "qrtr-node.h" +#include "qrtr-utils.h" + +#endif /* _LIBQRTR_GLIB_H_ */ diff --git a/src/libqmi-glib/qmi-qrtr-control-socket.c b/src/libqrtr-glib/qrtr-control-socket.c index 45b3519e..6cdb310b 100644 --- a/src/libqmi-glib/qmi-qrtr-control-socket.c +++ b/src/libqrtr-glib/qrtr-control-socket.c @@ -1,6 +1,6 @@ /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* - * libqmi-glib -- GLib/GIO based library to control QMI devices + * libqrtr-glib -- GLib/GIO based library to control QRTR devices * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -17,7 +17,8 @@ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * - * Copyright (C) 2019 Eric Caruso <ejcaruso@chromium.org> + * Copyright (C) 2019-2020 Eric Caruso <ejcaruso@chromium.org> + * Copyright (C) 2020 Aleksander Morgado <aleksander@aleksander.es> */ #include <endian.h> @@ -29,10 +30,9 @@ #include <gio/gio.h> -#include "qmi-qrtr-control-socket.h" -#include "qmi-qrtr-node.h" -#include "qmi-qrtr-utils.h" -#include "qmi-enums.h" +#include "qrtr-control-socket.h" +#include "qrtr-node.h" +#include "qrtr-utils.h" static void initable_iface_init (GInitableIface *iface); @@ -134,7 +134,7 @@ static void add_service_info (QrtrControlSocket *self, guint32 node_id, guint32 port, - QmiService service, + guint32 service, guint32 version, guint32 instance) { @@ -161,7 +161,7 @@ static void remove_service_info (QrtrControlSocket *self, guint32 node_id, guint32 port, - QmiService service, + guint32 service, guint32 version, guint32 instance) { @@ -199,7 +199,7 @@ qrtr_ctrl_message_cb (GSocket *gsocket, guint32 type; guint32 node_id; guint32 port; - QmiService service; + guint32 service; guint32 version; guint32 instance; @@ -227,7 +227,7 @@ qrtr_ctrl_message_cb (GSocket *gsocket, /* type is something we handle, parse the packet */ node_id = GUINT32_FROM_LE (ctrl_packet.server.node); port = GUINT32_FROM_LE (ctrl_packet.server.port); - service = (QmiService)GUINT32_FROM_LE (ctrl_packet.server.service); + service = GUINT32_FROM_LE (ctrl_packet.server.service); version = GUINT32_FROM_LE (ctrl_packet.server.instance) & 0xff; instance = GUINT32_FROM_LE (ctrl_packet.server.instance) >> 8; @@ -322,7 +322,7 @@ initable_init (GInitable *initable, GError **error) { QrtrControlSocket *self; - int fd; + gint fd; self = QRTR_CONTROL_SOCKET (initable); @@ -341,8 +341,10 @@ initable_init (GInitable *initable, g_socket_set_timeout (self->priv->socket, 0); - if (!send_new_lookup_ctrl_packet (self, error)) + if (!send_new_lookup_ctrl_packet (self, error)) { + close (fd); return FALSE; + } setup_socket_source (self); return TRUE; diff --git a/src/libqmi-glib/qmi-qrtr-control-socket.h b/src/libqrtr-glib/qrtr-control-socket.h index bdfbd3a7..2c9754ad 100644 --- a/src/libqmi-glib/qmi-qrtr-control-socket.h +++ b/src/libqrtr-glib/qrtr-control-socket.h @@ -1,6 +1,6 @@ /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* - * libqmi-glib -- GLib/GIO based library to control QMI devices + * libqrtr-glib -- GLib/GIO based library to control QRTR devices * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -17,25 +17,26 @@ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * - * Copyright (C) 2019 Eric Caruso <ejcaruso@chromium.org> + * Copyright (C) 2019-2020 Eric Caruso <ejcaruso@chromium.org> + * Copyright (C) 2020 Aleksander Morgado <aleksander@aleksander.es> */ -#ifndef _LIBQMI_GLIB_QMI_QRTR_CONTROL_SOCKET_H_ -#define _LIBQMI_GLIB_QMI_QRTR_CONTROL_SOCKET_H_ +#ifndef _LIBQRTR_GLIB_QRTR_CONTROL_SOCKET_H_ +#define _LIBQRTR_GLIB_QRTR_CONTROL_SOCKET_H_ -#if !defined (__LIBQMI_GLIB_H_INSIDE__) && !defined (LIBQMI_GLIB_COMPILATION) -#error "Only <libqmi-glib.h> can be included directly." +#if !defined (__LIBQRTR_GLIB_H_INSIDE__) && !defined (LIBQRTR_GLIB_COMPILATION) +#error "Only <libqrtr-glib.h> can be included directly." #endif #include <glib-object.h> #include <gio/gio.h> -#include "qmi-qrtr-node.h" +#include "qrtr-node.h" G_BEGIN_DECLS /** - * SECTION:qrtr-control-socket + * SECTION: qrtr-control-socket * @title: QrtrControlSocket * @short_description: QRTR bus observer and device event listener * @@ -71,8 +72,6 @@ GType qrtr_control_socket_get_type (void); * QRTR_CONTROL_SOCKET_SIGNAL_NODE_ADDED: * * Symbol defining the #QrtrControlSocket::qrtr-node-added signal. - * - * Since: 1.24 */ #define QRTR_CONTROL_SOCKET_SIGNAL_NODE_ADDED "qrtr-node-added" @@ -80,8 +79,6 @@ GType qrtr_control_socket_get_type (void); * QRTR_CONTROL_SOCKET_SIGNAL_NODE_REMOVED: * * Symbol defining the #QrtrControlSocket::qrtr-node-removed signal. - * - * Since: 1.24 */ #define QRTR_CONTROL_SOCKET_SIGNAL_NODE_REMOVED "qrtr-node-removed" @@ -93,8 +90,6 @@ GType qrtr_control_socket_get_type (void); * Creates a #QrtrControlSocket object. * * Returns: A newly created #QrtrControlSocket, or %NULL if @error is set. - * - * Since: 1.24 */ QrtrControlSocket *qrtr_control_socket_new (GCancellable *cancellable, GError **error); @@ -105,12 +100,10 @@ QrtrControlSocket *qrtr_control_socket_new (GCancellable *cancellable, * * Returns a #QrtrNode object representing the device with the given node ID * on the QRTR bus. - * - * Since: 1.24 */ QrtrNode *qrtr_control_socket_get_node (QrtrControlSocket *socket, guint32 node_id); G_END_DECLS -#endif /* _LIBQMI_GLIB_QMI_QRTR_CONTROL_SOCKET_H_ */ +#endif /* _LIBQRTR_GLIB_QRTR_CONTROL_SOCKET_H_ */ diff --git a/src/libqmi-glib/qmi-qrtr-node.c b/src/libqrtr-glib/qrtr-node.c index 77b49992..e3845134 100644 --- a/src/libqmi-glib/qmi-qrtr-node.c +++ b/src/libqrtr-glib/qrtr-node.c @@ -1,6 +1,6 @@ /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* - * libqmi-glib -- GLib/GIO based library to control QMI devices + * libqrtr-glib -- GLib/GIO based library to control QRTR devices * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -17,7 +17,8 @@ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * - * Copyright (C) 2019 Eric Caruso <ejcaruso@chromium.org> + * Copyright (C) 2019-2020 Eric Caruso <ejcaruso@chromium.org> + * Copyright (C) 2020 Aleksander Morgado <aleksander@aleksander.es> */ #include <endian.h> @@ -30,8 +31,8 @@ #include <gio/gio.h> #include <gmodule.h> -#include "qmi-qrtr-control-socket.h" -#include "qmi-qrtr-node.h" +#include "qrtr-control-socket.h" +#include "qrtr-node.h" G_DEFINE_TYPE (QrtrNode, qrtr_node, G_TYPE_OBJECT) @@ -50,7 +51,7 @@ struct _QrtrNodePrivate { }; struct QrtrServiceInfo { - QmiService service; + guint32 service; guint32 port; guint32 version; guint32 instance; @@ -72,9 +73,8 @@ static guint signals[SIGNAL_LAST] = { 0 }; /*****************************************************************************/ static void -node_removed_cb (QrtrControlSocket *socket, - guint node_id, - QrtrNode *self) +node_removed_cb (QrtrNode *self, + guint node_id) { if (node_id != self->priv->node_id) return; @@ -105,11 +105,13 @@ list_holder_free (struct ListHolder *list_holder) } static void -service_index_add_info (GHashTable *service_index, QmiService service, +service_index_add_info (GHashTable *service_index, + guint32 service, struct QrtrServiceInfo *info) { - struct ListHolder *service_instances = g_hash_table_lookup (service_index, - GUINT_TO_POINTER (service)); + struct ListHolder *service_instances; + + service_instances = g_hash_table_lookup (service_index, GUINT_TO_POINTER (service)); if (!service_instances) { service_instances = g_slice_new0 (struct ListHolder); g_hash_table_insert (service_index, GUINT_TO_POINTER (service), service_instances); @@ -119,11 +121,13 @@ service_index_add_info (GHashTable *service_index, QmiService service, } static void -service_index_remove_info (GHashTable *service_index, QmiService service, +service_index_remove_info (GHashTable *service_index, + guint32 service, struct QrtrServiceInfo *info) { - struct ListHolder *service_instances = g_hash_table_lookup (service_index, - GUINT_TO_POINTER (service)); + struct ListHolder *service_instances; + + service_instances = g_hash_table_lookup (service_index, GUINT_TO_POINTER (service)); if (!service_instances) return; @@ -132,7 +136,7 @@ service_index_remove_info (GHashTable *service_index, QmiService service, void qrtr_node_add_service_info (QrtrNode *node, - QmiService service, + guint32 service, guint32 port, guint32 version, guint32 instance) @@ -151,7 +155,7 @@ qrtr_node_add_service_info (QrtrNode *node, void qrtr_node_remove_service_info (QrtrNode *node, - QmiService service, + guint32 service, guint32 port, guint32 version, guint32 instance) @@ -174,7 +178,8 @@ qrtr_node_remove_service_info (QrtrNode *node, /*****************************************************************************/ gint32 -qrtr_node_lookup_port (QrtrNode *node, QmiService service) +qrtr_node_lookup_port (QrtrNode *node, + guint32 service) { struct ListHolder *service_instances; struct QrtrServiceInfo *info; @@ -188,12 +193,14 @@ qrtr_node_lookup_port (QrtrNode *node, QmiService service) return info->port; } -QmiService -qrtr_node_lookup_service (QrtrNode *node, guint32 port) +gint32 +qrtr_node_lookup_service (QrtrNode *node, + guint32 port) { - struct QrtrServiceInfo *info = - g_hash_table_lookup (node->priv->port_index, GUINT_TO_POINTER (port)); - return info ? info->service : QMI_SERVICE_UNKNOWN; + struct QrtrServiceInfo *info; + + info = g_hash_table_lookup (node->priv->port_index, GUINT_TO_POINTER (port)); + return info ? (gint32)info->service : -1; } /*****************************************************************************/ @@ -213,23 +220,25 @@ qrtr_node_id (QrtrNode *node) /*****************************************************************************/ QrtrNode * -qrtr_node_new (QrtrControlSocket* socket, guint32 node_id) +qrtr_node_new (QrtrControlSocket *socket, + guint32 node_id) { - QrtrNode *node = g_object_new (QRTR_TYPE_NODE, NULL); + QrtrNode *self; + + self = g_object_new (QRTR_TYPE_NODE, NULL); - node->priv->socket = g_object_ref (socket); - node->priv->node_id = node_id; - node->priv->node_removed_id = g_signal_connect (node->priv->socket, - QRTR_CONTROL_SOCKET_SIGNAL_NODE_REMOVED, - G_CALLBACK (node_removed_cb), - node); + self->priv->socket = g_object_ref (socket); + self->priv->node_id = node_id; + self->priv->node_removed_id = g_signal_connect_swapped (self->priv->socket, + QRTR_CONTROL_SOCKET_SIGNAL_NODE_REMOVED, + G_CALLBACK (node_removed_cb), + self); - node->priv->service_list = NULL; - node->priv->service_index = g_hash_table_new_full (g_direct_hash, g_direct_equal, + self->priv->service_index = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify)list_holder_free); - node->priv->port_index = g_hash_table_new (g_direct_hash, g_direct_equal); + self->priv->port_index = g_hash_table_new (g_direct_hash, g_direct_equal); - return node; + return self; } static void diff --git a/src/libqmi-glib/qmi-qrtr-node.h b/src/libqrtr-glib/qrtr-node.h index 4e6d9b70..b81d335a 100644 --- a/src/libqmi-glib/qmi-qrtr-node.h +++ b/src/libqrtr-glib/qrtr-node.h @@ -1,6 +1,6 @@ /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* - * libqmi-glib -- GLib/GIO based library to control QMI devices + * libqrtr-glib -- GLib/GIO based library to control QRTR devices * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -17,24 +17,23 @@ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * - * Copyright (C) 2019 Eric Caruso <ejcaruso@chromium.org> + * Copyright (C) 2019-2020 Eric Caruso <ejcaruso@chromium.org> + * Copyright (C) 2020 Aleksander Morgado <aleksander@aleksander.es> */ -#ifndef _LIBQMI_GLIB_QMI_QRTR_NODE_H_ -#define _LIBQMI_GLIB_QMI_QRTR_NODE_H_ +#ifndef _LIBQRTR_GLIB_QRTR_NODE_H_ +#define _LIBQRTR_GLIB_QRTR_NODE_H_ -#if !defined (__LIBQMI_GLIB_H_INSIDE__) && !defined (LIBQMI_GLIB_COMPILATION) -#error "Only <libqmi-glib.h> can be included directly." +#if !defined (__LIBQRTR_GLIB_H_INSIDE__) && !defined (LIBQRTR_GLIB_COMPILATION) +#error "Only <libqrtr-glib.h> can be included directly." #endif #include <glib-object.h> -#include "qmi-enums.h" - G_BEGIN_DECLS /* Forward declare QrtrControlSocket for qrtr_node_new. */ -struct _QrtrControlSocket; +typedef struct _QrtrControlSocket QrtrControlSocket; /** * SECTION:qrtr-node @@ -71,8 +70,6 @@ GType qrtr_node_get_type (void); * QRTR_NODE_SIGNAL_REMOVED: * * Symbol defining the #QrtrNode::removed signal. - * - * Since: 1.24 */ #define QRTR_NODE_SIGNAL_REMOVED "removed" @@ -80,8 +77,6 @@ GType qrtr_node_get_type (void); * qrtr_node_has_services: * * Returns TRUE if there are services currently registered on this node. - * - * Since: 1.24 */ gboolean qrtr_node_has_services (QrtrNode *node); @@ -89,8 +84,6 @@ gboolean qrtr_node_has_services (QrtrNode *node); * qrtr_node_id: * * Returns the node id of the QRTR node represented by @node. - * - * Since: 1.24 */ guint32 qrtr_node_id (QrtrNode *node); @@ -102,52 +95,61 @@ guint32 qrtr_node_id (QrtrNode *node); * return the port number of that service. Otherwise, return -1. This will * return the service with the highest version number if multiple instances * are registered. - * - * Since: 1.24 */ -gint32 qrtr_node_lookup_port (QrtrNode *node, QmiService service); +gint32 qrtr_node_lookup_port (QrtrNode *node, + guint32 service); /** * qrtr_node_lookup_service: * @port: a port number * * If a server has announced itself for the given node and port number, - * return the QMI service it serves. Otherwise, return @QMI_SERVICE_UNKNOWN. - * - * Since: 1.24 + * return the service it serves. Otherwise, return -1. */ -QmiService qrtr_node_lookup_service (QrtrNode *node, guint32 port); +gint32 qrtr_node_lookup_service (QrtrNode *node, + guint32 port); G_END_DECLS -/* +/** * qrtr_node_new: - * @socket: the control socket that created this QrtrNode - * @node: the node number of this QrtrNode + * @socket: the control socket that created this QrtrNode. + * @node: the node number of this QrtrNode. + * + * Create a new QRTR node. */ -QrtrNode *qrtr_node_new (struct _QrtrControlSocket *socket, guint32 node); +QrtrNode *qrtr_node_new (QrtrControlSocket *socket, + guint32 node); -/* +/** * qrtr_node_add_service_info: - * @service: a #QmiService value representing this service - * @port: the port number of the new service - * @version: the version number of the new service - * @instance: the instance number of the new service + * @service: a service value. + * @port: the port number of the new service. + * @version: the version number of the new service. + * @instance: the instance number of the new service. + * + * Adds the given service entry to this node. * - * Adds the given service entry to this node. Should only be called by the - * #QrtrControlSocket. + * Should only be called by the #QrtrControlSocket. */ -void qrtr_node_add_service_info (QrtrNode *node, QmiService service, guint32 port, - guint32 version, guint32 instance); +void qrtr_node_add_service_info (QrtrNode *node, + guint32 service, + guint32 port, + guint32 version, + guint32 instance); -/* +/** * qrtr_node_remove_service_info: - * @info: a #QrtrServceInfo struct + * @info: a #QrtrServceInfo struct. + * + * Removes the given service entry from this node. * - * Removes the given service entry from this node. Should only be called by the - * #QrtrControlSocket. + * Should only be called by the #QrtrControlSocket. */ -void qrtr_node_remove_service_info (QrtrNode *node, QmiService service, guint32 port, - guint32 version, guint32 instance); +void qrtr_node_remove_service_info (QrtrNode *node, + guint32 service, + guint32 port, + guint32 version, + guint32 instance); -#endif /* _LIBQMI_GLIB_QMI_QRTR_NODE_H_ */ +#endif /* _LIBQRTR_GLIB_QRTR_NODE_H_ */ diff --git a/src/libqmi-glib/qmi-qrtr-utils.c b/src/libqrtr-glib/qrtr-utils.c index 552041a7..2a449a95 100644 --- a/src/libqmi-glib/qmi-qrtr-utils.c +++ b/src/libqrtr-glib/qrtr-utils.c @@ -1,6 +1,6 @@ /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* - * libqmi-glib -- GLib/GIO based library to control QMI devices + * libqrtr-glib -- GLib/GIO based library to control QRTR devices * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -17,18 +17,17 @@ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * - * Copyright (C) 2019 Eric Caruso <ejcaruso@chromium.org> + * Copyright (C) 2019-2020 Eric Caruso <ejcaruso@chromium.org> + * Copyright (C) 2020 Aleksander Morgado <aleksander@aleksander.es> */ -#include "qmi-qrtr-utils.h" +#include "qrtr-utils.h" #include <stdlib.h> #include <string.h> -#include "qmi-errors.h" -#include "qmi-error-types.h" -#include "qmi-qrtr-control-socket.h" -#include "qmi-qrtr-node.h" +#include "qrtr-control-socket.h" +#include "qrtr-node.h" /* Some kernels expose the qrtr header but not the address family macro. */ #if !defined AF_QIPCRTR @@ -107,8 +106,8 @@ timeout_cb (GTask *task) ctx->node_added_id = 0; g_task_return_new_error (task, - QMI_CORE_ERROR, - QMI_CORE_ERROR_TIMEOUT, + G_IO_ERROR, + G_IO_ERROR_TIMED_OUT, "QRTR node %u did not appear on the bus", ctx->node_wanted); g_object_unref (task); diff --git a/src/libqmi-glib/qmi-qrtr-utils.h b/src/libqrtr-glib/qrtr-utils.h index 8573e4b4..a5fcd829 100644 --- a/src/libqmi-glib/qmi-qrtr-utils.h +++ b/src/libqrtr-glib/qrtr-utils.h @@ -1,6 +1,6 @@ /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* - * libqmi-glib -- GLib/GIO based library to control QMI devices + * libqrtr-glib -- GLib/GIO based library to control QRTR devices * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -17,16 +17,17 @@ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * - * Copyright (C) 2019 Eric Caruso <ejcaruso@chromium.org> + * Copyright (C) 2019-2020 Eric Caruso <ejcaruso@chromium.org> + * Copyright (C) 2020 Aleksander Morgado <aleksander@aleksander.es> */ -#ifndef _LIBQMI_GLIB_QRTR_UTILS_H_ -#define _LIBQMI_GLIB_QRTR_UTILS_H_ +#ifndef _LIBQRTR_GLIB_QRTR_UTILS_H_ +#define _LIBQRTR_GLIB_QRTR_UTILS_H_ #include <gio/gio.h> #include <glib.h> -#include "qmi-qrtr-node.h" +#include "qrtr-node.h" /** * qrtr_get_uri_for_node: @@ -35,10 +36,6 @@ * Build a URI for the given QRTR node. * * Returns: a string with the URI, or %NULL if none given. The returned value should be freed with g_free(). - * - * Only available if libqmi was compiled with QRTR support. - * - * Since: 1.24 */ gchar *qrtr_get_uri_for_node (guint32 node_id); @@ -49,10 +46,6 @@ gchar *qrtr_get_uri_for_node (guint32 node_id); * * Get the QRTR node id from the specified URI. * - * Only available if libqmi was compiled with QRTR support. - * - * Since: 1.24 - * * Returns: %TRUE if @node_id is set, %FALSE otherwise. */ gboolean qrtr_get_node_for_uri (const gchar *uri, @@ -69,10 +62,6 @@ gboolean qrtr_get_node_for_uri (const gchar *uri, * Asynchronously creates a #QrtrNode for a given node id. * When the operation is finished, @callback will be invoked. You can then call * qmi_device_new_finish() to get the result of the operation. - * - * Only available if libqmi was compiled with QRTR support. - * - * Since: 1.24 */ void qrtr_node_for_id (guint32 node_id, guint timeout, @@ -87,13 +76,9 @@ void qrtr_node_for_id (guint32 node_id, * * Finishes an operation started with qrtr_node_for_id(). * - * Only available if libqmi was compiled with QRTR support. - * * Returns: A newly created #QrtrNode, or %NULL if @error is set. - * - * Since: 1.24 */ QrtrNode *qrtr_node_for_id_finish (GAsyncResult *res, GError **error); -#endif /* _LIBQMI_GLIB_QRTR_UTILS_H_ */ +#endif /* _LIBQRTR_GLIB_QRTR_UTILS_H_ */ diff --git a/src/qmi-firmware-update/Makefile.am b/src/qmi-firmware-update/Makefile.am index a8ff9642..6a8275d9 100644 --- a/src/qmi-firmware-update/Makefile.am +++ b/src/qmi-firmware-update/Makefile.am @@ -16,6 +16,13 @@ libutils_la_CPPFLAGS = \ -I$(top_builddir)/src/libqmi-glib/generated \ $(NULL) +if QMI_QRTR_SUPPORTED +libutils_la_CPPFLAGS += \ + -I$(top_srcdir)/src/libqrtr-glib \ + -I$(top_builddir)/src/libqrtr-glib \ + $(NULL) +endif + libutils_la_LIBADD = \ $(top_builddir)/src/libqmi-glib/libqmi-glib.la \ $(NULL) @@ -53,6 +60,13 @@ qmi_firmware_update_CPPFLAGS = \ -I$(top_builddir)/src/libqmi-glib/generated \ $(NULL) +if QMI_QRTR_SUPPORTED +qmi_firmware_update_CPPFLAGS += \ + -I$(top_srcdir)/src/libqrtr-glib \ + -I$(top_builddir)/src/libqrtr-glib \ + $(NULL) +endif + ENUMS = \ $(top_srcdir)/src/qmi-firmware-update/qfu-image.h \ $(top_srcdir)/src/qmi-firmware-update/qfu-qdl-message.h \ diff --git a/src/qmi-firmware-update/test/Makefile.am b/src/qmi-firmware-update/test/Makefile.am index 4519149b..306e6abc 100644 --- a/src/qmi-firmware-update/test/Makefile.am +++ b/src/qmi-firmware-update/test/Makefile.am @@ -12,6 +12,13 @@ AM_CFLAGS = \ -DLIBQMI_GLIB_COMPILATION \ $(NULL) +if QMI_QRTR_SUPPORTED +AM_CFLAGS += \ + -I$(top_srcdir)/src/libqrtr-glib \ + -I$(top_builddir)/src/libqrtr-glib \ + $(NULL) +endif + AM_LDFLAGS = \ $(WARN_LDFLAGS) \ $(GLIB_LIBS) \ diff --git a/src/qmi-proxy/Makefile.am b/src/qmi-proxy/Makefile.am index 4bbfd6d2..b4fc6455 100644 --- a/src/qmi-proxy/Makefile.am +++ b/src/qmi-proxy/Makefile.am @@ -7,7 +7,15 @@ qmi_proxy_CPPFLAGS = \ -I$(top_srcdir)/src/libqmi-glib \ -I$(top_srcdir)/src/libqmi-glib/generated \ -I$(top_builddir)/src/libqmi-glib \ - -I$(top_builddir)/src/libqmi-glib/generated + -I$(top_builddir)/src/libqmi-glib/generated \ + $(NULL) + +if QMI_QRTR_SUPPORTED +qmi_proxy_CPPFLAGS += \ + -I$(top_srcdir)/src/libqrtr-glib \ + -I$(top_builddir)/src/libqrtr-glib \ + $(NULL) +endif qmi_proxy_SOURCES = qmi-proxy.c diff --git a/src/qmicli/Makefile.am b/src/qmicli/Makefile.am index bc434ce8..1316f2e5 100644 --- a/src/qmicli/Makefile.am +++ b/src/qmicli/Makefile.am @@ -14,6 +14,13 @@ libhelpers_la_CPPFLAGS = \ -I$(top_builddir)/src/libqmi-glib/generated \ $(NULL) +if QMI_QRTR_SUPPORTED +libhelpers_la_CPPFLAGS += \ + -I$(top_srcdir)/src/libqrtr-glib \ + -I$(top_builddir)/src/libqrtr-glib \ + $(NULL) +endif + libhelpers_la_SOURCES = \ qmicli-helpers.c \ qmicli-helpers.h \ @@ -37,6 +44,13 @@ qmicli_CPPFLAGS = \ -I$(top_builddir)/src/libqmi-glib/generated \ $(NULL) +if QMI_QRTR_SUPPORTED +qmicli_CPPFLAGS += \ + -I$(top_srcdir)/src/libqrtr-glib \ + -I$(top_builddir)/src/libqrtr-glib \ + $(NULL) +endif + qmicli_SOURCES = \ qmicli.c \ qmicli.h \ diff --git a/src/qmicli/test/Makefile.am b/src/qmicli/test/Makefile.am index 01dd3114..ae35ea5f 100644 --- a/src/qmicli/test/Makefile.am +++ b/src/qmicli/test/Makefile.am @@ -17,6 +17,13 @@ test_helpers_CPPFLAGS = \ -I$(top_builddir)/src/libqmi-glib \ -I$(top_builddir)/src/libqmi-glib/generated +if QMI_QRTR_SUPPORTED +test_helpers_CPPFLAGS += \ + -I$(top_srcdir)/src/libqrtr-glib \ + -I$(top_builddir)/src/libqrtr-glib \ + $(NULL) +endif + test_helpers_LDADD = \ $(GLIB_LIBS) \ $(top_builddir)/src/qmicli/libhelpers.la \ |