aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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);
};