Committer:
RichardUK
Date:
Wed Sep 19 16:44:32 2012 +0000
Revision:
2:33e7ce63dd6d
Parent:
0:63d45df56584
Testing lib update to another project.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RichardUK 0:63d45df56584 1 #include <cstdarg>
RichardUK 0:63d45df56584 2 #include "Debug.h"
RichardUK 0:63d45df56584 3
RichardUK 0:63d45df56584 4 #ifdef __DEBUG
RichardUK 0:63d45df56584 5
RichardUK 0:63d45df56584 6 #define __LINE_LENGTH__ 93
RichardUK 0:63d45df56584 7
RichardUK 0:63d45df56584 8 void DebugHelper::Debug(const char* p_format, ...) {
RichardUK 0:63d45df56584 9 va_list argp;
RichardUK 0:63d45df56584 10
RichardUK 0:63d45df56584 11 va_start(argp, p_format);
RichardUK 0:63d45df56584 12 vprintf(p_format, argp);
RichardUK 0:63d45df56584 13 va_end(argp);
RichardUK 0:63d45df56584 14 } // End of method DebugHelper::Debug
RichardUK 0:63d45df56584 15
RichardUK 0:63d45df56584 16 void DebugHelper::HexaDump(unsigned char* p_buffer, int p_count, int p_offset) {
RichardUK 0:63d45df56584 17
RichardUK 0:63d45df56584 18 int currentIdx = p_offset;
RichardUK 0:63d45df56584 19 unsigned short startAddress = ((unsigned short)(p_offset / 16)) * 16;
RichardUK 0:63d45df56584 20
RichardUK 0:63d45df56584 21 // Display header
RichardUK 0:63d45df56584 22 printf(" HEX | 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F : 0 1 2 3 4 5 6 7 8 9 A B C D E F \r\n");
RichardUK 0:63d45df56584 23 printf("-----|+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+-:--+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\r\n");
RichardUK 0:63d45df56584 24 // 01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901 2
RichardUK 0:63d45df56584 25 // 0 1 2 3 4 5 6 7 8 9
RichardUK 0:63d45df56584 26 // Address offset padding
RichardUK 0:63d45df56584 27 char line[__LINE_LENGTH__ + 1];
RichardUK 0:63d45df56584 28 memset(line, 0x20, __LINE_LENGTH__);
RichardUK 0:63d45df56584 29 line[__LINE_LENGTH__] = 0x00; // NULL character
RichardUK 0:63d45df56584 30 sprintf(line, "%04x |", (unsigned short)startAddress);
RichardUK 0:63d45df56584 31 line[6] = 0x20; // Remove NULL character added by sprintf
RichardUK 0:63d45df56584 32 int idx = 0;
RichardUK 0:63d45df56584 33 int hexOffset = 7;
RichardUK 0:63d45df56584 34 int charOffset = 58;
RichardUK 0:63d45df56584 35 for ( ; idx < (int)(currentIdx % 16); idx++) {
RichardUK 0:63d45df56584 36 line[hexOffset] = 0x30;
RichardUK 0:63d45df56584 37 line[hexOffset + 1] = 0x30;
RichardUK 0:63d45df56584 38 hexOffset += 3;
RichardUK 0:63d45df56584 39 charOffset += 2;
RichardUK 0:63d45df56584 40 }
RichardUK 0:63d45df56584 41 // Fill line by line
RichardUK 0:63d45df56584 42 int endOfDump = p_count + p_offset;
RichardUK 0:63d45df56584 43 while(currentIdx < endOfDump) {
RichardUK 0:63d45df56584 44 for ( ; (idx < 16) && (currentIdx < endOfDump); idx++) {
RichardUK 0:63d45df56584 45 line[hexOffset] = DebugHelper::ToHexDigit(*(p_buffer + currentIdx) >> 4);
RichardUK 0:63d45df56584 46 line[hexOffset + 1] = DebugHelper::ToHexDigit(*(p_buffer + currentIdx) & 0x0f);
RichardUK 0:63d45df56584 47 line[charOffset] = DebugHelper::ToCharDigit(*(p_buffer + currentIdx));
RichardUK 0:63d45df56584 48 // Prepare next byte
RichardUK 0:63d45df56584 49 hexOffset += 3;
RichardUK 0:63d45df56584 50 charOffset += 2;
RichardUK 0:63d45df56584 51 currentIdx += 1;
RichardUK 0:63d45df56584 52 }
RichardUK 0:63d45df56584 53 // Display the line
RichardUK 0:63d45df56584 54 line[56] = ':';
RichardUK 0:63d45df56584 55 line[__LINE_LENGTH__ - 1] = 0x0d;
RichardUK 0:63d45df56584 56 line[__LINE_LENGTH__] = 0x0a;
RichardUK 0:63d45df56584 57 printf(line);
RichardUK 0:63d45df56584 58 if (currentIdx < endOfDump) { // Prepare next line, one line = 16 digits
RichardUK 0:63d45df56584 59 startAddress += 16;
RichardUK 0:63d45df56584 60 memset(line, 0x20, __LINE_LENGTH__);
RichardUK 0:63d45df56584 61 sprintf(line, "%04x |", (unsigned short)startAddress);
RichardUK 0:63d45df56584 62 line[6] = 0x20; // Remove NULL character added by sprintf
RichardUK 0:63d45df56584 63 idx = 0;
RichardUK 0:63d45df56584 64 hexOffset = 7;
RichardUK 0:63d45df56584 65 charOffset = 58;
RichardUK 0:63d45df56584 66 } else { // End of line padding
RichardUK 0:63d45df56584 67 break;
RichardUK 0:63d45df56584 68 }
RichardUK 0:63d45df56584 69 } // End of 'while' statement
RichardUK 0:63d45df56584 70 } // End of method DebugHelper::HexaDump
RichardUK 0:63d45df56584 71
RichardUK 0:63d45df56584 72 void DebugHelper::BreakPoint(const char* p_file, int p_line) {
RichardUK 0:63d45df56584 73 printf("Stop in %s at line %d\r\n", p_file, p_line);
RichardUK 0:63d45df56584 74 fflush(stdout);
RichardUK 0:63d45df56584 75 getchar();
RichardUK 0:63d45df56584 76 fflush(stdin);
RichardUK 0:63d45df56584 77 } // End of method DebugHelper::BreakPoint
RichardUK 0:63d45df56584 78
RichardUK 0:63d45df56584 79 #endif // __DEBUG