Skip to content

Commit b00040c

Browse files
committed
esp8266/esp_mphal: Send data in chunks to mp_uos_dupterm_tx_strn.
Sending byte-by-byte is inefficient and leads to errors in the WebSocket protocol when sending utf-8 encoded characters.
1 parent 54acd0b commit b00040c

1 file changed

Lines changed: 20 additions & 9 deletions

File tree

ports/esp8266/esp_mphal.c

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,6 @@ int mp_hal_stdin_rx_chr(void) {
7272
}
7373
}
7474

75-
void mp_hal_stdout_tx_char(char c) {
76-
uart_tx_one_char(UART0, c);
77-
mp_uos_dupterm_tx_strn(&c, 1);
78-
}
79-
8075
#if 0
8176
void mp_hal_debug_str(const char *str) {
8277
while (*str) {
@@ -87,23 +82,39 @@ void mp_hal_debug_str(const char *str) {
8782
#endif
8883

8984
void mp_hal_stdout_tx_str(const char *str) {
85+
const char *last = str;
9086
while (*str) {
91-
mp_hal_stdout_tx_char(*str++);
87+
uart_tx_one_char(UART0, *str++);
9288
}
89+
mp_uos_dupterm_tx_strn(last, str - last);
9390
}
9491

9592
void mp_hal_stdout_tx_strn(const char *str, uint32_t len) {
93+
const char *last = str;
9694
while (len--) {
97-
mp_hal_stdout_tx_char(*str++);
95+
uart_tx_one_char(UART0, *str++);
9896
}
97+
mp_uos_dupterm_tx_strn(last, str - last);
9998
}
10099

101100
void mp_hal_stdout_tx_strn_cooked(const char *str, uint32_t len) {
101+
const char *last = str;
102102
while (len--) {
103103
if (*str == '\n') {
104-
mp_hal_stdout_tx_char('\r');
104+
if (str > last) {
105+
mp_uos_dupterm_tx_strn(last, str - last);
106+
}
107+
uart_tx_one_char(UART0, '\r');
108+
uart_tx_one_char(UART0, '\n');
109+
mp_uos_dupterm_tx_strn("\r\n", 2);
110+
++str;
111+
last = str;
112+
} else {
113+
uart_tx_one_char(UART0, *str++);
105114
}
106-
mp_hal_stdout_tx_char(*str++);
115+
}
116+
if (str > last) {
117+
mp_uos_dupterm_tx_strn(last, str - last);
107118
}
108119
}
109120

0 commit comments

Comments
 (0)