subsys: console: Add pull-style console API support.
This change introduces console_getchar() and console_getline() API
calls which can be used to get pending console input (either one
char or whole line), or block waiting for one. In this regard, they
are similar to well-known ANSI C function getchar/gets/fgets, and
are intended to ease porting of existing applications to Zephyr, and
indeed, these functions (shaped as an external module) are already
used by few applications.
The implementation of the functions is structured as a new "console"
subsystem. The intention is that further generic console code may be
pulled there instead of being in drivers/console/. Besides the
functions themselves, initialization code and sample applications
are included.
At this time, there're may limitations of how these functions can
be used. For example, console_getchar() and console_getline() are
mutually exclusive, and both are incompatible with callback
(push-style) console API (and e.g. with console shell subsystem
which uses this API). Again, the intention is to make a first step
towards refactoring console subsystem to allow more flexible
real-world usage, better reusability and composability.
Change-Id: I3f4015bb5b26e0656f82f428b11ba30e980d25a0
Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
2017-03-24 18:50:16 +08:00
|
|
|
/*
|
|
|
|
* Copyright (c) 2017 Linaro Limited
|
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
|
|
*/
|
|
|
|
|
2018-09-15 01:43:44 +08:00
|
|
|
#ifndef ZEPHYR_INCLUDE_CONSOLE_H_
|
|
|
|
#define ZEPHYR_INCLUDE_CONSOLE_H_
|
subsys: console: Add pull-style console API support.
This change introduces console_getchar() and console_getline() API
calls which can be used to get pending console input (either one
char or whole line), or block waiting for one. In this regard, they
are similar to well-known ANSI C function getchar/gets/fgets, and
are intended to ease porting of existing applications to Zephyr, and
indeed, these functions (shaped as an external module) are already
used by few applications.
The implementation of the functions is structured as a new "console"
subsystem. The intention is that further generic console code may be
pulled there instead of being in drivers/console/. Besides the
functions themselves, initialization code and sample applications
are included.
At this time, there're may limitations of how these functions can
be used. For example, console_getchar() and console_getline() are
mutually exclusive, and both are incompatible with callback
(push-style) console API (and e.g. with console shell subsystem
which uses this API). Again, the intention is to make a first step
towards refactoring console subsystem to allow more flexible
real-world usage, better reusability and composability.
Change-Id: I3f4015bb5b26e0656f82f428b11ba30e980d25a0
Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
2017-03-24 18:50:16 +08:00
|
|
|
|
2018-10-24 02:15:46 +08:00
|
|
|
#include <sys/types.h>
|
2017-04-26 23:21:07 +08:00
|
|
|
#include <zephyr/types.h>
|
2018-08-20 22:58:35 +08:00
|
|
|
#include <kernel.h>
|
2017-04-26 23:21:07 +08:00
|
|
|
|
subsys: console: Add pull-style console API support.
This change introduces console_getchar() and console_getline() API
calls which can be used to get pending console input (either one
char or whole line), or block waiting for one. In this regard, they
are similar to well-known ANSI C function getchar/gets/fgets, and
are intended to ease porting of existing applications to Zephyr, and
indeed, these functions (shaped as an external module) are already
used by few applications.
The implementation of the functions is structured as a new "console"
subsystem. The intention is that further generic console code may be
pulled there instead of being in drivers/console/. Besides the
functions themselves, initialization code and sample applications
are included.
At this time, there're may limitations of how these functions can
be used. For example, console_getchar() and console_getline() are
mutually exclusive, and both are incompatible with callback
(push-style) console API (and e.g. with console shell subsystem
which uses this API). Again, the intention is to make a first step
towards refactoring console subsystem to allow more flexible
real-world usage, better reusability and composability.
Change-Id: I3f4015bb5b26e0656f82f428b11ba30e980d25a0
Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
2017-03-24 18:50:16 +08:00
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
2018-10-24 02:15:46 +08:00
|
|
|
/** @brief Initialize console device.
|
subsys: console: Add pull-style console API support.
This change introduces console_getchar() and console_getline() API
calls which can be used to get pending console input (either one
char or whole line), or block waiting for one. In this regard, they
are similar to well-known ANSI C function getchar/gets/fgets, and
are intended to ease porting of existing applications to Zephyr, and
indeed, these functions (shaped as an external module) are already
used by few applications.
The implementation of the functions is structured as a new "console"
subsystem. The intention is that further generic console code may be
pulled there instead of being in drivers/console/. Besides the
functions themselves, initialization code and sample applications
are included.
At this time, there're may limitations of how these functions can
be used. For example, console_getchar() and console_getline() are
mutually exclusive, and both are incompatible with callback
(push-style) console API (and e.g. with console shell subsystem
which uses this API). Again, the intention is to make a first step
towards refactoring console subsystem to allow more flexible
real-world usage, better reusability and composability.
Change-Id: I3f4015bb5b26e0656f82f428b11ba30e980d25a0
Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
2017-03-24 18:50:16 +08:00
|
|
|
*
|
|
|
|
* This function should be called once to initialize pull-style
|
2017-04-10 15:47:28 +08:00
|
|
|
* access to console via console_getchar() function and buffered
|
2017-08-10 23:21:28 +08:00
|
|
|
* output using console_putchar() function. This function supersedes,
|
2017-04-10 15:47:28 +08:00
|
|
|
* and incompatible with, callback (push-style) console handling
|
|
|
|
* (via console_input_fn callback, etc.).
|
subsys: console: Add pull-style console API support.
This change introduces console_getchar() and console_getline() API
calls which can be used to get pending console input (either one
char or whole line), or block waiting for one. In this regard, they
are similar to well-known ANSI C function getchar/gets/fgets, and
are intended to ease porting of existing applications to Zephyr, and
indeed, these functions (shaped as an external module) are already
used by few applications.
The implementation of the functions is structured as a new "console"
subsystem. The intention is that further generic console code may be
pulled there instead of being in drivers/console/. Besides the
functions themselves, initialization code and sample applications
are included.
At this time, there're may limitations of how these functions can
be used. For example, console_getchar() and console_getline() are
mutually exclusive, and both are incompatible with callback
(push-style) console API (and e.g. with console shell subsystem
which uses this API). Again, the intention is to make a first step
towards refactoring console subsystem to allow more flexible
real-world usage, better reusability and composability.
Change-Id: I3f4015bb5b26e0656f82f428b11ba30e980d25a0
Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
2017-03-24 18:50:16 +08:00
|
|
|
*
|
|
|
|
* @return N/A
|
|
|
|
*/
|
2017-04-10 15:47:28 +08:00
|
|
|
void console_init(void);
|
subsys: console: Add pull-style console API support.
This change introduces console_getchar() and console_getline() API
calls which can be used to get pending console input (either one
char or whole line), or block waiting for one. In this regard, they
are similar to well-known ANSI C function getchar/gets/fgets, and
are intended to ease porting of existing applications to Zephyr, and
indeed, these functions (shaped as an external module) are already
used by few applications.
The implementation of the functions is structured as a new "console"
subsystem. The intention is that further generic console code may be
pulled there instead of being in drivers/console/. Besides the
functions themselves, initialization code and sample applications
are included.
At this time, there're may limitations of how these functions can
be used. For example, console_getchar() and console_getline() are
mutually exclusive, and both are incompatible with callback
(push-style) console API (and e.g. with console shell subsystem
which uses this API). Again, the intention is to make a first step
towards refactoring console subsystem to allow more flexible
real-world usage, better reusability and composability.
Change-Id: I3f4015bb5b26e0656f82f428b11ba30e980d25a0
Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
2017-03-24 18:50:16 +08:00
|
|
|
|
2018-10-24 02:15:46 +08:00
|
|
|
/**
|
|
|
|
* @brief Read data from console.
|
|
|
|
*
|
|
|
|
* @param dummy ignored, present to follow read() prototype
|
|
|
|
* @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, in case of EOF
|
|
|
|
* <0, in case of error (e.g. -EAGAIN if timeout expired). errno
|
|
|
|
* variable is also set.
|
|
|
|
*/
|
|
|
|
ssize_t console_read(void *dummy, void *buf, size_t size);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Write data to console.
|
|
|
|
*
|
|
|
|
* @param dummy ignored, present to follow write() prototype
|
|
|
|
* @param buf buffer to write data to
|
|
|
|
* @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 console_write(void *dummy, const void *buf, size_t size);
|
|
|
|
|
subsys: console: Add pull-style console API support.
This change introduces console_getchar() and console_getline() API
calls which can be used to get pending console input (either one
char or whole line), or block waiting for one. In this regard, they
are similar to well-known ANSI C function getchar/gets/fgets, and
are intended to ease porting of existing applications to Zephyr, and
indeed, these functions (shaped as an external module) are already
used by few applications.
The implementation of the functions is structured as a new "console"
subsystem. The intention is that further generic console code may be
pulled there instead of being in drivers/console/. Besides the
functions themselves, initialization code and sample applications
are included.
At this time, there're may limitations of how these functions can
be used. For example, console_getchar() and console_getline() are
mutually exclusive, and both are incompatible with callback
(push-style) console API (and e.g. with console shell subsystem
which uses this API). Again, the intention is to make a first step
towards refactoring console subsystem to allow more flexible
real-world usage, better reusability and composability.
Change-Id: I3f4015bb5b26e0656f82f428b11ba30e980d25a0
Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
2017-03-24 18:50:16 +08:00
|
|
|
/** @brief Get next char from console input buffer.
|
|
|
|
*
|
|
|
|
* Return next input character from console. If no characters available,
|
|
|
|
* this function will block. This function is similar to ANSI C
|
|
|
|
* getchar() function and is intended to ease porting of existing
|
|
|
|
* software. Before this function can be used, console_getchar_init()
|
|
|
|
* should be called once. This function is incompatible with native
|
|
|
|
* Zephyr callback-based console input processing, shell subsystem,
|
|
|
|
* or console_getline().
|
|
|
|
*
|
2018-10-24 02:15:46 +08:00
|
|
|
* @return 0-255: a character read, including control characters.
|
2018-12-18 06:32:40 +08:00
|
|
|
* <0: error occurred.
|
subsys: console: Add pull-style console API support.
This change introduces console_getchar() and console_getline() API
calls which can be used to get pending console input (either one
char or whole line), or block waiting for one. In this regard, they
are similar to well-known ANSI C function getchar/gets/fgets, and
are intended to ease porting of existing applications to Zephyr, and
indeed, these functions (shaped as an external module) are already
used by few applications.
The implementation of the functions is structured as a new "console"
subsystem. The intention is that further generic console code may be
pulled there instead of being in drivers/console/. Besides the
functions themselves, initialization code and sample applications
are included.
At this time, there're may limitations of how these functions can
be used. For example, console_getchar() and console_getline() are
mutually exclusive, and both are incompatible with callback
(push-style) console API (and e.g. with console shell subsystem
which uses this API). Again, the intention is to make a first step
towards refactoring console subsystem to allow more flexible
real-world usage, better reusability and composability.
Change-Id: I3f4015bb5b26e0656f82f428b11ba30e980d25a0
Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
2017-03-24 18:50:16 +08:00
|
|
|
*/
|
2018-10-24 02:15:46 +08:00
|
|
|
int console_getchar(void);
|
subsys: console: Add pull-style console API support.
This change introduces console_getchar() and console_getline() API
calls which can be used to get pending console input (either one
char or whole line), or block waiting for one. In this regard, they
are similar to well-known ANSI C function getchar/gets/fgets, and
are intended to ease porting of existing applications to Zephyr, and
indeed, these functions (shaped as an external module) are already
used by few applications.
The implementation of the functions is structured as a new "console"
subsystem. The intention is that further generic console code may be
pulled there instead of being in drivers/console/. Besides the
functions themselves, initialization code and sample applications
are included.
At this time, there're may limitations of how these functions can
be used. For example, console_getchar() and console_getline() are
mutually exclusive, and both are incompatible with callback
(push-style) console API (and e.g. with console shell subsystem
which uses this API). Again, the intention is to make a first step
towards refactoring console subsystem to allow more flexible
real-world usage, better reusability and composability.
Change-Id: I3f4015bb5b26e0656f82f428b11ba30e980d25a0
Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
2017-03-24 18:50:16 +08:00
|
|
|
|
2017-04-10 15:47:28 +08:00
|
|
|
/** @brief Output a char to console (buffered).
|
|
|
|
*
|
|
|
|
* Puts a character into console output buffer. It will be sent
|
|
|
|
* to a console asynchronously, e.g. using an IRQ handler.
|
|
|
|
*
|
2018-10-24 02:15:46 +08:00
|
|
|
* @return <0 on error, otherwise 0.
|
2017-04-10 15:47:28 +08:00
|
|
|
*/
|
|
|
|
int console_putchar(char c);
|
|
|
|
|
subsys: console: Add pull-style console API support.
This change introduces console_getchar() and console_getline() API
calls which can be used to get pending console input (either one
char or whole line), or block waiting for one. In this regard, they
are similar to well-known ANSI C function getchar/gets/fgets, and
are intended to ease porting of existing applications to Zephyr, and
indeed, these functions (shaped as an external module) are already
used by few applications.
The implementation of the functions is structured as a new "console"
subsystem. The intention is that further generic console code may be
pulled there instead of being in drivers/console/. Besides the
functions themselves, initialization code and sample applications
are included.
At this time, there're may limitations of how these functions can
be used. For example, console_getchar() and console_getline() are
mutually exclusive, and both are incompatible with callback
(push-style) console API (and e.g. with console shell subsystem
which uses this API). Again, the intention is to make a first step
towards refactoring console subsystem to allow more flexible
real-world usage, better reusability and composability.
Change-Id: I3f4015bb5b26e0656f82f428b11ba30e980d25a0
Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
2017-03-24 18:50:16 +08:00
|
|
|
/** @brief Initialize console_getline() call.
|
|
|
|
*
|
|
|
|
* This function should be called once to initialize pull-style
|
|
|
|
* access to console via console_getline() function. This function
|
2017-04-19 06:56:26 +08:00
|
|
|
* supersedes, and incompatible with, callback (push-style) console
|
subsys: console: Add pull-style console API support.
This change introduces console_getchar() and console_getline() API
calls which can be used to get pending console input (either one
char or whole line), or block waiting for one. In this regard, they
are similar to well-known ANSI C function getchar/gets/fgets, and
are intended to ease porting of existing applications to Zephyr, and
indeed, these functions (shaped as an external module) are already
used by few applications.
The implementation of the functions is structured as a new "console"
subsystem. The intention is that further generic console code may be
pulled there instead of being in drivers/console/. Besides the
functions themselves, initialization code and sample applications
are included.
At this time, there're may limitations of how these functions can
be used. For example, console_getchar() and console_getline() are
mutually exclusive, and both are incompatible with callback
(push-style) console API (and e.g. with console shell subsystem
which uses this API). Again, the intention is to make a first step
towards refactoring console subsystem to allow more flexible
real-world usage, better reusability and composability.
Change-Id: I3f4015bb5b26e0656f82f428b11ba30e980d25a0
Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
2017-03-24 18:50:16 +08:00
|
|
|
* handling (via console_input_fn callback, etc.).
|
|
|
|
*
|
|
|
|
* @return N/A
|
|
|
|
*/
|
|
|
|
void console_getline_init(void);
|
|
|
|
|
|
|
|
/** @brief Get next line from console input buffer.
|
|
|
|
*
|
|
|
|
* Return next input line from console. Until full line is available,
|
|
|
|
* this function will block. This function is similar to ANSI C
|
|
|
|
* gets() function (except a line is returned in system-owned buffer,
|
|
|
|
* and system takes care of the buffer overflow checks) and is
|
|
|
|
* intended to ease porting of existing software. Before this function
|
|
|
|
* can be used, console_getline_init() should be called once. This
|
|
|
|
* function is incompatible with native Zephyr callback-based console
|
|
|
|
* input processing, shell subsystem, or console_getchar().
|
|
|
|
*
|
|
|
|
* @return A pointer to a line read, not including EOL character(s).
|
|
|
|
* A line resides in a system-owned buffer, so an application
|
|
|
|
* should finish any processing of this line immediately
|
|
|
|
* after console_getline() call, or the buffer can be reused.
|
|
|
|
*/
|
|
|
|
char *console_getline(void);
|
|
|
|
|
2018-06-08 03:30:21 +08:00
|
|
|
/** @brief Initialize legacy fifo-based line input
|
|
|
|
*
|
|
|
|
* Input processing is started when string is typed in the console.
|
|
|
|
* Carriage return is translated to NULL making string always NULL
|
|
|
|
* terminated. Application before calling register function need to
|
|
|
|
* initialize two fifo queues mentioned below.
|
|
|
|
*
|
|
|
|
* This is a special-purpose function, it's recommended to use
|
|
|
|
* console_getchar() or console_getline() functions instead.
|
|
|
|
*
|
|
|
|
* @param avail_queue k_fifo queue keeping available line buffers
|
|
|
|
* @param out_queue k_fifo queue of entered lines which to be processed
|
|
|
|
* in the application code.
|
|
|
|
* @param completion callback for tab completion of entered commands
|
|
|
|
*/
|
2019-03-20 16:09:52 +08:00
|
|
|
__deprecated void console_register_line_input(struct k_fifo *avail_queue,
|
2018-06-08 03:30:21 +08:00
|
|
|
struct k_fifo *out_queue,
|
|
|
|
u8_t (*completion)(char *str, u8_t len));
|
|
|
|
|
subsys: console: Add pull-style console API support.
This change introduces console_getchar() and console_getline() API
calls which can be used to get pending console input (either one
char or whole line), or block waiting for one. In this regard, they
are similar to well-known ANSI C function getchar/gets/fgets, and
are intended to ease porting of existing applications to Zephyr, and
indeed, these functions (shaped as an external module) are already
used by few applications.
The implementation of the functions is structured as a new "console"
subsystem. The intention is that further generic console code may be
pulled there instead of being in drivers/console/. Besides the
functions themselves, initialization code and sample applications
are included.
At this time, there're may limitations of how these functions can
be used. For example, console_getchar() and console_getline() are
mutually exclusive, and both are incompatible with callback
(push-style) console API (and e.g. with console shell subsystem
which uses this API). Again, the intention is to make a first step
towards refactoring console subsystem to allow more flexible
real-world usage, better reusability and composability.
Change-Id: I3f4015bb5b26e0656f82f428b11ba30e980d25a0
Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
2017-03-24 18:50:16 +08:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2018-09-15 01:43:44 +08:00
|
|
|
#endif /* ZEPHYR_INCLUDE_CONSOLE_H_ */
|