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>
50 lines
1.3 KiB
C
50 lines
1.3 KiB
C
/*
|
|
* Copyright (c) 2017 Intel Corporation
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#ifndef __DRIVERS_CONSOLE_CONSOLE_H__
|
|
#define __DRIVERS_CONSOLE_CONSOLE_H__
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define CONSOLE_MAX_LINE_LEN CONFIG_CONSOLE_INPUT_MAX_LINE_LEN
|
|
|
|
/** @brief Console input representation
|
|
*
|
|
* This struct is used to represent an input line from a console.
|
|
* Recorded line must be NULL terminated.
|
|
*/
|
|
struct console_input {
|
|
/** FIFO uses first 4 bytes itself, reserve space */
|
|
int _unused;
|
|
/** Buffer where the input line is recorded */
|
|
char line[CONSOLE_MAX_LINE_LEN];
|
|
};
|
|
|
|
/** @brief Console input processing handler signature
|
|
*
|
|
* 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.
|
|
*
|
|
* @param avail k_fifo queue keeping available input slots
|
|
* @param lines k_fifo queue of entered lines which to be processed
|
|
* in the application code.
|
|
* @param completion callback for tab completion of entered commands
|
|
*
|
|
* @return N/A
|
|
*/
|
|
typedef void (*console_input_fn)(struct k_fifo *avail, struct k_fifo *lines,
|
|
uint8_t (*completion)(char *str, uint8_t len));
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __DRIVERS_CONSOLE_CONSOLE_H__ */
|