diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2012-04-24 12:03:58 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-07-03 16:08:48 +0200 |
commit | d3d9360d4998a1d5ba96e5f8d93229afd7941915 (patch) | |
tree | bdea21db15559b1b98ff37cf95ef099d3492b4af | |
parent | 82b79618934398bb65af4e7afb9056d744e48d1c (diff) | |
download | external_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.am | 2 | ||||
-rw-r--r-- | src/qmi-device.c | 4 | ||||
-rw-r--r-- | src/qmi-message.c | 81 | ||||
-rw-r--r-- | src/qmi-message.h | 3 |
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); |