108 lines
3.6 KiB
C
108 lines
3.6 KiB
C
/*
|
|
* Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#ifndef _PICO_STDIO_H
|
|
#define _PICO_STDIO_H
|
|
|
|
/** \file stdio.h
|
|
* \defgroup pico_stdio pico_stdio
|
|
* Customized stdio support allowing for input and output from UART, USB, semi-hosting etc.
|
|
*
|
|
* Note the API for adding additional input output devices is not yet considered stable
|
|
*/
|
|
|
|
#include "pico.h"
|
|
|
|
// PICO_CONFIG: PICO_STDOUT_MUTEX, Enable/disable mutex around stdout, type=bool, default=1, group=pico_stdio
|
|
#ifndef PICO_STDOUT_MUTEX
|
|
#define PICO_STDOUT_MUTEX 1
|
|
#endif
|
|
|
|
// PICO_CONFIG: PICO_STDIO_ENABLE_CRLF_SUPPORT, Enable/disable CR/LF output conversion support, type=bool, default=1, group=pico_stdio
|
|
#ifndef PICO_STDIO_ENABLE_CRLF_SUPPORT
|
|
#define PICO_STDIO_ENABLE_CRLF_SUPPORT 1
|
|
#endif
|
|
|
|
// PICO_CONFIG: PICO_STDIO_DEFAULT_CRLF, Default for CR/LF conversion enabled on all stdio outputs, type=bool, default=1, depends=PICO_STDIO_ENABLE_CRLF_SUPPORT, group=pico_stdio
|
|
#ifndef PICO_STDIO_DEFAULT_CRLF
|
|
#define PICO_STDIO_DEFAULT_CRLF 1
|
|
#endif
|
|
|
|
// PICO_CONFIG: PICO_STDIO_STACK_BUFFER_SIZE, Define printf buffer size (on stack)... this is just a working buffer not a max output size, min=0, max=512, default=128, group=pico_stdio
|
|
#ifndef PICO_STDIO_STACK_BUFFER_SIZE
|
|
#define PICO_STDIO_STACK_BUFFER_SIZE 128
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
typedef struct stdio_driver stdio_driver_t;
|
|
|
|
/*! \brief Initialize all of the present standard stdio types that are linked into the binary.
|
|
* \ingroup pico_stdio
|
|
*
|
|
* Call this method once you have set up your clocks to enable the stdio support for UART, USB
|
|
* and semihosting based on the presence of the respective librariess in the binary.
|
|
*
|
|
* \see stdio_uart, stdio_usb, stdio_semihosting
|
|
*/
|
|
void stdio_init_all();
|
|
|
|
/*! \brief Initialize all of the present standard stdio types that are linked into the binary.
|
|
* \ingroup pico_stdio
|
|
*
|
|
* Call this method once you have set up your clocks to enable the stdio support for UART, USB
|
|
* and semihosting based on the presence of the respective librariess in the binary.
|
|
*
|
|
* \see stdio_uart, stdio_usb, stdio_semihosting
|
|
*/
|
|
void stdio_flush();
|
|
|
|
/*! \brief Return a character from stdin if there is one available within a timeout
|
|
* \ingroup pico_stdio
|
|
*
|
|
* \param timeout_us the timeout in microseconds, or 0 to not wait for a character if none available.
|
|
* \return the character from 0-255 or PICO_ERROR_TIMEOUT if timeout occurs
|
|
*/
|
|
int getchar_timeout_us(uint32_t timeout_us);
|
|
|
|
/*! \brief Adds or removes a driver from the list of active drivers used for input/output
|
|
* \ingroup pico_stdio
|
|
*
|
|
* \note this method should always be called on an initialized driver
|
|
* \param driver the driver
|
|
* \param enabled true to add, false to remove
|
|
*/
|
|
void stdio_set_driver_enabled(stdio_driver_t *driver, bool enabled);
|
|
|
|
/*! \brief Control limiting of output to a single driver
|
|
* \ingroup pico_stdio
|
|
*
|
|
* \note this method should always be called on an initialized driver
|
|
*
|
|
* \param driver if non-null then output only that driver will be used for input/output (assuming it is in the list of enabled drivers).
|
|
* if NULL then all enabled drivers will be used
|
|
*/
|
|
void stdio_filter_driver(stdio_driver_t *driver);
|
|
|
|
/*! \brief control conversion of line feeds to carriage return on transmissions
|
|
* \ingroup pico_stdio
|
|
*
|
|
* \note this method should always be called on an initialized driver
|
|
*
|
|
* \param driver the driver
|
|
* \param translate If true, convert line feeds to carriage return on transmissions
|
|
*/
|
|
void stdio_set_translate_crlf(stdio_driver_t *driver, bool translate);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|