aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-04-24 12:03:58 +0200
committerAleksander Morgado <aleksander@lanedo.com>2012-07-03 16:08:48 +0200
commitd3d9360d4998a1d5ba96e5f8d93229afd7941915 (patch)
treebdea21db15559b1b98ff37cf95ef099d3492b4af
parent82b79618934398bb65af4e7afb9056d744e48d1c (diff)
downloadexternal_libqmi-d3d9360d4998a1d5ba96e5f8d93229afd7941915.zip
external_libqmi-d3d9360d4998a1d5ba96e5f8d93229afd7941915.tar.gz
external_libqmi-d3d9360d4998a1d5ba96e5f8d93229afd7941915.tar.bz2
message: improve printable string
The user can now pass a prefix to be used in every printed string; and we also decode some of the values from the message into human-readable strings.
-rw-r--r--src/Makefile.am2
-rw-r--r--src/qmi-device.c4
-rw-r--r--src/qmi-message.c81
-rw-r--r--src/qmi-message.h3
4 files changed, 60 insertions, 30 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index df92fd1..16b54ac 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -40,7 +40,7 @@ qmi-enum-types.c: qmi-enums.h qmi-enum-types.h $(top_srcdir)/build-aux/qmi-enum-
qmi-device.c: qmi-error-types.h
qmi-client.c: qmi-error-types.h qmi-enum-types.h
qmi-client-ctl.c: qmi-error-types.h qmi-enum-types.h
-qmi-message.c: qmi-error-types.h
+qmi-message.c: qmi-error-types.h qmi-enum-types.h
qmi-message-ctl.c: qmi-error-types.h
qmi-message-dms.c: qmi-error-types.h
diff --git a/src/qmi-device.c b/src/qmi-device.c
index 345d2e7..5d103e3 100644
--- a/src/qmi-device.c
+++ b/src/qmi-device.c
@@ -400,7 +400,7 @@ parse_response (QmiDevice *self)
{
gchar *printable;
- printable = qmi_message_get_printable (message);
+ printable = qmi_message_get_printable (message, ">>>>>> ");
g_debug ("[%s] Received message...\n%s",
self->priv->path_display,
printable);
@@ -767,7 +767,7 @@ qmi_device_command (QmiDevice *self,
{
gchar *printable;
- printable = qmi_message_get_printable (message);
+ printable = qmi_message_get_printable (message, "<<<<<< ");
g_debug ("[%s] Sending message...\n%s",
self->priv->path_display,
printable);
diff --git a/src/qmi-message.c b/src/qmi-message.c
index 7ec9355..7723ebb 100644
--- a/src/qmi-message.c
+++ b/src/qmi-message.c
@@ -35,6 +35,7 @@
#include "qmi-message.h"
#include "qmi-utils.h"
+#include "qmi-enum-types.h"
#include "qmi-error-types.h"
#define PACKED __attribute__((packed))
@@ -641,48 +642,76 @@ qmi_message_new_from_raw (const guint8 *raw,
}
gchar *
-qmi_message_get_printable (QmiMessage *self)
+qmi_message_get_printable (QmiMessage *self,
+ const gchar *line_prefix)
{
GString *printable;
+ gchar *qmi_flags_str;
+ const gchar *qmi_message_str;
struct tlv *tlv;
if (!qmi_message_check (self, NULL))
return NULL;
+ if (!line_prefix)
+ line_prefix = "";
+
printable = g_string_new ("");
g_string_append_printf (printable,
- "QMUX:\n"
- "\tlength=0x%04x\n"
- "\tflags=0x%02x\n"
- "\tservice=0x%02x\n"
- "\tclient=0x%02x\n",
- qmux_length (self),
- qmi_message_get_qmux_flags (self),
- qmi_message_get_service (self),
- qmi_message_get_client_id (self));
+ "%sQMUX:\n"
+ "%s length = %u (0x%04x)\n"
+ "%s flags = 0x%02x\n"
+ "%s service = \"%s\" (0x%02x)\n"
+ "%s client = 0x%02x\n",
+ line_prefix,
+ line_prefix, qmux_length (self), qmux_length (self),
+ line_prefix, qmi_message_get_qmux_flags (self),
+ line_prefix, qmi_service_get_string (qmi_message_get_service (self)), qmi_message_get_service (self),
+ line_prefix, qmi_message_get_client_id (self));
+
+ if (qmi_message_get_service (self) == QMI_SERVICE_CTL)
+ qmi_flags_str = qmi_ctl_flag_build_string_from_mask (qmi_message_get_qmi_flags (self));
+ else
+ qmi_flags_str = qmi_service_flag_build_string_from_mask (qmi_message_get_qmi_flags (self));
+
+ switch (qmi_message_get_service (self)) {
+ case QMI_SERVICE_CTL:
+ qmi_message_str = qmi_ctl_message_get_string (qmi_message_get_message_id (self));
+ break;
+ case QMI_SERVICE_DMS:
+ qmi_message_str = qmi_dms_message_get_string (qmi_message_get_message_id (self));
+ break;
+ default:
+ qmi_message_str = "unknown";
+ break;
+ }
+
g_string_append_printf (printable,
- "QMI:\n"
- "\tflags=0x%02x\n"
- "\ttransaction=0x%04x\n"
- "\tmessage=0x%04x\n"
- "\ttlv_length=0x%04x\n",
- qmi_message_get_qmi_flags (self),
- qmi_message_get_transaction_id (self),
- qmi_message_get_message_id (self),
- qmi_tlv_length (self));
+ "%sQMI:\n"
+ "%s flags = \"%s\" (0x%02x)\n"
+ "%s transaction = %u (0x%04x)\n"
+ "%s message = \"%s\" (0x%04x)\n"
+ "%s tlv_length = %u (0x%04x)\n",
+ line_prefix,
+ line_prefix, qmi_flags_str, qmi_message_get_qmi_flags (self),
+ line_prefix, qmi_message_get_transaction_id (self), qmi_message_get_transaction_id (self),
+ line_prefix, qmi_message_str, qmi_message_get_message_id (self),
+ line_prefix, qmi_tlv_length (self), qmi_tlv_length (self));
+ g_free (qmi_flags_str);
for (tlv = qmi_tlv_first (self); tlv; tlv = qmi_tlv_next (self, tlv)) {
gchar *value_hex;
value_hex = qmi_utils_str_hex (tlv->value, tlv->length, ':');
g_string_append_printf (printable,
- "TLV:\n"
- "\ttype=0x%02x\n"
- "\tlength=0x%04x\n"
- "\tvalue=%s\n",
- tlv->type,
- tlv->length,
- value_hex);
+ "%sTLV:\n"
+ "%s type = 0x%02x\n"
+ "%s length = %u (0x%04x)\n"
+ "%s value = %s\n",
+ line_prefix,
+ line_prefix, tlv->type,
+ line_prefix, tlv->length, tlv->length,
+ line_prefix, value_hex);
g_free (value_hex);
}
diff --git a/src/qmi-message.h b/src/qmi-message.h
index 23d368d..e346f66 100644
--- a/src/qmi-message.h
+++ b/src/qmi-message.h
@@ -85,7 +85,8 @@ gconstpointer qmi_message_get_raw (QmiMessage *self,
gsize qmi_message_get_length (QmiMessage *self);
-gchar *qmi_message_get_printable (QmiMessage *self);
+gchar *qmi_message_get_printable (QmiMessage *self,
+ const gchar *line_prefix);
gboolean qmi_message_check (QmiMessage *self,
GError **error);