aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2010-04-05 12:01:54 -0700
committerDan Williams <dcbw@redhat.com>2010-04-05 12:01:54 -0700
commit0108a36d27b84dee2bf1934f6d5403b7d683099a (patch)
tree123b5dff10cd300ad7cfb906a9bf3d55bda07c2d
parentbac945a8e4c1176d75f6c7d6622a516f673aaf65 (diff)
serial: let port subclasses handle their own debug logging
We want to print out QCDM messages as hex, not ASCII. So let each port type print out it's own communication as it wants to.
-rw-r--r--src/mm-at-serial-port.c32
-rw-r--r--src/mm-qcdm-serial-port.c19
-rw-r--r--src/mm-serial-port.c36
-rw-r--r--src/mm-serial-port.h5
4 files changed, 60 insertions, 32 deletions
diff --git a/src/mm-at-serial-port.c b/src/mm-at-serial-port.c
index 60a75d91..1a518f59 100644
--- a/src/mm-at-serial-port.c
+++ b/src/mm-at-serial-port.c
@@ -268,6 +268,37 @@ mm_at_serial_port_queue_command_cached (MMAtSerialPort *self,
user_data);
}
+static void
+debug_log (MMSerialPort *port, const char *prefix, const char *buf, gsize len)
+{
+ static GString *debug = NULL;
+ const char *s;
+
+ if (!debug)
+ debug = g_string_sized_new (256);
+
+ g_string_append (debug, prefix);
+ g_string_append (debug, " '");
+
+ s = buf;
+ while (len--) {
+ if (g_ascii_isprint (*s))
+ g_string_append_c (debug, *s);
+ else if (*s == '\r')
+ g_string_append (debug, "<CR>");
+ else if (*s == '\n')
+ g_string_append (debug, "<LF>");
+ else
+ g_string_append_printf (debug, "\\%d", *s);
+
+ s++;
+ }
+
+ g_string_append_c (debug, '\'');
+ g_debug ("(%s): %s", mm_port_get_device (MM_PORT (port)), debug->str);
+ g_string_truncate (debug, 0);
+}
+
/*****************************************************************************/
MMAtSerialPort *
@@ -323,4 +354,5 @@ mm_at_serial_port_class_init (MMAtSerialPortClass *klass)
port_class->parse_unsolicited = parse_unsolicited;
port_class->parse_response = parse_response;
port_class->handle_response = handle_response;
+ port_class->debug_log = debug_log;
}
diff --git a/src/mm-qcdm-serial-port.c b/src/mm-qcdm-serial-port.c
index a370fd06..93fc98f5 100644
--- a/src/mm-qcdm-serial-port.c
+++ b/src/mm-qcdm-serial-port.c
@@ -152,6 +152,24 @@ mm_qcdm_serial_port_queue_command_cached (MMQcdmSerialPort *self,
user_data);
}
+static void
+debug_log (MMSerialPort *port, const char *prefix, const char *buf, gsize len)
+{
+ static GString *debug = NULL;
+ const char *s = buf;
+
+ if (!debug)
+ debug = g_string_sized_new (512);
+
+ g_string_append (debug, prefix);
+
+ while (len--)
+ g_string_append_printf (debug, " %02x", (guint8) (*s++ & 0xFF));
+
+ g_debug ("(%s): %s", mm_port_get_device (MM_PORT (port)), debug->str);
+ g_string_truncate (debug, 0);
+}
+
/*****************************************************************************/
static gboolean
@@ -197,4 +215,5 @@ mm_qcdm_serial_port_class_init (MMQcdmSerialPortClass *klass)
port_class->parse_response = parse_response;
port_class->handle_response = handle_response;
port_class->config_fd = config_fd;
+ port_class->debug_log = debug_log;
}
diff --git a/src/mm-serial-port.c b/src/mm-serial-port.c
index 609e20de..b5323670 100644
--- a/src/mm-serial-port.c
+++ b/src/mm-serial-port.c
@@ -343,40 +343,12 @@ real_config_fd (MMSerialPort *self, int fd, GError **error)
}
static void
-serial_debug (MMSerialPort *self, const char *prefix, const char *buf, int len)
+serial_debug (MMSerialPort *self, const char *prefix, const char *buf, gsize len)
{
- static GString *debug = NULL;
- const char *s;
+ g_return_if_fail (len > 0);
- if (!mm_options_debug ())
- return;
-
- if (len < 0)
- len = strlen (buf);
-
- if (!debug)
- debug = g_string_sized_new (256);
-
- g_string_append (debug, prefix);
- g_string_append (debug, " '");
-
- s = buf;
- while (len--) {
- if (g_ascii_isprint (*s))
- g_string_append_c (debug, *s);
- else if (*s == '\r')
- g_string_append (debug, "<CR>");
- else if (*s == '\n')
- g_string_append (debug, "<LF>");
- else
- g_string_append_printf (debug, "\\%d", *s);
-
- s++;
- }
-
- g_string_append_c (debug, '\'');
- g_debug ("(%s): %s", mm_port_get_device (MM_PORT (self)), debug->str);
- g_string_truncate (debug, 0);
+ if (mm_options_debug () && MM_SERIAL_PORT_GET_CLASS (self)->debug_log)
+ MM_SERIAL_PORT_GET_CLASS (self)->debug_log (self, prefix, buf, len);
}
static gboolean
diff --git a/src/mm-serial-port.h b/src/mm-serial-port.h
index 67f2a37a..85dda85c 100644
--- a/src/mm-serial-port.h
+++ b/src/mm-serial-port.h
@@ -88,6 +88,11 @@ struct _MMSerialPortClass {
*/
gboolean (*config_fd) (MMSerialPort *self, int fd, GError **error);
+ void (*debug_log) (MMSerialPort *self,
+ const char *prefix,
+ const char *buf,
+ gsize len);
+
/* Signals */
void (*buffer_full) (MMSerialPort *port, const GByteArray *buffer);
};