/* 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