summaryrefslogtreecommitdiffstats
path: root/main/fix-serial.patch
blob: 80b11c567305e52d3c019472f8a1aa6d7fd85bf7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
diff --git a/movement/filesystem.c b/movement/filesystem.c
index 97e3545..d3c2f83 100644
--- a/movement/filesystem.c
+++ b/movement/filesystem.c
@@ -275,6 +275,10 @@ void filesystem_process_command(char *line) {
             filesystem_append_file(filename, "\n", 1);
         }
         free(text);
+    } else if (strcmp(command, "format") == 0) {
+        lfs_unmount(&lfs);
+        lfs_format(&lfs, &cfg);
+        lfs_mount(&lfs, &cfg);
     } else {
         printf("%s: command not found\n", command);
     }
diff --git a/movement/movement.c b/movement/movement.c
index 825f130..c7066f7 100644
--- a/movement/movement.c
+++ b/movement/movement.c
@@ -547,7 +547,29 @@ bool app_loop(void) {
             tx = "";
         });
 #else
-        read(0, line, 256);
+#if 0
+        read(0, &line[ll], sizeof(line)-ll);
+#else
+        // JMM yuck just yuck, we do our best to patch this mess up
+        {
+            static char buf[sizeof(line) - 1];
+            static int bl; //again really signed?
+            int red;
+
+            red = read(0, &buf[bl], sizeof(buf) - 1);
+
+            if (red > 0) {
+                write(0, &buf[bl], red);
+                bl += red;
+                if (buf[bl-1] == '\r') {
+                    for (red = 0; red < bl; ++red)
+                        line[red] = buf[red] == '\r' ? '\n' : buf[red];
+                    //memcpy(line,buf,bl-1);
+                    bl = 0;
+                }
+            }
+        }
+#endif
 #endif
         if (strlen(line)) filesystem_process_command(line);
     }
diff --git a/watch-library/hardware/watch/watch_private.c b/watch-library/hardware/watch/watch_private.c
index cd607b8..5081fdb 100644
--- a/watch-library/hardware/watch/watch_private.c
+++ b/watch-library/hardware/watch/watch_private.c
@@ -246,9 +246,18 @@ void _watch_enable_usb(void) {
 // this function ends up getting called by printf to log stuff to the USB console.
 int _write(int file, char *ptr, int len) {
     (void)file;
+    int i; //it's 2023 boys and girls you can use size_t and ssize_t
     if (hri_usbdevice_get_CTRLA_ENABLE_bit(USB)) {
-        tud_cdc_n_write(0, (void const*)ptr, len);
-        tud_cdc_n_write_flush(0);
+        //tud_cdc_n_write(0, (void const*)ptr, len);
+        for (i = 0; i < len; ++i)
+        {
+            if (ptr[i]=='\n') {
+                tud_cdc_n_write(0, (void const*)"\r\n", 2);
+            } else {
+                tud_cdc_n_write(0, (void const*)&ptr[i], 1);
+            }
+            tud_cdc_n_write_flush(0);
+        }
         return len;
     }
 
@@ -262,6 +271,8 @@ int _read(int file, char *ptr, int len) {
     int actual_length = strlen(buf);
     if (actual_length) {
         memcpy(ptr, buf, min(len, actual_length));
+        //JMM yuckity yuck yuck
+        buf[0] = 0;
         return actual_length;
     }
     return 0;
diff --git a/watch-library/shared/watch/watch.h b/watch-library/shared/watch/watch.h
index 790f9a1..b280ae6 100644
--- a/watch-library/shared/watch/watch.h
+++ b/watch-library/shared/watch/watch.h
@@ -95,5 +95,6 @@ void watch_reset_to_bootloader(void);
   * @return The number of bytes read, or zero if no bytes were read.
   */
 int read(int file, char *ptr, int len);
+int write(int file, char *ptr, int len);
 
-#endif /* WATCH_H_ */
\ No newline at end of file
+#endif /* WATCH_H_ */