From 00b341c77f76f6fc28c7f1f04e3b4a9ac85e3d4c Mon Sep 17 00:00:00 2001 From: Alexander Couzens Date: Wed, 26 Jul 2017 02:10:37 +0200 Subject: [PATCH] NOT_FOR_MERGE: decode qmi messages with libqmi --- Makefile.am | 7 +++--- drivers/qmimodem/qmi.c | 4 ++++ drivers/qmimodem/qmibridge.c | 43 ++++++++++++++++++++++++++++++++++++ drivers/qmimodem/qmibridge.h | 3 +++ 4 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 drivers/qmimodem/qmibridge.c create mode 100644 drivers/qmimodem/qmibridge.h diff --git a/Makefile.am b/Makefile.am index a30d27af..1254a8de 100644 --- a/Makefile.am +++ b/Makefile.am @@ -295,7 +295,8 @@ builtin_sources += $(qmi_sources) \ drivers/qmimodem/lte.c \ drivers/qmimodem/radio-settings.c \ drivers/qmimodem/location-reporting.c \ - drivers/qmimodem/netmon.c + drivers/qmimodem/netmon.c \ + drivers/qmimodem/qmibridge.c builtin_modules += gobi builtin_sources += plugins/gobi.c @@ -729,7 +730,7 @@ src_ofonod_SOURCES = $(builtin_sources) $(gatchat_sources) \ src/netmonagent.c src/netmonagent.h src/call-list.c src_ofonod_LDADD = gdbus/libgdbus-internal.la $(builtin_libadd) $(ell_ldadd) \ - @GLIB_LIBS@ @DBUS_LIBS@ -ldl + @GLIB_LIBS@ @DBUS_LIBS@ -ldl -lqmi-glib src_ofonod_LDFLAGS = -Wl,--export-dynamic \ -Wl,--version-script=$(srcdir)/src/ofono.ver @@ -752,7 +753,7 @@ AM_CFLAGS = @DBUS_CFLAGS@ @GLIB_CFLAGS@ $(ell_cflags) $(builtin_cflags) \ AM_CPPFLAGS = -I$(builddir)/include -I$(builddir)/src -I$(srcdir)/src \ -I$(srcdir)/gdbus -I$(srcdir)/gisi -I$(srcdir)/gatchat \ - -I$(srcdir)/btio -I$(srcdir)/gril + -I$(srcdir)/btio -I$(srcdir)/gril -I/usr/include/libqmi-glib doc_files = doc/overview.txt doc/ofono-paper.txt doc/release-faq.txt \ doc/manager-api.txt doc/modem-api.txt doc/network-api.txt \ diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index 4cd1530f..59aa9b1e 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -37,6 +37,7 @@ #include +#include "qmibridge.h" #include "qmi.h" #include "ctl.h" @@ -664,6 +665,8 @@ static gboolean can_write_data(GIOChannel *channel, GIOCondition cond, __debug_msg(' ', req->buf, bytes_written, device->debug_func, device->debug_data); + qmibridge_decode_req(req->buf, req->len); + hdr = req->buf; if (hdr->service == QMI_SERVICE_CONTROL) @@ -874,6 +877,7 @@ static gboolean received_data(GIOChannel *channel, GIOCondition cond, __hexdump('<', buf, bytes_read, device->debug_func, device->debug_data); + qmibridge_decode_read(buf, bytes_read); offset = 0; while (offset < bytes_read) { diff --git a/drivers/qmimodem/qmibridge.c b/drivers/qmimodem/qmibridge.c new file mode 100644 index 00000000..1cdb91b2 --- /dev/null +++ b/drivers/qmimodem/qmibridge.c @@ -0,0 +1,43 @@ + +#include + +#include +#include + +#include + +#include + +static void ask_qmi(const char *prefix, void *data, size_t len) +{ + /* from osmo-qcdiag */ + GByteArray *buffer; + GError *error = NULL; + QmiMessage *message; + gchar *printable; + + buffer = g_byte_array_sized_new(len); + g_byte_array_append(buffer, data, len); + + message = qmi_message_new_from_raw(buffer, &error); + if (!message) { + fprintf(stderr, "qmi_message_new_from_raw() returned NULL\n"); + return; + } + + printable = qmi_message_get_printable(message, "QMI "); + DBG("%s: %s", prefix, printable); + + qmi_message_unref(message); + g_byte_array_free(buffer, TRUE); + g_free(printable); +} +void qmibridge_decode_read(void *data, size_t len) +{ + ask_qmi("READ", data, len); +} + +void qmibridge_decode_req(void *data, size_t len) +{ + ask_qmi("_REQ", data, len); +} diff --git a/drivers/qmimodem/qmibridge.h b/drivers/qmimodem/qmibridge.h new file mode 100644 index 00000000..96f8adc5 --- /dev/null +++ b/drivers/qmimodem/qmibridge.h @@ -0,0 +1,3 @@ + +void qmibridge_decode_read(void *data, size_t len); +void qmibridge_decode_req(void *data, size_t len);