| | |
| | | void i2c_term(i2c_t *i2c); |
| | | |
| | | static inline void msleep(unsigned long ms); |
| | | void dump_buf(const char *prompt, char *buf, size_t len); |
| | | void dump_buf(const char *prompt, char *buffer, size_t length); |
| | | |
| | | static inline void banner(const char *progname) |
| | | { |
| | |
| | | nanosleep(&cSleep, 0); |
| | | } |
| | | |
| | | #define LINELEN 81 |
| | | #define CHARS_PER_LINE 16 |
| | | static char *print_char = |
| | | " " |
| | | " " |
| | | " !\"#$%&'()*+,-./" |
| | | "0123456789:;<=>?" |
| | | "@ABCDEFGHIJKLMNO" |
| | | "PQRSTUVWXYZ[\\]^_" |
| | | "`abcdefghijklmno" |
| | | "pqrstuvwxyz{|}~ " |
| | | " " |
| | | " " |
| | | " ???????????????" |
| | | "????????????????" |
| | | "????????????????" |
| | | "????????????????" |
| | | "????????????????" |
| | | "????????????????"; |
| | | |
| | | void dump_buf(const char *prompt, char *buf, size_t len) |
| | | void dump_buf(const char *prompt, char *buffer, size_t length) |
| | | { |
| | | int rc; |
| | | int idx; |
| | | char prn[LINELEN]; |
| | | char lit[CHARS_PER_LINE + 2]; |
| | | char hc[4]; |
| | | short line_done = 1; |
| | | size_t i, j; |
| | | |
| | | if( prompt ) |
| | | printf("%s", prompt); |
| | | |
| | | rc = len; |
| | | idx = 0; |
| | | lit[CHARS_PER_LINE] = '\0'; |
| | | |
| | | while (rc > 0) |
| | | if (prompt) |
| | | { |
| | | if (line_done) |
| | | snprintf(prn, LINELEN, "%08X: ", idx); |
| | | |
| | | do |
| | | { |
| | | unsigned char c = buf[idx]; |
| | | snprintf(hc, 4, "%02X ", c); |
| | | strncat(prn, hc, LINELEN); |
| | | |
| | | lit[idx % CHARS_PER_LINE] = print_char[c]; |
| | | } |
| | | while (--rc > 0 && (++idx % CHARS_PER_LINE != 0)); |
| | | |
| | | line_done = (idx % CHARS_PER_LINE) == 0; |
| | | if (line_done) |
| | | { |
| | | printf("%s %s\r\n", prn, lit); |
| | | } |
| | | printf("%s\n", prompt); |
| | | } |
| | | |
| | | if (!line_done) |
| | | for (i = 0; i < length; i += 16) |
| | | { |
| | | int ldx = idx % CHARS_PER_LINE; |
| | | lit[ldx++] = print_char[(int)buf[idx]]; |
| | | lit[ldx] = '\0'; |
| | | printf("%08zx: ", i); |
| | | |
| | | while ((++idx % CHARS_PER_LINE) != 0) |
| | | strncat(prn, " ", sizeof(prn)-strlen(prn)); |
| | | for (j = 0; j < 16; j++) |
| | | { |
| | | if (i + j < length) |
| | | { |
| | | printf("%02x ", buffer[i + j]); |
| | | } |
| | | else |
| | | { |
| | | printf(" "); |
| | | } |
| | | } |
| | | |
| | | printf("%s %s\r\n", prn, lit); |
| | | printf(" "); |
| | | |
| | | for (j = 0; j < 16; j++) |
| | | { |
| | | if (i + j < length) |
| | | { |
| | | unsigned char c = buffer[i + j]; |
| | | printf("%c", (c >= 32 && c <= 126) ? c : '.'); |
| | | } |
| | | else |
| | | { |
| | | printf(" "); |
| | | } |
| | | } |
| | | |
| | | printf("\n"); |
| | | } |
| | | } |