From ed852e8b4a18101dd081759c180546b4b386d4c7 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Mon, 12 Nov 2018 12:59:27 +0300 Subject: [PATCH] subsys: console: Split tty definitions into tty.h, to form its own API This patch proceeds with the separation of older serial console subsystem into device-independent console subsytem and buffered serial device ("tty") API. Signed-off-by: Paul Sokolovsky --- include/console.h | 89 ------------------------------- include/tty.h | 111 +++++++++++++++++++++++++++++++++++++++ subsys/console/getchar.c | 1 + subsys/console/tty.c | 2 +- 4 files changed, 113 insertions(+), 90 deletions(-) create mode 100644 include/tty.h diff --git a/include/console.h b/include/console.h index 88e3df7c314..9eef30aae3b 100644 --- a/include/console.h +++ b/include/console.h @@ -15,95 +15,6 @@ extern "C" { #endif -struct tty_serial { - struct device *uart_dev; - - struct k_sem rx_sem; - u8_t *rx_ringbuf; - u32_t rx_ringbuf_sz; - u16_t rx_get, rx_put; - s32_t rx_timeout; - - struct k_sem tx_sem; - u8_t *tx_ringbuf; - u32_t tx_ringbuf_sz; - u16_t tx_get, tx_put; - s32_t tx_timeout; -}; - -/** - * @brief Initialize buffered serial port (classically known as tty). - * - * "tty" device provides buffered, interrupt-driver access to an - * underlying UART device. - * - * @param tty tty device structure to initialize - * @param uart_dev underlying UART device to use (should support - * interrupt-driven operation) - * @param rxbuf pointer to receive buffer - * @param rxbuf_sz size of receive buffer - * @param txbuf pointer to transmit buffer - * @param txbuf_sz size of transmit buffer - * - * @return N/A - */ -void tty_init(struct tty_serial *tty, struct device *uart_dev, - u8_t *rxbuf, u16_t rxbuf_sz, - u8_t *txbuf, u16_t txbuf_sz); - -/** - * @brief Set receive timeout for tty device. - * - * Set timeout for getchar() operation. Default timeout after - * device initialization is K_FOREVER. - * - * @param tty tty device structure - * @param timeout timeout in milliseconds, or K_FOREVER, or K_NO_WAIT - */ -static inline void tty_set_rx_timeout(struct tty_serial *tty, s32_t timeout) -{ - tty->rx_timeout = timeout; -} - -/** - * @brief Set transmit timeout for tty device. - * - * Set timeout for putchar() operation, for a case when output buffer is full. - * Default timeout after device initialization is K_FOREVER. - * - * @param tty tty device structure - * @param timeout timeout in milliseconds, or K_FOREVER, or K_NO_WAIT - */ -static inline void tty_set_tx_timeout(struct tty_serial *tty, s32_t timeout) -{ - tty->tx_timeout = timeout; -} - -/** - * @brief Read data from a tty device. - * - * @param tty tty device structure - * @param buf buffer to read data to - * @param size maximum number of bytes to read - * @return >0, number of actually read bytes (can be less than size param) - * =0, for EOF-like condition (e.g., break signalled) - * <0, in case of error (e.g. -EAGAIN if timeout expired). errno - * variable is also set. - */ -ssize_t tty_read(struct tty_serial *tty, void *buf, size_t size); - -/** - * @brief Write data to tty device. - * - * @param tty tty device structure - * @param buf buffer containg data - * @param size maximum number of bytes to write - * @return =>0, number of actually written bytes (can be less than size param) - * <0, in case of error (e.g. -EAGAIN if timeout expired). errno - * variable is also set. - */ -ssize_t tty_write(struct tty_serial *tty, const void *buf, size_t size); - /** @brief Initialize console device. * * This function should be called once to initialize pull-style diff --git a/include/tty.h b/include/tty.h new file mode 100644 index 00000000000..ab43c1414f9 --- /dev/null +++ b/include/tty.h @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2018 Linaro Limited + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef ZEPHYR_INCLUDE_TTY_H_ +#define ZEPHYR_INCLUDE_TTY_H_ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct tty_serial { + struct device *uart_dev; + + struct k_sem rx_sem; + u8_t *rx_ringbuf; + u32_t rx_ringbuf_sz; + u16_t rx_get, rx_put; + s32_t rx_timeout; + + struct k_sem tx_sem; + u8_t *tx_ringbuf; + u32_t tx_ringbuf_sz; + u16_t tx_get, tx_put; + s32_t tx_timeout; +}; + +/** + * @brief Initialize buffered serial port (classically known as tty). + * + * "tty" device provides buffered, interrupt-driver access to an + * underlying UART device. + * + * @param tty tty device structure to initialize + * @param uart_dev underlying UART device to use (should support + * interrupt-driven operation) + * @param rxbuf pointer to receive buffer + * @param rxbuf_sz size of receive buffer + * @param txbuf pointer to transmit buffer + * @param txbuf_sz size of transmit buffer + * + * @return N/A + */ +void tty_init(struct tty_serial *tty, struct device *uart_dev, + u8_t *rxbuf, u16_t rxbuf_sz, + u8_t *txbuf, u16_t txbuf_sz); + +/** + * @brief Set receive timeout for tty device. + * + * Set timeout for getchar() operation. Default timeout after + * device initialization is K_FOREVER. + * + * @param tty tty device structure + * @param timeout timeout in milliseconds, or K_FOREVER, or K_NO_WAIT + */ +static inline void tty_set_rx_timeout(struct tty_serial *tty, s32_t timeout) +{ + tty->rx_timeout = timeout; +} + +/** + * @brief Set transmit timeout for tty device. + * + * Set timeout for putchar() operation, for a case when output buffer is full. + * Default timeout after device initialization is K_FOREVER. + * + * @param tty tty device structure + * @param timeout timeout in milliseconds, or K_FOREVER, or K_NO_WAIT + */ +static inline void tty_set_tx_timeout(struct tty_serial *tty, s32_t timeout) +{ + tty->tx_timeout = timeout; +} + +/** + * @brief Read data from a tty device. + * + * @param tty tty device structure + * @param buf buffer to read data to + * @param size maximum number of bytes to read + * @return >0, number of actually read bytes (can be less than size param) + * =0, for EOF-like condition (e.g., break signalled) + * <0, in case of error (e.g. -EAGAIN if timeout expired). errno + * variable is also set. + */ +ssize_t tty_read(struct tty_serial *tty, void *buf, size_t size); + +/** + * @brief Write data to tty device. + * + * @param tty tty device structure + * @param buf buffer containg data + * @param size maximum number of bytes to write + * @return =>0, number of actually written bytes (can be less than size param) + * <0, in case of error (e.g. -EAGAIN if timeout expired). errno + * variable is also set. + */ +ssize_t tty_write(struct tty_serial *tty, const void *buf, size_t size); + +#ifdef __cplusplus +} +#endif + +#endif /* ZEPHYR_INCLUDE_TTY_H_ */ diff --git a/subsys/console/getchar.c b/subsys/console/getchar.c index aa4d9085ee2..0700ba332f0 100644 --- a/subsys/console/getchar.c +++ b/subsys/console/getchar.c @@ -7,6 +7,7 @@ #include #include #include +#include static struct tty_serial console_serial; diff --git a/subsys/console/tty.c b/subsys/console/tty.c index 31b475a909d..c0dbf0644d4 100644 --- a/subsys/console/tty.c +++ b/subsys/console/tty.c @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include #include