Tool to dump contents of a data buffer in traditional terminal format. Some VT100 color commands used.
PrintBuffer.cpp@1:8073086de8b7, 2014-05-13 (annotated)
- Committer:
- loopsva
- Date:
- Tue May 13 18:47:41 2014 +0000
- Revision:
- 1:8073086de8b7
- Parent:
- 0:94d1683e78b7
- Child:
- 2:e7f3ba216a14
PrintBuffer
Who changed what in which revision?
User | Revision | Line number | New 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 | 0:94d1683e78b7 | 5 | const char ESC = 0x1b; //ascii escape |
loopsva | 0:94d1683e78b7 | 6 | |
loopsva | 0:94d1683e78b7 | 7 | // Constructor |
loopsva | 0:94d1683e78b7 | 8 | PrintBuffer::PrintBuffer(const char* name) { |
loopsva | 0:94d1683e78b7 | 9 | } |
loopsva | 0:94d1683e78b7 | 10 | |
loopsva | 0:94d1683e78b7 | 11 | //--------------------------------------------------------------------------------------------------------------------------------------// |
loopsva | 0:94d1683e78b7 | 12 | // Used for doing a hex and ascii dump of the buffer. BufferLines tells PrintBuffer how |
loopsva | 0:94d1683e78b7 | 13 | // many 16 byte lines to print. |
loopsva | 0:94d1683e78b7 | 14 | |
loopsva | 0:94d1683e78b7 | 15 | int PrintBuffer::dump(const char* title, int BufferLines, int BufferOffset, const char buffer[]) { |
loopsva | 0:94d1683e78b7 | 16 | pc.printf("\n%c[8;35;2m%s - lines: %d starting at: 0x%04x%c[0m\n", ESC, title, BufferLines, BufferOffset, ESC); |
loopsva | 0:94d1683e78b7 | 17 | for(int i = BufferOffset; i < BufferLines * 16 + BufferOffset; i = i + 16) { |
loopsva | 0:94d1683e78b7 | 18 | pc.printf("%04x ", i); |
loopsva | 0:94d1683e78b7 | 19 | for(int s = 0; s < 8; s++) { |
loopsva | 0:94d1683e78b7 | 20 | pc.printf("%02x ", buffer [s + i]); |
loopsva | 0:94d1683e78b7 | 21 | } |
loopsva | 0:94d1683e78b7 | 22 | pc.printf(" "); |
loopsva | 0:94d1683e78b7 | 23 | for(int s = 0; s < 8; s++) { |
loopsva | 0:94d1683e78b7 | 24 | pc.printf("%02x ", buffer[s + i + 8]); |
loopsva | 0:94d1683e78b7 | 25 | } |
loopsva | 0:94d1683e78b7 | 26 | pc.printf(" "); |
loopsva | 0:94d1683e78b7 | 27 | for(int s = 0; s < 8; s++) { |
loopsva | 0:94d1683e78b7 | 28 | if((buffer[s + i] < 0x20) || (buffer[s + i] > 0x7f)) { |
loopsva | 0:94d1683e78b7 | 29 | pc.printf("."); |
loopsva | 0:94d1683e78b7 | 30 | } else { |
loopsva | 0:94d1683e78b7 | 31 | pc.printf("%c", buffer[s + i]); |
loopsva | 0:94d1683e78b7 | 32 | } |
loopsva | 0:94d1683e78b7 | 33 | } |
loopsva | 0:94d1683e78b7 | 34 | pc.printf(" "); |
loopsva | 0:94d1683e78b7 | 35 | for(int s = 0; s < 8; s++) { |
loopsva | 0:94d1683e78b7 | 36 | if((buffer[s + i + 8] < 0x20) || (buffer[s + i + 8] > 0x7f)) { |
loopsva | 0:94d1683e78b7 | 37 | pc.printf("."); |
loopsva | 0:94d1683e78b7 | 38 | } else { |
loopsva | 0:94d1683e78b7 | 39 | pc.printf("%c", buffer[s + i + 8]); |
loopsva | 0:94d1683e78b7 | 40 | } |
loopsva | 0:94d1683e78b7 | 41 | } |
loopsva | 0:94d1683e78b7 | 42 | pc.printf("\n"); |
loopsva | 0:94d1683e78b7 | 43 | } |
loopsva | 0:94d1683e78b7 | 44 | pc.printf("\n"); |
loopsva | 0:94d1683e78b7 | 45 | return(0); |
loopsva | 0:94d1683e78b7 | 46 | } |
loopsva | 0:94d1683e78b7 | 47 | |
loopsva | 0:94d1683e78b7 | 48 | //--------------------------------------------------------------------------------------------------------------------------------------// |
loopsva | 0:94d1683e78b7 | 49 | // Used for doing a hex and ascii dump of the buffer. BufferLines tells PrintBuffer how |
loopsva | 0:94d1683e78b7 | 50 | // many 16 byte lines to print. |
loopsva | 0:94d1683e78b7 | 51 | |
loopsva | 0:94d1683e78b7 | 52 | int PrintBuffer::dump_t(const char* title, int BufferLines, int BufferOffset, const uint8_t buffer[]) { |
loopsva | 0:94d1683e78b7 | 53 | pc.printf("\n%c[8;35;2m%s - lines: %d starting at: 0x%04x%c[0m\n", ESC, title, BufferLines, BufferOffset, ESC); |
loopsva | 0:94d1683e78b7 | 54 | for(int i = BufferOffset; i < BufferLines * 16 + BufferOffset; i = i + 16) { |
loopsva | 0:94d1683e78b7 | 55 | pc.printf("%04x ", i); |
loopsva | 0:94d1683e78b7 | 56 | for(int s = 0; s < 8; s++) { |
loopsva | 0:94d1683e78b7 | 57 | pc.printf("%02x ", buffer [s + i]); |
loopsva | 0:94d1683e78b7 | 58 | } |
loopsva | 0:94d1683e78b7 | 59 | pc.printf(" "); |
loopsva | 0:94d1683e78b7 | 60 | for(int s = 0; s < 8; s++) { |
loopsva | 0:94d1683e78b7 | 61 | pc.printf("%02x ", buffer[s + i + 8]); |
loopsva | 0:94d1683e78b7 | 62 | } |
loopsva | 0:94d1683e78b7 | 63 | pc.printf(" "); |
loopsva | 0:94d1683e78b7 | 64 | for(int s = 0; s < 8; s++) { |
loopsva | 0:94d1683e78b7 | 65 | if((buffer[s + i] < 0x20) || (buffer[s + i] > 0x7f)) { |
loopsva | 0:94d1683e78b7 | 66 | pc.printf("."); |
loopsva | 0:94d1683e78b7 | 67 | } else { |
loopsva | 0:94d1683e78b7 | 68 | pc.printf("%c", buffer[s + i]); |
loopsva | 0:94d1683e78b7 | 69 | } |
loopsva | 0:94d1683e78b7 | 70 | } |
loopsva | 0:94d1683e78b7 | 71 | pc.printf(" "); |
loopsva | 0:94d1683e78b7 | 72 | for(int s = 0; s < 8; s++) { |
loopsva | 0:94d1683e78b7 | 73 | if((buffer[s + i + 8] < 0x20) || (buffer[s + i + 8] > 0x7f)) { |
loopsva | 0:94d1683e78b7 | 74 | pc.printf("."); |
loopsva | 0:94d1683e78b7 | 75 | } else { |
loopsva | 0:94d1683e78b7 | 76 | pc.printf("%c", buffer[s + i + 8]); |
loopsva | 0:94d1683e78b7 | 77 | } |
loopsva | 0:94d1683e78b7 | 78 | } |
loopsva | 0:94d1683e78b7 | 79 | pc.printf("\n"); |
loopsva | 0:94d1683e78b7 | 80 | } |
loopsva | 0:94d1683e78b7 | 81 | pc.printf("\n"); |
loopsva | 0:94d1683e78b7 | 82 | return(0); |
loopsva | 0:94d1683e78b7 | 83 | } |
loopsva | 0:94d1683e78b7 | 84 | |
loopsva | 1:8073086de8b7 | 85 |