diff --git a/src/scenes/mtp/utils.c b/src/scenes/mtp/utils.c index 74b8e44..f484260 100644 --- a/src/scenes/mtp/utils.c +++ b/src/scenes/mtp/utils.c @@ -4,18 +4,33 @@ const char hex[] = "0123456789ABCDEF"; void print_bytes(char* tag, uint8_t* bytes, size_t len) { FURI_LOG_I("MTP", "Dumping bytes - TAG: %s", tag); - int lines = len / 16; + int lines = len > 0 ? (len / 16) + 1 : 0; size_t last_line_len = len % 16; - char* line = (char*)malloc(16 * 3 + 1); + char* line = (char*)malloc(16 * 3 + 3 + 16 + 1); for(int i = 0; i < lines; i++) { int line_len = i == lines - 1 ? last_line_len : 16; - for(int j = 0; j < line_len; j++) { + for(int j = 0; j < 16; j++) { + if(j >= line_len) { + line[j * 3] = ' '; + line[j * 3 + 1] = ' '; + line[j * 3 + 2] = ' '; + continue; + } + // write hex without sprintf line[j * 3] = hex[bytes[i * 16 + j] >> 4]; line[j * 3 + 1] = hex[bytes[i * 16 + j] & 0x0F]; line[j * 3 + 2] = ' '; } - line[16 * 3] = '\0'; + line[16 * 3] = ' '; + line[16 * 3 + 1] = '|'; + line[16 * 3 + 2] = ' '; + for(int j = 0; j < line_len; j++) { + // write ascii without sprintf + line[16 * 3 + 3 + j] = + bytes[i * 16 + j] >= 32 && bytes[i * 16 + j] <= 126 ? bytes[i * 16 + j] : '.'; + } + line[16 * 3 + 3 + line_len] = '\0'; FURI_LOG_I("MTP", line); } free(line);