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_ */
|