Tool to dump contents of a data buffer in traditional terminal format. Some VT100 color commands used.

Dependents:   KL25Z_MLX90620

Committer:
loopsva
Date:
Wed Apr 27 22:21:21 2016 +0000
Revision:
4:c3c8b072f80f
Parent:
3:4a6123f2a4c9
added function to display a full 32 bit address

Who changed what in which revision?

UserRevisionLine numberNew contents of line
loopsva 0:94d1683e78b7 1 #include "mbed.h"
loopsva 0:94d1683e78b7 2 #include "PrintBuffer.h"
loopsva 0:94d1683e78b7 3
loopsva 1:8073086de8b7 4 extern RawSerial pc;
loopsva 2:e7f3ba216a14 5 //const char ESC = 0x1b; //ascii escape
loopsva 2:e7f3ba216a14 6
loopsva 2:e7f3ba216a14 7 #define DOBLACK "\033[0;30;2m"
loopsva 2:e7f3ba216a14 8 #define DORED "\033[0;31;2m"
loopsva 2:e7f3ba216a14 9 #define DOGREEN "\033[0;32;2m"
loopsva 2:e7f3ba216a14 10 #define DOYELLOW "\033[0;33;2m"
loopsva 2:e7f3ba216a14 11 #define DOBLUE "\033[0;34;2m"
loopsva 2:e7f3ba216a14 12 #define DOMAGENTA "\033[0;35;2m"
loopsva 2:e7f3ba216a14 13 #define DOCYAN "\033[0;36;2m"
loopsva 2:e7f3ba216a14 14 #define DOWHITE "\033[0;37;2m"
loopsva 2:e7f3ba216a14 15 #define DODEFAULT "\033[0;39;2m"
loopsva 2:e7f3ba216a14 16 #define DONONE "\033[0m"
loopsva 0:94d1683e78b7 17
loopsva 0:94d1683e78b7 18 // Constructor
loopsva 0:94d1683e78b7 19 PrintBuffer::PrintBuffer(const char* name) {
loopsva 0:94d1683e78b7 20 }
loopsva 0:94d1683e78b7 21
loopsva 0:94d1683e78b7 22 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:94d1683e78b7 23 // Used for doing a hex and ascii dump of the buffer. BufferLines tells PrintBuffer how
loopsva 0:94d1683e78b7 24 // many 16 byte lines to print.
loopsva 0:94d1683e78b7 25
loopsva 0:94d1683e78b7 26 int PrintBuffer::dump(const char* title, int BufferLines, int BufferOffset, const char buffer[]) {
loopsva 3:4a6123f2a4c9 27 pc.printf("\n%s%s - lines: %d starting at: 0x%04x%s\r\n", DOMAGENTA, title, BufferLines, BufferOffset, DONONE);
loopsva 0:94d1683e78b7 28 for(int i = BufferOffset; i < BufferLines * 16 + BufferOffset; i = i + 16) {
loopsva 0:94d1683e78b7 29 pc.printf("%04x ", i);
loopsva 0:94d1683e78b7 30 for(int s = 0; s < 8; s++) {
loopsva 0:94d1683e78b7 31 pc.printf("%02x ", buffer [s + i]);
loopsva 0:94d1683e78b7 32 }
loopsva 0:94d1683e78b7 33 pc.printf(" ");
loopsva 0:94d1683e78b7 34 for(int s = 0; s < 8; s++) {
loopsva 0:94d1683e78b7 35 pc.printf("%02x ", buffer[s + i + 8]);
loopsva 0:94d1683e78b7 36 }
loopsva 0:94d1683e78b7 37 pc.printf(" ");
loopsva 0:94d1683e78b7 38 for(int s = 0; s < 8; s++) {
loopsva 0:94d1683e78b7 39 if((buffer[s + i] < 0x20) || (buffer[s + i] > 0x7f)) {
loopsva 2:e7f3ba216a14 40 pc.printf("%s.%s", DOCYAN, DONONE);
loopsva 0:94d1683e78b7 41 } else {
loopsva 0:94d1683e78b7 42 pc.printf("%c", buffer[s + i]);
loopsva 0:94d1683e78b7 43 }
loopsva 0:94d1683e78b7 44 }
loopsva 0:94d1683e78b7 45 pc.printf(" ");
loopsva 0:94d1683e78b7 46 for(int s = 0; s < 8; s++) {
loopsva 0:94d1683e78b7 47 if((buffer[s + i + 8] < 0x20) || (buffer[s + i + 8] > 0x7f)) {
loopsva 2:e7f3ba216a14 48 pc.printf("%s.%s", DOCYAN, DONONE);
loopsva 0:94d1683e78b7 49 } else {
loopsva 0:94d1683e78b7 50 pc.printf("%c", buffer[s + i + 8]);
loopsva 0:94d1683e78b7 51 }
loopsva 0:94d1683e78b7 52 }
loopsva 3:4a6123f2a4c9 53 pc.printf("\r\n");
loopsva 0:94d1683e78b7 54 }
loopsva 3:4a6123f2a4c9 55 pc.printf("\r\n");
loopsva 0:94d1683e78b7 56 return(0);
loopsva 0:94d1683e78b7 57 }
loopsva 0:94d1683e78b7 58
loopsva 0:94d1683e78b7 59 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:94d1683e78b7 60 // Used for doing a hex and ascii dump of the buffer. BufferLines tells PrintBuffer how
loopsva 4:c3c8b072f80f 61 // many 16 byte lines to print. Added external ability to add to the buffer base address for display purposes
loopsva 4:c3c8b072f80f 62
loopsva 4:c3c8b072f80f 63 int PrintBuffer::dump_a(const char* title, int BufferLines, int BufferOffset, const char buffer[], int addr) {
loopsva 4:c3c8b072f80f 64 pc.printf("\n%s%s - lines: %d starting at: 0x%04x%s\r\n", DOMAGENTA, title, BufferLines, BufferOffset + addr, DONONE);
loopsva 4:c3c8b072f80f 65 for(int i = BufferOffset; i < BufferLines * 16 + BufferOffset; i = i + 16) {
loopsva 4:c3c8b072f80f 66 pc.printf("%04x_%04x ", (i + addr) >> 16, (i + addr) & 0xffff);
loopsva 4:c3c8b072f80f 67 for(int s = 0; s < 8; s++) {
loopsva 4:c3c8b072f80f 68 pc.printf("%02x ", buffer [s + i]);
loopsva 4:c3c8b072f80f 69 }
loopsva 4:c3c8b072f80f 70 pc.printf(" ");
loopsva 4:c3c8b072f80f 71 for(int s = 0; s < 8; s++) {
loopsva 4:c3c8b072f80f 72 pc.printf("%02x ", buffer[s + i + 8]);
loopsva 4:c3c8b072f80f 73 }
loopsva 4:c3c8b072f80f 74 pc.printf(" ");
loopsva 4:c3c8b072f80f 75 for(int s = 0; s < 8; s++) {
loopsva 4:c3c8b072f80f 76 if((buffer[s + i] < 0x20) || (buffer[s + i] > 0x7f)) {
loopsva 4:c3c8b072f80f 77 pc.printf("%s.%s", DOCYAN, DONONE);
loopsva 4:c3c8b072f80f 78 } else {
loopsva 4:c3c8b072f80f 79 pc.printf("%c", buffer[s + i]);
loopsva 4:c3c8b072f80f 80 }
loopsva 4:c3c8b072f80f 81 }
loopsva 4:c3c8b072f80f 82 pc.printf(" ");
loopsva 4:c3c8b072f80f 83 for(int s = 0; s < 8; s++) {
loopsva 4:c3c8b072f80f 84 if((buffer[s + i + 8] < 0x20) || (buffer[s + i + 8] > 0x7f)) {
loopsva 4:c3c8b072f80f 85 pc.printf("%s.%s", DOCYAN, DONONE);
loopsva 4:c3c8b072f80f 86 } else {
loopsva 4:c3c8b072f80f 87 pc.printf("%c", buffer[s + i + 8]);
loopsva 4:c3c8b072f80f 88 }
loopsva 4:c3c8b072f80f 89 }
loopsva 4:c3c8b072f80f 90 pc.printf("\r\n");
loopsva 4:c3c8b072f80f 91 }
loopsva 4:c3c8b072f80f 92 pc.printf("\r\n");
loopsva 4:c3c8b072f80f 93 return(0);
loopsva 4:c3c8b072f80f 94 }
loopsva 4:c3c8b072f80f 95
loopsva 4:c3c8b072f80f 96 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 4:c3c8b072f80f 97 // Used for doing a hex and ascii dump of the buffer. BufferLines tells PrintBuffer how
loopsva 0:94d1683e78b7 98 // many 16 byte lines to print.
loopsva 0:94d1683e78b7 99
loopsva 0:94d1683e78b7 100 int PrintBuffer::dump_t(const char* title, int BufferLines, int BufferOffset, const uint8_t buffer[]) {
loopsva 3:4a6123f2a4c9 101 pc.printf("\n%s%s - lines: %d starting at: 0x%04x%s\r\n", DOMAGENTA, title, BufferLines, BufferOffset, DONONE);
loopsva 0:94d1683e78b7 102 for(int i = BufferOffset; i < BufferLines * 16 + BufferOffset; i = i + 16) {
loopsva 0:94d1683e78b7 103 pc.printf("%04x ", i);
loopsva 0:94d1683e78b7 104 for(int s = 0; s < 8; s++) {
loopsva 0:94d1683e78b7 105 pc.printf("%02x ", buffer [s + i]);
loopsva 0:94d1683e78b7 106 }
loopsva 0:94d1683e78b7 107 pc.printf(" ");
loopsva 0:94d1683e78b7 108 for(int s = 0; s < 8; s++) {
loopsva 0:94d1683e78b7 109 pc.printf("%02x ", buffer[s + i + 8]);
loopsva 0:94d1683e78b7 110 }
loopsva 0:94d1683e78b7 111 pc.printf(" ");
loopsva 0:94d1683e78b7 112 for(int s = 0; s < 8; s++) {
loopsva 0:94d1683e78b7 113 if((buffer[s + i] < 0x20) || (buffer[s + i] > 0x7f)) {
loopsva 2:e7f3ba216a14 114 pc.printf("%s.%s", DOCYAN, DONONE);
loopsva 0:94d1683e78b7 115 } else {
loopsva 0:94d1683e78b7 116 pc.printf("%c", buffer[s + i]);
loopsva 0:94d1683e78b7 117 }
loopsva 0:94d1683e78b7 118 }
loopsva 0:94d1683e78b7 119 pc.printf(" ");
loopsva 0:94d1683e78b7 120 for(int s = 0; s < 8; s++) {
loopsva 0:94d1683e78b7 121 if((buffer[s + i + 8] < 0x20) || (buffer[s + i + 8] > 0x7f)) {
loopsva 2:e7f3ba216a14 122 pc.printf("%s.%s", DOCYAN, DONONE);
loopsva 2:e7f3ba216a14 123 } else {
loopsva 2:e7f3ba216a14 124 pc.printf("%c", buffer[s + i + 8]);
loopsva 2:e7f3ba216a14 125 }
loopsva 2:e7f3ba216a14 126 }
loopsva 3:4a6123f2a4c9 127 pc.printf("\r\n");
loopsva 2:e7f3ba216a14 128 }
loopsva 3:4a6123f2a4c9 129 pc.printf("\r\n");
loopsva 2:e7f3ba216a14 130 return(0);
loopsva 2:e7f3ba216a14 131 }
loopsva 2:e7f3ba216a14 132
loopsva 2:e7f3ba216a14 133 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 2:e7f3ba216a14 134 // Used for doing a hex and ascii dump of the buffer. BufferLines tells PrintBuffer how
loopsva 2:e7f3ba216a14 135 // many 16 byte lines to print.
loopsva 2:e7f3ba216a14 136
loopsva 2:e7f3ba216a14 137 int PrintBuffer::dump_uc(const char* title, int BufferLines, int BufferOffset, const unsigned char buffer[]) {
loopsva 3:4a6123f2a4c9 138 pc.printf("\n%s%s - lines: %d starting at: 0x%04x%s\r\n", DOMAGENTA, title, BufferLines, BufferOffset, DONONE);
loopsva 2:e7f3ba216a14 139 for(int i = BufferOffset; i < BufferLines * 16 + BufferOffset; i = i + 16) {
loopsva 2:e7f3ba216a14 140 pc.printf("%04x ", i);
loopsva 2:e7f3ba216a14 141 for(int s = 0; s < 8; s++) {
loopsva 2:e7f3ba216a14 142 pc.printf("%02x ", buffer [s + i]);
loopsva 2:e7f3ba216a14 143 }
loopsva 2:e7f3ba216a14 144 pc.printf(" ");
loopsva 2:e7f3ba216a14 145 for(int s = 0; s < 8; s++) {
loopsva 2:e7f3ba216a14 146 pc.printf("%02x ", buffer[s + i + 8]);
loopsva 2:e7f3ba216a14 147 }
loopsva 2:e7f3ba216a14 148 pc.printf(" ");
loopsva 2:e7f3ba216a14 149 for(int s = 0; s < 8; s++) {
loopsva 2:e7f3ba216a14 150 if((buffer[s + i] < 0x20) || (buffer[s + i] > 0x7f)) {
loopsva 2:e7f3ba216a14 151 pc.printf("%s.%s", DOCYAN, DONONE);
loopsva 2:e7f3ba216a14 152 } else {
loopsva 2:e7f3ba216a14 153 pc.printf("%c", buffer[s + i]);
loopsva 2:e7f3ba216a14 154 }
loopsva 2:e7f3ba216a14 155 }
loopsva 2:e7f3ba216a14 156 pc.printf(" ");
loopsva 2:e7f3ba216a14 157 for(int s = 0; s < 8; s++) {
loopsva 2:e7f3ba216a14 158 if((buffer[s + i + 8] < 0x20) || (buffer[s + i + 8] > 0x7f)) {
loopsva 2:e7f3ba216a14 159 pc.printf("%s.%s", DOCYAN, DONONE);
loopsva 0:94d1683e78b7 160 } else {
loopsva 0:94d1683e78b7 161 pc.printf("%c", buffer[s + i + 8]);
loopsva 0:94d1683e78b7 162 }
loopsva 0:94d1683e78b7 163 }
loopsva 3:4a6123f2a4c9 164 pc.printf("\r\n");
loopsva 0:94d1683e78b7 165 }
loopsva 3:4a6123f2a4c9 166 pc.printf("\r\n");
loopsva 0:94d1683e78b7 167 return(0);
loopsva 0:94d1683e78b7 168 }
loopsva 0:94d1683e78b7 169
loopsva 1:8073086de8b7 170