]> sigrok.org Git - libserialport.git/commitdiff
Add API for and default handler for debug messages.
authorMartin Ling <redacted>
Fri, 22 Nov 2013 22:41:03 +0000 (22:41 +0000)
committerMartin Ling <redacted>
Fri, 22 Nov 2013 22:41:03 +0000 (22:41 +0000)
libserialport.h.in
serialport.c

index 0e3dc1b1968f67324b83785fe13afd0bf42953ac..3de68a9830cc325918e5bc64985705cbe544c467 100644 (file)
@@ -615,6 +615,29 @@ char *sp_last_error_message(void);
  */
 void sp_free_error_message(char *message);
 
+/**
+ * Set the handler function for library debugging messages.
+ *
+ * Debugging messages are generated by the library during each operation,
+ * to help in diagnosing problems. The handler will be called for each
+ * message. The handler can be set to NULL to ignore all debug messages.
+ *
+ * The handler function should accept a format string and variable length
+ * argument list, in the same manner as e.g. printf().
+ *
+ * The default handler is sp_default_debug_handler().
+ */
+void sp_set_debug_handler(void (*handler)(const char *format, ...));
+
+/**
+ * Default handler function for library debugging messages.
+ *
+ * This function prints debug messages to the standard error stream if the
+ * environment variable LIBSERIALPORT_DEBUG is set. Otherwise, they are
+ * ignored.
+ */
+void sp_default_debug_handler(const char *format, ...);
+
 /** @} */
 
 #ifdef __cplusplus
index fb2e973e60cb146bfba21b55df66c5c58c5a60ff..2bb53b4f56edb9c14301bec2304892500447689b 100644 (file)
@@ -27,6 +27,8 @@
 #include <unistd.h>
 #include <stdlib.h>
 #include <errno.h>
+#include <stdio.h>
+#include <stdarg.h>
 #ifdef _WIN32
 #include <windows.h>
 #include <tchar.h>
@@ -101,6 +103,8 @@ const struct std_baudrate std_baudrates[] = {
 #endif
 };
 
+void (*sp_debug_handler)(const char *format, ...) = sp_default_debug_handler;
+
 #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
 #define NUM_STD_BAUDRATES ARRAY_SIZE(std_baudrates)
 
@@ -1424,3 +1428,19 @@ void sp_free_error_message(char *message)
        (void)message;
 #endif
 }
+
+void sp_set_debug_handler(void (*handler)(const char *format, ...))
+{
+       sp_debug_handler = handler;
+}
+
+void sp_default_debug_handler(const char *format, ...)
+{
+       va_list args;
+       va_start(args, format);
+       if (getenv("LIBSERIALPORT_DEBUG")) {
+               fputs("libserialport: ", stderr);
+               vfprintf(stderr, format, args);
+       }
+       va_end(args);
+}