Kaynağa Gözat

chore: enhanced debugging

Alex4386 1 yıl önce
ebeveyn
işleme
20bfacfc42
1 değiştirilmiş dosya ile 19 ekleme ve 4 silme
  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) {
     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);