diff options
Diffstat (limited to 'src/libdebug/debug.c')
-rw-r--r-- | src/libdebug/debug.c | 84 |
1 files changed, 81 insertions, 3 deletions
diff --git a/src/libdebug/debug.c b/src/libdebug/debug.c index ab5c13e..44902ea 100644 --- a/src/libdebug/debug.c +++ b/src/libdebug/debug.c @@ -40,9 +40,51 @@ struct debug_cat { const char *color; } debug_cat[] = { { "options", "\033[0;33m" }, + { "sender", "\033[1;33m" }, + { "sound", "\033[0;35m" }, { "dsp", "\033[0;31m" }, - { "sip", "\033[1;35m" }, + { "anetz", "\033[1;34m" }, + { "bnetz", "\033[1;34m" }, + { "cnetz", "\033[1;34m" }, + { "nmt", "\033[1;34m" }, + { "amps", "\033[1;34m" }, + { "r2000", "\033[1;34m" }, + { "imts", "\033[1;34m" }, + { "mpt1327", "\033[1;34m" }, + { "jollycom", "\033[1;34m" }, + { "eurosignal", "\033[1;34m" }, + { "frame", "\033[0;36m" }, + { "call", "\033[0;37m" }, { "cc", "\033[1;32m" }, + { "database", "\033[0;33m" }, + { "transaction", "\033[0;32m" }, + { "dms", "\033[0;33m" }, + { "sms", "\033[1;37m" }, + { "sdr", "\033[1;31m" }, + { "uhd", "\033[1;35m" }, + { "soapy", "\033[1;35m" }, + { "wave", "\033[1;33m" }, + { "radio", "\033[1;34m" }, + { "am791x", "\033[0;31m" }, + { "uart", "\033[0;32m" }, + { "device", "\033[0;33m" }, + { "datenklo", "\033[1;34m" }, + { "zeit", "\033[1;34m" }, + { "sim layer 1", "\033[0;31m" }, + { "sim layer 2", "\033[0;33m" }, + { "sim ICL layer", "\033[0;36m" }, + { "sim layer 7", "\033[0;37m" }, + { "mtp layer 2", "\033[1;33m" }, + { "mtp layer 3", "\033[1;36m" }, + { "MuP", "\033[1;37m" }, + { "router", "\033[1;35m" }, + { "stderr", "\033[1;37m" }, + { "ss5", "\033[1;34m" }, + { "isdn", "\033[1;35m" }, + { "misdn", "\033[0;34m" }, + { "dss1", "\033[1;34m" }, + { "sip", "\033[1;35m" }, + { "telephone", "\033[1;34m" }, { NULL, NULL } }; @@ -50,12 +92,34 @@ int debuglevel = DEBUG_INFO; uint64_t debug_mask = ~0; extern int num_kanal; +void (*clear_console_text)(void) = NULL; +void (*print_console_text)(void) = NULL; + +int debug_limit_scroll = 0; + +void get_win_size(int *w, int *h) +{ + struct winsize win; + int rc; + + rc = ioctl(0, TIOCGWINSZ, &win); + if (rc) { + *w = 80; + *h = 25; + return; + } + + *h = win.ws_row; + *w = win.ws_col; +} + void _printdebug(const char *file, const char __attribute__((unused)) *function, int line, int cat, int level, const char *kanal, const char *fmt, ...) { char buffer[4096], *b = buffer; int s = sizeof(buffer) - 1; const char *p; va_list args; + int w, h; if (debuglevel > level) return; @@ -78,7 +142,17 @@ void _printdebug(const char *file, const char __attribute__((unused)) *function, while ((p = strchr(file, '/'))) file = p + 1; + if (clear_console_text) + clear_console_text(); + if (debug_limit_scroll) { + get_win_size(&w, &h); + printf("\0337\033[%d;%dr\0338", debug_limit_scroll + 1, h); + } printf("%s%s:%4d %s: %s\033[0;39m", debug_cat[cat].color, file, line, debug_level[level], buffer); + if (debug_limit_scroll) + printf("\0337\033[%d;%dr\0338", 1, h); + if (print_console_text) + print_console_text(); fflush(stdout); } @@ -134,22 +208,24 @@ void debug_list_cat(void) int parse_debug_opt(const char *optarg) { int i, max_level = 0; - char *dstring, *p; + char *dup, *dstring, *p; for (i = 0; debug_level[i]; i++) max_level = i; - dstring = strdup(optarg); + dup = dstring = strdup(optarg); p = strsep(&dstring, ","); for (i = 0; i < p[i]; i++) { if (p[i] < '0' || p[i] > '9') { fprintf(stderr, "Only digits are allowed for debug level!\n"); + free(dup); return -EINVAL; } } debuglevel = atoi(p); if (debuglevel > max_level) { fprintf(stderr, "Debug level too high, use 'list' to show available levels!\n"); + free(dup); return -EINVAL; } if (dstring) @@ -161,11 +237,13 @@ int parse_debug_opt(const char *optarg) } if (!debug_cat[i].name) { fprintf(stderr, "Given debug category '%s' unknown, use 'list' to show available categories!\n", p); + free(dup); return -EINVAL; } debug_mask |= ((uint64_t)1 << i); } + free(dup); return 0; } |