Alex4386 1 год назад
Родитель
Сommit
20bfacfc42
1 измененных файлов с 19 добавлено и 4 удалено
  1. 19 4
      src/scenes/mtp/utils.c

+ 19 - 4
src/scenes/mtp/utils.c

@@ -4,18 +4,33 @@ const char hex[] = "0123456789ABCDEF";
 
 
 void print_bytes(char* tag, uint8_t* bytes, size_t len) {
 void print_bytes(char* tag, uint8_t* bytes, size_t len) {
     FURI_LOG_I("MTP", "Dumping bytes - TAG: %s", tag);
     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;
     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++) {
     for(int i = 0; i < lines; i++) {
         int line_len = i == lines - 1 ? last_line_len : 16;
         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
             // write hex without sprintf
             line[j * 3] = hex[bytes[i * 16 + j] >> 4];
             line[j * 3] = hex[bytes[i * 16 + j] >> 4];
             line[j * 3 + 1] = hex[bytes[i * 16 + j] & 0x0F];
             line[j * 3 + 1] = hex[bytes[i * 16 + j] & 0x0F];
             line[j * 3 + 2] = ' ';
             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);
         FURI_LOG_I("MTP", line);
     }
     }
     free(line);
     free(line);