zephyr/include/drivers/console/uart_console.h
Marcus Shawcroft 1bc999cb8d drivers/uart: Refactor UART input hook.
This refactor is in preparation for making driver API structures
const.

The console driver provides a mechanism to install an input and an
output hook function.  These are primarily used by the onboard
gdb-server.  The output hook is entirely implemented within the
console driver.

The input hook is partially implemented in the top of the uart driver
and within the console driver.  The hook function itself is installed
in the uart API structure, but is invoked only by the console driver.

Installing the hook function directly into the uart API structure
prevents the API structure being const.  There are two approaches to
fixing this:

1) Implement setting of the input hook in the same way as
uart_irq_callback_set().

2) Move the input hook entirely to the console driver.

We implement the latter.  This approach has two benefits, first it
removes the need for every uart driver to implement the behaviour and
second, the current placement of the callback function in the uart API
seems odd given that the callback is only invoked by the console
driver, never by a uart driver.

Change-Id: I258b312d3055df1c2bdeb896bd4f4f39c40838f7
Signed-off-by: Marcus Shawcroft <marcus.shawcroft@arm.com>
2016-10-25 11:31:08 +00:00

74 lines
2.2 KiB
C

/* uart_console.h - uart console driver */
/*
* Copyright (c) 2011, 2014 Wind River Systems, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _UART_CONSOLE__H_
#define _UART_CONSOLE__H_
#ifdef __cplusplus
extern "C" {
#endif
#include <nanokernel.h>
#define MAX_LINE_LEN 256
struct uart_console_input {
int _unused;
char line[MAX_LINE_LEN];
};
/** @brief Register uart input processing
*
* 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 nano_fifo queue keeping available input slots
* @param lines nano_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
*/
void uart_register_input(struct nano_fifo *avail, struct nano_fifo *lines,
uint8_t (*completion)(char *str, uint8_t len));
/*
* Allows having debug hooks in the console driver for handling incoming
* control characters, and letting other ones through.
*/
#ifdef CONFIG_UART_CONSOLE_DEBUG_SERVER_HOOKS
#define UART_CONSOLE_DEBUG_HOOK_HANDLED 1
#define UART_CONSOLE_OUT_DEBUG_HOOK_SIG(x) int(x)(char c)
typedef UART_CONSOLE_OUT_DEBUG_HOOK_SIG(uart_console_out_debug_hook_t);
void uart_console_out_debug_hook_install(
uart_console_out_debug_hook_t *hook);
typedef int (*uart_console_in_debug_hook_t) (uint8_t);
void uart_console_in_debug_hook_install(uart_console_in_debug_hook_t hook);
#endif
#ifdef __cplusplus
}
#endif
#endif /* _UART_CONSOLE__H_ */