/* Copyright (C) 2020 - 2024, Thornwave Labs Inc * Written by Razvan Turiac <razvan.turiac@thornwave.com> * * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated * documentation files (the “Software”), to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. * Attribution shall be given to Thornwave Labs Inc. and shall be made visible to the final user. * * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include <debug.h> #ifdef DEBUG #include <stdio.h> #include <stdarg.h> #include <ctype.h> int32_t debug_printf(const char* format, ...) { va_list args; va_start(args, format); int32_t rv = vprintf(format, args); fflush(stdout); va_end(args); return rv; } void debug_dump_hex(const void *data, uint32_t size, bool display_address) { const uint32_t line_length = 16; uint64_t start_address = (uint64_t)data; const uint8_t *p_data = (const uint8_t*)data; char char_display[line_length + 1]; while(size) { if (display_address) printf("\r\n%08lXh ", start_address); else printf("\r\n"); start_address += line_length; char *ptr = char_display; for(uint32_t i = 0; i < line_length; i++) { if (size) { if (isgraph(*p_data) || (*p_data == ' ')) *ptr++ = *p_data; else *ptr++ = '.'; printf("%02X ", *p_data++); size--; } else printf(" "); if ((i & 3) == 3) printf(" "); } *ptr = 0; printf(" %s", char_display); } printf("\r\n"); fflush(stdout); } #endif