diff options
-rw-r--r-- | src/mm-at-serial-port.c | 32 | ||||
-rw-r--r-- | src/mm-qcdm-serial-port.c | 19 | ||||
-rw-r--r-- | src/mm-serial-port.c | 36 | ||||
-rw-r--r-- | src/mm-serial-port.h | 5 |
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); }; |