Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 11 additions & 3 deletions bricks/_common_stm32/mphalport.c
Original file line number Diff line number Diff line change
Expand Up @@ -88,13 +88,17 @@ int mp_hal_stdin_rx_chr(void) {
}

// Send string of given length
void mp_hal_stdout_tx_strn(const char *str, mp_uint_t len) {
mp_uint_t mp_hal_stdout_tx_strn(const char *str, size_t len) {
size_t org_len = len;

while (len--) {
while (!(USART6->SR & USART_SR_TXE)) {
MICROPY_VM_HOOK_LOOP
}
USART6->DR = *str++;
}

return org_len;
}

void mp_hal_stdout_tx_flush(void) {
Expand Down Expand Up @@ -127,7 +131,9 @@ int mp_hal_stdin_rx_chr(void) {
}

// Send string of given length
void mp_hal_stdout_tx_strn(const char *str, mp_uint_t len) {
mp_uint_t mp_hal_stdout_tx_strn(const char *str, size_t len) {
size_t org_len = len;

while (len) {
uint32_t size = len;
pbio_error_t err = pbsys_bluetooth_tx((const uint8_t *)str, &size);
Expand All @@ -141,11 +147,13 @@ void mp_hal_stdout_tx_strn(const char *str, mp_uint_t len) {
if (err != PBIO_ERROR_AGAIN) {
// Ignoring error for now. This means stdout lost if Bluetooth is
// disconnected.
return;
return org_len - len;
}

MICROPY_EVENT_POLL_HOOK
}

return org_len;
}

void mp_hal_stdout_tx_flush(void) {
Expand Down
25 changes: 20 additions & 5 deletions bricks/ev3dev/ev3dev_mphal.c
Original file line number Diff line number Diff line change
Expand Up @@ -109,11 +109,26 @@ int mp_hal_stdin_rx_chr(void) {
return c;
}

void mp_hal_stdout_tx_strn(const char *str, size_t len) {
MP_THREAD_GIL_EXIT();
int ret = write(STDOUT_FILENO, str, len);
MP_THREAD_GIL_ENTER();
(void)ret; // to suppress compiler warning
mp_uint_t mp_hal_stdout_tx_strn(const char *str, size_t len) {
size_t remaining = len;
while (remaining > 0) {
MP_THREAD_GIL_EXIT();
ssize_t ret = write(STDOUT_FILENO, str, remaining);
MP_THREAD_GIL_ENTER();
if (ret < 0) {
if (errno == EINTR) {
continue;
}
return len - remaining;
}
/* Defensive check: POSIX guarantees ret <= remaining, but guard against non-compliant implementations. */
if ((size_t)ret > remaining) {
return len;
}
str += ret;
remaining -= (size_t)ret;
}
return len;
}

// cooked is same as uncooked because the terminal does some postprocessing
Expand Down
5 changes: 4 additions & 1 deletion bricks/ev3rt/mphalport.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,11 +75,14 @@ int mp_hal_stdin_rx_chr(void) {
}

// Send string of given length
void mp_hal_stdout_tx_strn(const char *str, mp_uint_t len) {
mp_uint_t mp_hal_stdout_tx_strn(const char *str, size_t len) {
uint32_t in_waiting;
if (bluetooth_is_connected(&in_waiting)) {
serial_wri_dat(EV3_SERIAL_BT, str, len);
return len;
}

return 0;
}

void mp_hal_stdout_tx_flush(void) {
Expand Down
7 changes: 5 additions & 2 deletions bricks/nxt/mphalport.c
Original file line number Diff line number Diff line change
Expand Up @@ -85,17 +85,20 @@ int mp_hal_stdin_rx_chr(void) {
}

// Send string of given length
void mp_hal_stdout_tx_strn(const char *str, mp_uint_t len) {
mp_uint_t mp_hal_stdout_tx_strn(const char *str, size_t len) {

// Nothing to do if disconnected or empty data
if (!nx_bt_stream_opened() || len == 0) {
return;
return 0;
}

size_t org_len = len;
nx_bt_stream_write((uint8_t *)str, len);
while (!nx_bt_stream_data_written()) {
MICROPY_EVENT_POLL_HOOK;
}

return org_len;
}

void mp_hal_stdout_tx_flush(void) {
Expand Down
12 changes: 8 additions & 4 deletions bricks/primehub_spike-rt/mphalport.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,14 @@ int mp_hal_stdin_rx_chr(void) {
}

// Send string of given length
//void mp_hal_stdout_tx_strn(const char *str, mp_uint_t len) {
mp_uint_t mp_hal_stdout_tx_strn(const char *str, size_t len) {
size_t org_len = len;
extern void tPutLogTarget_ePutLog_putChar(char c);
while (len--) {
tPutLogTarget_ePutLog_putChar(*str++);
}
// serial_wri_dat(TASK_PORTID, str, len)
return 0;
return org_len;
}

#else // !PYBRICKS_HUB_DEBUG
Expand Down Expand Up @@ -94,7 +94,9 @@ int mp_hal_stdin_rx_chr(void) {
}

// Send string of given length
void mp_hal_stdout_tx_strn(const char *str, mp_uint_t len) {
mp_uint_t mp_hal_stdout_tx_strn(const char *str, size_t len) {
size_t org_len = len;

while (len) {
uint32_t size = len;
pbio_error_t err = pbsys_bluetooth_tx((const uint8_t *)str, &size);
Expand All @@ -108,11 +110,13 @@ void mp_hal_stdout_tx_strn(const char *str, mp_uint_t len) {
if (err != PBIO_ERROR_AGAIN) {
// Ignoring error for now. This means stdout lost if Bluetooth is
// disconnected.
return;
return org_len - len;
}

MICROPY_EVENT_POLL_HOOK
}

return org_len;
}

#endif // PYBRICKS_HUB_DEBUG