Add stderr support and remove 1us timeout for timeouts of 0us (#858)

This commit is contained in:
Graham Sanderson 2022-06-20 09:52:06 -05:00 committed by GitHub
parent 7858601a58
commit b3c56e7169
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -29,6 +29,10 @@
#include "pico/stdio_semihosting.h"
#endif
#define STDIO_HANDLE_STDIN 0
#define STDIO_HANDLE_STDOUT 1
#define STDIO_HANDLE_STDERR 2
static stdio_driver_t *drivers;
static stdio_driver_t *filter;
@ -131,11 +135,13 @@ static int stdio_get_until(char *buf, int len, absolute_time_t until) {
}
}
}
if (time_reached(until)) {
return PICO_ERROR_TIMEOUT;
}
// we sleep here in case the in_chars methods acquire mutexes or disable IRQs and
// potentially starve out what they are waiting on (have seen this with USB)
busy_wait_us(1);
} while (!time_reached(until));
return PICO_ERROR_TIMEOUT;
} while (true);
}
int WRAPPER_FUNC(putchar)(int c) {
@ -165,14 +171,14 @@ int puts_raw(const char *s) {
}
int _read(int handle, char *buffer, int length) {
if (handle == 0) {
if (handle == STDIO_HANDLE_STDIN) {
return stdio_get_until(buffer, length, at_the_end_of_time);
}
return -1;
}
int _write(int handle, char *buffer, int length) {
if (handle == 1) {
if (handle == STDIO_HANDLE_STDOUT || handle == STDIO_HANDLE_STDERR) {
stdio_put_string(buffer, length, false, false);
return length;
}