From b809cab953c74db68ef8a8952c3c4273eaa6c4ba Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 3 Nov 2022 03:15:27 +0200 Subject: [PATCH] Added dumper library --- Library/dumper.cpp | 61 ++++++++++++++++++++++++++++++++++++++++++++++ include/dumper.hpp | 8 ++++++ 2 files changed, 69 insertions(+) create mode 100644 Library/dumper.cpp create mode 100644 include/dumper.hpp diff --git a/Library/dumper.cpp b/Library/dumper.cpp new file mode 100644 index 0000000..46832a2 --- /dev/null +++ b/Library/dumper.cpp @@ -0,0 +1,61 @@ +#include "dumper.hpp" + +#include +#include + +using namespace UniversalAsynchronousReceiverTransmitter; + +static inline void print_wrapper(char c, void *unused) +{ + UART(COM1).Write(c); + UNUSED(unused); +} + +int vprintf(const char *format, va_list list) { return vfctprintf(print_wrapper, NULL, format, list); } + +void WriteRaw(const char *format, ...) +{ + va_list args; + va_start(args, format); + vprintf(format, args); + va_end(args); +} + +void DumpData(const char *Description, void *Address, unsigned long Length) +{ + WriteRaw("-------------------------------------------------------------------------\n"); + unsigned char *AddressChar = (unsigned char *)Address; + unsigned char Buffer[17]; + unsigned long Iterate; + + if (Description != nullptr) + WriteRaw("%s:\n", Description); + + for (Iterate = 0; Iterate < Length; Iterate++) + { + if ((Iterate % 16) == 0) + { + if (Iterate != 0) + WriteRaw(" %s\n", Buffer); + WriteRaw(" %04x ", Iterate); + } + + WriteRaw(" %02x", AddressChar[Iterate]); + + if ((AddressChar[Iterate] < 0x20) || (AddressChar[Iterate] > 0x7e)) + Buffer[Iterate % 16] = '.'; + else + Buffer[Iterate % 16] = AddressChar[Iterate]; + + Buffer[(Iterate % 16) + 1] = '\0'; + } + + while ((Iterate % 16) != 0) + { + WriteRaw(" "); + Iterate++; + } + + WriteRaw(" %s\n", Buffer); + WriteRaw("-------------------------------------------------------------------------\n"); +} diff --git a/include/dumper.hpp b/include/dumper.hpp new file mode 100644 index 0000000..0b197a7 --- /dev/null +++ b/include/dumper.hpp @@ -0,0 +1,8 @@ +#ifndef __FENNIX_LIB_DUMPER_H__ +#define __FENNIX_LIB_DUMPER_H__ + +#include + +void DumpData(const char *Description, void *Address, unsigned long Length); + +#endif // !__FENNIX_LIB_DUMPER_H__