diff --git a/F3:F303/InterfaceBoard/Debug.c b/F3:F303/InterfaceBoard/Debug.c new file mode 100644 index 0000000..b19f79a --- /dev/null +++ b/F3:F303/InterfaceBoard/Debug.c @@ -0,0 +1,66 @@ +/* + * This file is part of the multiiface project. + * Copyright 2026 Edward V. Emelianov . + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include "Debug.h" +#include "hardware.h" // Config_mode +#include "ringbuffer.h" +#include "usb_dev.h" + +// asinchronous debugging +// DBG(str): add filename, line, string message `str` and '\n' +// DBGs(str): only add `str`, without '\n' +// DBGn(): add just '\n' + +#ifdef EBUG + +#define DBGBUFSZ (1024) + +static uint8_t buf[DBGBUFSZ]; +static ringbuffer dbgrb = {.data = buf, .length = DBGBUFSZ}; + +void debug_message_text(const char *str){ + if(!Config_mode) return; + RB_write(&dbgrb, (const uint8_t*)str, strlen(str)); +} + +void debug_message_char(char ch){ + if(!Config_mode) return; + RB_write(&dbgrb, (const uint8_t*)&ch, 1); +} + +void debug_newline_only(){ + if(!Config_mode) return; + char nl = '\n'; + RB_write(&dbgrb, (const uint8_t*)&nl, 1); +} + +void print_debug_messages(){ + if(!Config_mode) return; + uint8_t rcvbuf[256]; + do{ + int n = RB_readto(&dbgrb, '\n', rcvbuf, 256); + if(n == 0) break; + else if(n < 0) n = -n; // partial string: longer than 256 bytes + USB_send(ICFG, rcvbuf, n); + }while(1); +} + +#endif + + diff --git a/F3:F303/InterfaceBoard/Debug.h b/F3:F303/InterfaceBoard/Debug.h new file mode 100644 index 0000000..02ea009 --- /dev/null +++ b/F3:F303/InterfaceBoard/Debug.h @@ -0,0 +1,42 @@ +/* + * This file is part of the multiiface project. + * Copyright 2026 Edward V. Emelianov . + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include "usb_dev.h" + +// debugging messages on config interface +#ifdef EBUG +#define STR_HELPER(s) #s +#define STR(s) STR_HELPER(s) +#define DBG(str) do{debug_message_text(__FILE__ " (L" STR(__LINE__) "): " str); debug_newline_only();}while(0) +#define DBGs(str) debug_message_text(str) +#define DBGch(ch) debug_message_char(ch) +#define DBGn() debug_newline_only() +#define DBGpri() print_debug_messages(); +#else +#define DBG(str) +#define DBGs(str) +#define DBGn() +#define DBGpri() +#endif + +void debug_message_text(const char *str); +void debug_message_char(char ch); +void debug_newline_only(); +void print_debug_messages();