You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ma...@apache.org on 2017/04/26 17:45:56 UTC
[06/10] incubator-mynewt-core git commit: sys/console: migrated to
new console functionality
sys/console: migrated to new console functionality
This patch brings improved console functionality.
Some of the features:
* support for different console backends; UART and RTT for now
* improved ANSI codes handling
* backward compatible API, so it doesn't break existing apps
although the old API is deprecated and will be deleted in the future
* support for tab completion, which will be added later
* ability to compile out input handling code to save flash
Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/4863008f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/4863008f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/4863008f
Branch: refs/heads/master
Commit: 4863008f847b25d86a7f180d7a7635682bf03420
Parents: f7acf77
Author: Micha\u0142 Narajowski <mi...@codecoup.pl>
Authored: Thu Apr 20 07:51:19 2017 +0200
Committer: Micha\u0142 Narajowski <mi...@codecoup.pl>
Committed: Tue Apr 25 17:49:15 2017 -0700
----------------------------------------------------------------------
sys/console/full/include/console/console.h | 18 +-
sys/console/full/include/console/prompt.h | 21 +-
sys/console/full/pkg.yml | 3 +
sys/console/full/src/cons_fmt.c | 112 ----
sys/console/full/src/cons_tty.c | 574 ---------------------
sys/console/full/src/console.c | 447 ++++++++++++++++
sys/console/full/src/console_fmt.c | 103 ++++
sys/console/full/src/console_priv.h | 37 ++
sys/console/full/src/prompt.c | 57 --
sys/console/full/src/rtt_console.c | 96 ++++
sys/console/full/src/ticks.c | 2 +-
sys/console/full/src/uart_console.c | 193 +++++++
sys/console/full/syscfg.yml | 42 +-
sys/console/minimal/include/console/console.h | 63 ---
sys/console/minimal/include/console/prompt.h | 55 --
sys/console/minimal/include/console/ticks.h | 51 --
sys/console/minimal/pkg.yml | 33 --
sys/console/minimal/src/cons_tty.c | 253 ---------
sys/console/minimal/syscfg.yml | 33 --
sys/console/stub/include/console/console.h | 37 +-
20 files changed, 970 insertions(+), 1260 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/4863008f/sys/console/full/include/console/console.h
----------------------------------------------------------------------
diff --git a/sys/console/full/include/console/console.h b/sys/console/full/include/console/console.h
index c7ae04c..0f37b79 100644
--- a/sys/console/full/include/console/console.h
+++ b/sys/console/full/include/console/console.h
@@ -16,28 +16,44 @@
* specific language governing permissions and limitations
* under the License.
*/
+
#ifndef __CONSOLE_H__
#define __CONSOLE_H__
-#include <stdarg.h>
+#include <inttypes.h>
+#include "syscfg/syscfg.h"
#ifdef __cplusplus
extern "C" {
#endif
+struct os_eventq;
+
+struct console_input {
+ char line[MYNEWT_VAL(CONSOLE_MAX_INPUT_LEN)];
+};
+
typedef void (*console_rx_cb)(void);
int console_init(console_rx_cb rx_cb);
int console_is_init(void);
void console_write(const char *str, int cnt);
+#if MYNEWT_VAL(CONSOLE_COMPAT)
int console_read(char *str, int cnt, int *newline);
+#endif
void console_blocking_mode(void);
void console_echo(int on);
int console_printf(const char *fmt, ...)
__attribute__ ((format (printf, 1, 2)));;
+void console_set_queues(struct os_eventq *avail_queue,
+ struct os_eventq *cmd_queue);
+void console_set_completion_cb(uint8_t (*completion)(char *str, uint8_t len));
+int console_handle_char(uint8_t byte);
+
extern int console_is_midline;
+extern int console_out(int character);
#ifdef __cplusplus
}
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/4863008f/sys/console/full/include/console/prompt.h
----------------------------------------------------------------------
diff --git a/sys/console/full/include/console/prompt.h b/sys/console/full/include/console/prompt.h
index d4bf8bf..ab5518b 100644
--- a/sys/console/full/include/console/prompt.h
+++ b/sys/console/full/include/console/prompt.h
@@ -28,13 +28,26 @@ extern "C" {
#endif
/* print console prompt */
-void console_print_prompt();
+static void inline
+console_print_prompt(void)
+{
+}
+
/* set the console prompt character */
-void console_set_prompt(char);
+static void inline
+console_set_prompt(char ch)
+{
+}
-void console_no_prompt(void);
+static void inline
+console_no_prompt(void)
+{
+}
-void console_yes_prompt(void);
+static void inline
+console_yes_prompt(void)
+{
+}
#ifdef __cplusplus
}
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/4863008f/sys/console/full/pkg.yml
----------------------------------------------------------------------
diff --git a/sys/console/full/pkg.yml b/sys/console/full/pkg.yml
index e56c7fd..d69fbb0 100644
--- a/sys/console/full/pkg.yml
+++ b/sys/console/full/pkg.yml
@@ -26,7 +26,10 @@ pkg.keywords:
pkg.deps:
- hw/hal
- kernel/os
+pkg.deps.CONSOLE_UART:
- hw/drivers/uart
+pkg.deps.CONSOLE_RTT:
+ - hw/drivers/rtt
pkg.apis: console
pkg.init:
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/4863008f/sys/console/full/src/cons_fmt.c
----------------------------------------------------------------------
diff --git a/sys/console/full/src/cons_fmt.c b/sys/console/full/src/cons_fmt.c
deleted file mode 100644
index cd848c6..0000000
--- a/sys/console/full/src/cons_fmt.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-#include <stdarg.h>
-#include <stdio.h>
-#include "syscfg/syscfg.h"
-#include "console/console.h"
-#include "console/ticks.h"
-#include "os/os_time.h"
-
-#define CONS_OUTPUT_MAX_LINE 128
-
-
-#if MYNEWT_VAL(BASELIBC_PRESENT)
-size_t console_file_write(FILE *p, const char *str, size_t cnt);
-
-static const struct File_methods console_file_ops = {
- .write = console_file_write,
- .read = NULL
-};
-
-static const FILE console_file = {
- .vmt = &console_file_ops
-};
-
-/**
- * Prints the specified format string to the console.
- *
- * @return The number of characters that would have been
- * printed if the console buffer were
- * unlimited. This return value is analogous
- * to that of snprintf.
- */
-int
-console_printf(const char *fmt, ...)
-{
- va_list args;
- int num_chars;
-
- num_chars = 0;
-
- if (console_get_ticks()) {
- /* Prefix each line with a timestamp. */
- if (!console_is_midline) {
- num_chars += fprintf((FILE *)&console_file, "%lu:",
- (unsigned long)os_time_get());
- }
- }
- va_start(args, fmt);
- num_chars += vfprintf((FILE *)&console_file, fmt, args);
- va_end(args);
-
- return num_chars;
-}
-
-#else
-
-/**
- * Prints the specified format string to the console.
- *
- * @return The number of characters that would have been
- * printed if the console buffer were
- * unlimited. This return value is analogous
- * to that of snprintf.
- */
-int
-console_printf(const char *fmt, ...)
-{
- va_list args;
- char buf[CONS_OUTPUT_MAX_LINE];
- int num_chars;
- int len;
-
- num_chars = 0;
-
- if (console_get_ticks()) {
- /* Prefix each line with a timestamp. */
- if (!console_is_midline) {
- len = snprintf(buf, sizeof(buf), "%lu:",
- (unsigned long)os_time_get());
- num_chars += len;
- console_write(buf, len);
- }
- }
-
- va_start(args, fmt);
- len = vsnprintf(buf, sizeof(buf), fmt, args);
- num_chars += len;
- if (len >= sizeof(buf)) {
- len = sizeof(buf) - 1;
- }
- console_write(buf, len);
- va_end(args);
-
- return num_chars;
-}
-#endif
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/4863008f/sys/console/full/src/cons_tty.c
----------------------------------------------------------------------
diff --git a/sys/console/full/src/cons_tty.c b/sys/console/full/src/cons_tty.c
deleted file mode 100644
index 50870f1..0000000
--- a/sys/console/full/src/cons_tty.c
+++ /dev/null
@@ -1,574 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-
-#include <inttypes.h>
-#include <assert.h>
-#include "syscfg/syscfg.h"
-#include "sysinit/sysinit.h"
-#include "os/os.h"
-#include "uart/uart.h"
-#include "bsp/bsp.h"
-
-#include "console/console.h"
-#include "console/prompt.h"
-
-/** Indicates whether the previous line of output was completed. */
-int console_is_midline;
-
-#define CONSOLE_RX_CHUNK 16
-
-#if MYNEWT_VAL(CONSOLE_HIST_ENABLE)
-#define CONSOLE_HIST_SZ 32
-#endif
-
-#define CONSOLE_DEL 0x7f /* del character */
-#define CONSOLE_ESC 0x1b /* esc character */
-#define CONSOLE_LEFT 'D' /* esc-[-D emitted when moving left */
-#define CONSOLE_UP 'A' /* esc-[-A moving up */
-#define CONSOLE_RIGHT 'C' /* esc-[-C moving right */
-#define CONSOLE_DOWN 'B' /* esc-[-B moving down */
-
-#define CONSOLE_HEAD_INC(cr) (((cr)->cr_head + 1) & ((cr)->cr_size - 1))
-#define CONSOLE_TAIL_INC(cr) (((cr)->cr_tail + 1) & ((cr)->cr_size - 1))
-
-typedef void (*console_write_char)(char);
-void console_print_prompt(void);
-
-struct console_ring {
- uint8_t cr_head;
- uint8_t cr_tail;
- uint16_t cr_size;
- uint8_t *cr_buf;
-};
-
-struct console_tty {
- struct uart_dev *ct_dev;
-
- struct console_ring ct_tx;
- /* must be after console_ring */
- uint8_t ct_tx_buf[MYNEWT_VAL(CONSOLE_TX_BUF_SIZE)];
-
- struct console_ring ct_rx;
- /* must be after console_ring */
- uint8_t ct_rx_buf[MYNEWT_VAL(CONSOLE_RX_BUF_SIZE)];
-
- console_rx_cb ct_rx_cb; /* callback that input is ready */
- console_write_char ct_write_char;
- uint8_t ct_echo_off:1;
- uint8_t ct_esc_seq:2;
-} console_tty;
-
-#if MYNEWT_VAL(CONSOLE_HIST_ENABLE)
-struct console_hist {
- uint8_t ch_head;
- uint8_t ch_tail;
- uint8_t ch_size;
- uint8_t ch_curr;
- uint8_t ch_buf[CONSOLE_HIST_SZ][MYNEWT_VAL(CONSOLE_RX_BUF_SIZE)];
-} console_hist;
-#endif
-
-static void
-console_add_char(struct console_ring *cr, char ch)
-{
- cr->cr_buf[cr->cr_head] = ch;
- cr->cr_head = CONSOLE_HEAD_INC(cr);
-}
-
-static uint8_t
-console_pull_char(struct console_ring *cr)
-{
- uint8_t ch;
-
- ch = cr->cr_buf[cr->cr_tail];
- cr->cr_tail = CONSOLE_TAIL_INC(cr);
- return ch;
-}
-
-static int
-console_pull_char_head(struct console_ring *cr)
-{
- if (cr->cr_head != cr->cr_tail) {
- cr->cr_head = (cr->cr_head - 1) & (cr->cr_size - 1);
- return 0;
- } else {
- return -1;
- }
-}
-
-static void
-console_queue_char(char ch)
-{
- struct console_tty *ct = &console_tty;
- int sr;
-
- OS_ENTER_CRITICAL(sr);
- while (CONSOLE_HEAD_INC(&ct->ct_tx) == ct->ct_tx.cr_tail) {
- /* TX needs to drain */
- uart_start_tx(ct->ct_dev);
- OS_EXIT_CRITICAL(sr);
- if (os_started()) {
- os_time_delay(1);
- }
- OS_ENTER_CRITICAL(sr);
- }
- console_add_char(&ct->ct_tx, ch);
- OS_EXIT_CRITICAL(sr);
-}
-
-#if MYNEWT_VAL(CONSOLE_HIST_ENABLE)
-static void
-console_hist_init(void)
-{
- struct console_hist *ch = &console_hist;
-
- ch->ch_head = 0;
- ch->ch_tail = 0;
- ch->ch_curr = 0;
- ch->ch_size = CONSOLE_HIST_SZ;
-}
-
-static void
-console_hist_add(struct console_ring *rx)
-{
- struct console_hist *ch = &console_hist;
- uint8_t *str = ch->ch_buf[ch->ch_head];
- uint8_t tail;
- uint8_t empty = 1;
-
- tail = rx->cr_tail;
- while (tail != rx->cr_head) {
- *str = rx->cr_buf[tail];
- if (*str != ' ' && *str != '\t' && *str != '\n') {
- empty = 0;
- }
- if (*str == '\n') {
- *str = '\0';
- /* don't save empty history */
- if (empty) {
- return;
- }
- break;
- }
- str++;
- tail = (tail + 1) % MYNEWT_VAL(CONSOLE_RX_BUF_SIZE);
- }
-
- ch->ch_head = (ch->ch_head + 1) & (ch->ch_size - 1);
- ch->ch_curr = ch->ch_head;
-
- /* buffer full, start overwriting old history */
- if (ch->ch_head == ch->ch_tail) {
- ch->ch_tail = (ch->ch_tail + 1) & (ch->ch_size - 1);
- }
-}
-
-static int
-console_hist_move(struct console_ring *rx, uint8_t *tx_buf, uint8_t direction)
-{
- struct console_hist *ch = &console_hist;
- uint8_t *str = NULL;
- int space = 0;
- int i;
- uint8_t limit = direction == CONSOLE_UP ? ch->ch_tail : ch->ch_head;
-
- /* no more history to return in this direction */
- if (ch->ch_curr == limit) {
- return 0;
- }
-
- if (direction == CONSOLE_UP) {
- ch->ch_curr = (ch->ch_curr - 1) & (ch->ch_size - 1);
- } else {
- ch->ch_curr = (ch->ch_curr + 1) & (ch->ch_size - 1);
- }
-
- /* consume all chars */
- while (console_pull_char_head(rx) == 0) {
- /* do nothing */
- }
-
- str = ch->ch_buf[ch->ch_curr];
- for (i = 0; i < MYNEWT_VAL(CONSOLE_RX_BUF_SIZE); ++i) {
- if (str[i] == '\0') {
- break;
- }
- tx_buf[i] = str[i];
- console_add_char(rx, str[i]);
- space++;
- }
-
- return space;
-}
-#endif
-
-static void
-console_blocking_tx(char ch)
-{
- struct console_tty *ct = &console_tty;
-
- uart_blocking_tx(ct->ct_dev, ch);
-}
-
-/*
- * Flush cnt characters from console output queue.
- */
-static void
-console_tx_flush(struct console_tty *ct, int cnt)
-{
- int i;
- uint8_t byte;
-
- for (i = 0; i < cnt; i++) {
- if (ct->ct_tx.cr_head == ct->ct_tx.cr_tail) {
- /*
- * Queue is empty.
- */
- break;
- }
- byte = console_pull_char(&ct->ct_tx);
- console_blocking_tx(byte);
- }
-}
-
-void
-console_blocking_mode(void)
-{
- struct console_tty *ct = &console_tty;
- int sr;
-
- OS_ENTER_CRITICAL(sr);
- if (ct->ct_write_char) {
- ct->ct_write_char = console_blocking_tx;
-
- console_tx_flush(ct, MYNEWT_VAL(CONSOLE_TX_BUF_SIZE));
- }
- OS_EXIT_CRITICAL(sr);
-}
-
-void
-console_echo(int on)
-{
- struct console_tty *ct = &console_tty;
-
- ct->ct_echo_off = !on;
-}
-
-size_t
-console_file_write(void *arg, const char *str, size_t cnt)
-{
- struct console_tty *ct = &console_tty;
- int i;
-
- if (!ct->ct_write_char) {
- return cnt;
- }
- for (i = 0; i < cnt; i++) {
- if (str[i] == '\n') {
- ct->ct_write_char('\r');
- }
- ct->ct_write_char(str[i]);
- }
- if (cnt > 0) {
- console_is_midline = str[cnt - 1] != '\n';
- }
- uart_start_tx(ct->ct_dev);
- return cnt;
-}
-
-void
-console_write(const char *str, int cnt)
-{
- console_file_write(NULL, str, cnt);
-}
-
-int
-console_read(char *str, int cnt, int *newline)
-{
- struct console_tty *ct = &console_tty;
- struct console_ring *cr = &ct->ct_rx;
- int sr;
- int i;
- uint8_t ch;
-
- *newline = 0;
- OS_ENTER_CRITICAL(sr);
- for (i = 0; i < cnt; i++) {
- if (cr->cr_head == cr->cr_tail) {
- break;
- }
-
- if ((i & (CONSOLE_RX_CHUNK - 1)) == (CONSOLE_RX_CHUNK - 1)) {
- /*
- * Make a break from blocking interrupts during the copy.
- */
- OS_EXIT_CRITICAL(sr);
- OS_ENTER_CRITICAL(sr);
- }
-
- ch = console_pull_char(cr);
- if (ch == '\n') {
- *str = '\0';
- *newline = 1;
- break;
- }
- *str++ = ch;
- }
- OS_EXIT_CRITICAL(sr);
- if (i > 0 || *newline) {
- uart_start_rx(ct->ct_dev);
- }
- return i;
-}
-
-/*
- * Interrupts disabled when console_tx_char/console_rx_char are called.
- */
-static int
-console_tx_char(void *arg)
-{
- struct console_tty *ct = (struct console_tty *)arg;
- struct console_ring *cr = &ct->ct_tx;
-
- if (cr->cr_head == cr->cr_tail) {
- /*
- * No more data.
- */
- return -1;
- }
- return console_pull_char(cr);
-}
-
-static int
-console_buf_space(struct console_ring *cr)
-{
- int space;
-
- space = (cr->cr_tail - cr->cr_head) & (cr->cr_size - 1);
- return space - 1;
-}
-
-static int
-console_rx_char(void *arg, uint8_t data)
-{
- struct console_tty *ct = (struct console_tty *)arg;
- struct console_ring *tx = &ct->ct_tx;
- struct console_ring *rx = &ct->ct_rx;
- int tx_space = 0;
- int i;
-#if MYNEWT_VAL(CONSOLE_HIST_ENABLE)
- uint8_t tx_buf[MYNEWT_VAL(CONSOLE_RX_BUF_SIZE)];
-#else
- uint8_t tx_buf[3];
-#endif
-
- if (CONSOLE_HEAD_INC(&ct->ct_rx) == ct->ct_rx.cr_tail) {
- /*
- * RX queue full. Reader must drain this.
- */
- if (ct->ct_rx_cb) {
- ct->ct_rx_cb();
- }
- return -1;
- }
-
- /* echo */
- switch (data) {
- case '\r':
- case '\n':
- /*
- * linefeed
- */
- tx_buf[0] = '\n';
- tx_buf[1] = '\r';
- tx_space = 2;
- console_add_char(rx, '\n');
-#if MYNEWT_VAL(CONSOLE_HIST_ENABLE)
- console_hist_add(rx);
-#endif
- if (ct->ct_rx_cb) {
- ct->ct_rx_cb();
- }
- break;
- case CONSOLE_ESC:
- ct->ct_esc_seq = 1;
- goto out;
- case '[':
- if (ct->ct_esc_seq == 1) {
- ct->ct_esc_seq = 2;
- goto out;
- } else {
- goto queue_char;
- }
- break;
- case CONSOLE_LEFT:
- if (ct->ct_esc_seq == 2) {
- goto backspace;
- } else {
- goto queue_char;
- }
- break;
- case CONSOLE_UP:
- case CONSOLE_DOWN:
- if (ct->ct_esc_seq != 2) {
- goto queue_char;
- }
-#if MYNEWT_VAL(CONSOLE_HIST_ENABLE)
- tx_space = console_hist_move(rx, tx_buf, data);
- tx_buf[tx_space] = 0;
- ct->ct_esc_seq = 0;
- /*
- * when moving up, stop on oldest history entry
- * when moving down, let it delete input before leaving...
- */
- if (data == CONSOLE_UP && tx_space == 0) {
- goto out;
- }
- if (!ct->ct_echo_off) {
- /* HACK: clean line by backspacing up to maximum possible space */
- for (i = 0; i < MYNEWT_VAL(CONSOLE_TX_BUF_SIZE); i++) {
- if (console_buf_space(tx) < 3) {
- console_tx_flush(ct, 3);
- }
- console_add_char(tx, '\b');
- console_add_char(tx, ' ');
- console_add_char(tx, '\b');
- uart_start_tx(ct->ct_dev);
- }
- if (tx_space == 0) {
- goto out;
- }
- } else {
- goto queue_char;
- }
- break;
-#else
- ct->ct_esc_seq = 0;
- goto out;
-#endif
- case CONSOLE_RIGHT:
- if (ct->ct_esc_seq == 2) {
- data = ' '; /* add space */
- }
- goto queue_char;
- case '\b':
- case CONSOLE_DEL:
-backspace:
- /*
- * backspace
- */
- ct->ct_esc_seq = 0;
- if (console_pull_char_head(rx) == 0) {
- /*
- * Only wipe out char if we can pull stuff off from head.
- */
- tx_buf[0] = '\b';
- tx_buf[1] = ' ';
- tx_buf[2] = '\b';
- tx_space = 3;
- } else {
- goto out;
- }
- break;
- default:
-queue_char:
- tx_buf[0] = data;
- tx_space = 1;
- ct->ct_esc_seq = 0;
- console_add_char(rx, data);
- break;
- }
- if (!ct->ct_echo_off) {
- if (console_buf_space(tx) < tx_space) {
- console_tx_flush(ct, tx_space);
- }
- for (i = 0; i < tx_space; i++) {
- console_add_char(tx, tx_buf[i]);
- }
- uart_start_tx(ct->ct_dev);
- }
-out:
- return 0;
-}
-
-int
-console_is_init(void)
-{
- struct console_tty *ct = &console_tty;
-
- return (ct->ct_dev != NULL);
-}
-
-static int is_power_of_two (unsigned int x)
-{
- return ((x != 0) && !(x & (x - 1)));
-}
-
-int
-console_init(console_rx_cb rx_cb)
-{
- struct console_tty *ct = &console_tty;
- struct uart_conf uc = {
- .uc_speed = MYNEWT_VAL(CONSOLE_BAUD),
- .uc_databits = 8,
- .uc_stopbits = 1,
- .uc_parity = UART_PARITY_NONE,
- .uc_flow_ctl = MYNEWT_VAL(CONSOLE_FLOW_CONTROL),
- .uc_tx_char = console_tx_char,
- .uc_rx_char = console_rx_char,
- .uc_cb_arg = ct
- };
-
- ct->ct_rx_cb = rx_cb;
- if (!ct->ct_dev) {
- ct->ct_tx.cr_size = MYNEWT_VAL(CONSOLE_TX_BUF_SIZE);
- ct->ct_tx.cr_buf = ct->ct_tx_buf;
- ct->ct_rx.cr_size = MYNEWT_VAL(CONSOLE_RX_BUF_SIZE);
- ct->ct_rx.cr_buf = ct->ct_rx_buf;
- ct->ct_write_char = console_queue_char;
-
- ct->ct_dev = (struct uart_dev *)os_dev_open(CONSOLE_UART,
- OS_TIMEOUT_NEVER, &uc);
- if (!ct->ct_dev) {
- return -1;
- }
- ct->ct_echo_off = ! MYNEWT_VAL(CONSOLE_ECHO);
- }
-
- /* must be a power of 2 */
- assert(is_power_of_two(MYNEWT_VAL(CONSOLE_RX_BUF_SIZE)));
-
-#if MYNEWT_VAL(CONSOLE_HIST_ENABLE)
- console_hist_init();
-#endif
-
- return 0;
-}
-
-void
-console_pkg_init(void)
-{
- int rc;
-
- /* Ensure this function only gets called by sysinit. */
- SYSINIT_ASSERT_ACTIVE();
-
- rc = console_init(NULL);
- SYSINIT_PANIC_ASSERT(rc == 0);
-}
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/4863008f/sys/console/full/src/console.c
----------------------------------------------------------------------
diff --git a/sys/console/full/src/console.c b/sys/console/full/src/console.c
new file mode 100644
index 0000000..18ff755
--- /dev/null
+++ b/sys/console/full/src/console.c
@@ -0,0 +1,447 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+
+#include <assert.h>
+#include <inttypes.h>
+#include <ctype.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "syscfg/syscfg.h"
+#include "os/os.h"
+#include "sysinit/sysinit.h"
+#include "console/console.h"
+#include "console/ticks.h"
+#include "console_priv.h"
+
+/* Control characters */
+#define ESC 0x1b
+#define DEL 0x7f
+
+/* ANSI escape sequences */
+#define ANSI_ESC '['
+#define ANSI_UP 'A'
+#define ANSI_DOWN 'B'
+#define ANSI_FORWARD 'C'
+#define ANSI_BACKWARD 'D'
+#define ANSI_END 'F'
+#define ANSI_HOME 'H'
+#define ANSI_DEL '~'
+
+#define ESC_ESC (1 << 0)
+#define ESC_ANSI (1 << 1)
+#define ESC_ANSI_FIRST (1 << 2)
+#define ESC_ANSI_VAL (1 << 3)
+#define ESC_ANSI_VAL_2 (1 << 4)
+
+/* Indicates whether the previous line of output was completed. */
+int console_is_midline;
+
+#if MYNEWT_VAL(CONSOLE_COMPAT)
+#define CONSOLE_COMPAT_MAX_CMD_QUEUED 1
+static struct console_input buf[CONSOLE_COMPAT_MAX_CMD_QUEUED];
+static struct os_event shell_console_ev[CONSOLE_COMPAT_MAX_CMD_QUEUED];
+static console_rx_cb console_compat_rx_cb; /* callback that input is ready */
+static struct os_eventq compat_avail_queue;
+static struct os_eventq compat_lines_queue;
+#endif
+
+static int esc_state;
+static int echo = 1;
+static unsigned int ansi_val, ansi_val_2;
+
+static uint8_t cur, end;
+static struct os_eventq *avail_queue;
+static struct os_eventq *lines_queue;
+static uint8_t (*completion_cb)(char *line, uint8_t len);
+
+void
+console_echo(int on)
+{
+ echo = on;
+}
+
+void
+console_write(const char *str, int cnt)
+{
+ int i;
+
+ for (i = 0; i < cnt; i++) {
+ if (console_out((int)str[i]) == EOF) {
+ break;
+ }
+ }
+}
+
+#if MYNEWT_VAL(CONSOLE_COMPAT)
+int
+console_read(char *str, int cnt, int *newline)
+{
+ struct os_event *ev;
+ struct console_input *cmd;
+ size_t len;
+
+ *newline = 0;
+ ev = os_eventq_get_no_wait(lines_queue);
+ if (!ev) {
+ return 0;
+ }
+ cmd = ev->ev_arg;
+ len = strlen(cmd->line);
+ strncpy(str, cmd->line, len+1);
+ os_eventq_put(avail_queue, ev);
+ *newline = 1;
+ return len;
+}
+#endif
+
+void
+console_blocking_mode(void)
+{
+#if MYNEWT_VAL(CONSOLE_UART)
+ uart_console_blocking_mode();
+#endif
+}
+
+static inline void
+cursor_forward(unsigned int count)
+{
+ console_printf("\x1b[%uC", count);
+}
+
+static inline void
+cursor_backward(unsigned int count)
+{
+ console_printf("\x1b[%uD", count);
+}
+
+static inline void
+cursor_save(void)
+{
+ console_out(ESC);
+ console_out('[');
+ console_out('s');
+}
+
+static inline void
+cursor_restore(void)
+{
+ console_out(ESC);
+ console_out('[');
+ console_out('u');
+}
+
+static void
+insert_char(char *pos, char c, uint8_t end)
+{
+ char tmp;
+
+ if (echo) {
+ /* Echo back to console */
+ console_out(c);
+ }
+
+ if (end == 0) {
+ *pos = c;
+ return;
+ }
+
+ tmp = *pos;
+ *(pos++) = c;
+
+ cursor_save();
+
+ while (end-- > 0) {
+ console_out(tmp);
+ c = *pos;
+ *(pos++) = tmp;
+ tmp = c;
+ }
+
+ /* Move cursor back to right place */
+ cursor_restore();
+}
+
+static void
+del_char(char *pos, uint8_t end)
+{
+ console_out('\b');
+
+ if (end == 0) {
+ console_out(' ');
+ console_out('\b');
+ return;
+ }
+
+ cursor_save();
+
+ while (end-- > 0) {
+ *pos = *(pos + 1);
+ console_out(*(pos++));
+ }
+
+ console_out(' ');
+
+ /* Move cursor back to right place */
+ cursor_restore();
+}
+
+static void
+handle_ansi(uint8_t byte, char *line)
+{
+ if (esc_state & ESC_ANSI_FIRST) {
+ esc_state &= ~ESC_ANSI_FIRST;
+ if (!isdigit(byte)) {
+ ansi_val = 1;
+ goto ansi_cmd;
+ }
+
+ esc_state |= ESC_ANSI_VAL;
+ ansi_val = byte - '0';
+ ansi_val_2 = 0;
+ return;
+ }
+
+ if (esc_state & ESC_ANSI_VAL) {
+ if (isdigit(byte)) {
+ if (esc_state & ESC_ANSI_VAL_2) {
+ ansi_val_2 *= 10;
+ ansi_val_2 += byte - '0';
+ } else {
+ ansi_val *= 10;
+ ansi_val += byte - '0';
+ }
+ return;
+ }
+
+ /* Multi value sequence, e.g. Esc[Line;ColumnH */
+ if (byte == ';' && !(esc_state & ESC_ANSI_VAL_2)) {
+ esc_state |= ESC_ANSI_VAL_2;
+ return;
+ }
+
+ esc_state &= ~ESC_ANSI_VAL;
+ esc_state &= ~ESC_ANSI_VAL_2;
+ }
+
+ansi_cmd:
+ switch (byte) {
+ case ANSI_BACKWARD:
+ if (ansi_val > cur) {
+ break;
+ }
+
+ end += ansi_val;
+ cur -= ansi_val;
+ cursor_backward(ansi_val);
+ break;
+ case ANSI_FORWARD:
+ if (ansi_val > end) {
+ break;
+ }
+
+ end -= ansi_val;
+ cur += ansi_val;
+ cursor_forward(ansi_val);
+ break;
+ case ANSI_HOME:
+ if (!cur) {
+ break;
+ }
+
+ cursor_backward(cur);
+ end += cur;
+ cur = 0;
+ break;
+ case ANSI_END:
+ if (!end) {
+ break;
+ }
+
+ cursor_forward(end);
+ cur += end;
+ end = 0;
+ break;
+ case ANSI_DEL:
+ if (!end) {
+ break;
+ }
+
+ cursor_forward(1);
+ del_char(&line[cur], --end);
+ break;
+ default:
+ break;
+ }
+
+ esc_state &= ~ESC_ANSI;
+}
+
+int
+console_handle_char(uint8_t byte)
+{
+#if !MYNEWT_VAL(CONSOLE_INPUT)
+ return 0;
+#endif
+
+ static struct os_event *ev;
+ static struct console_input *input;
+
+ if (!avail_queue || !lines_queue) {
+ return 0;
+ }
+
+ if (!ev) {
+ ev = os_eventq_get_no_wait(avail_queue);
+ if (!ev)
+ return 0;
+ input = ev->ev_arg;
+ }
+
+ /* Handle ANSI escape mode */
+ if (esc_state & ESC_ANSI) {
+ handle_ansi(byte, input->line);
+ return 0;
+ }
+
+ /* Handle escape mode */
+ if (esc_state & ESC_ESC) {
+ esc_state &= ~ESC_ESC;
+ handle_ansi(byte, input->line);
+ switch (byte) {
+ case ANSI_ESC:
+ esc_state |= ESC_ANSI;
+ esc_state |= ESC_ANSI_FIRST;
+ break;
+ default:
+ break;
+ }
+
+ return 0;
+ }
+
+ /* Handle special control characters */
+ if (!isprint(byte)) {
+ handle_ansi(byte, input->line);
+ switch (byte) {
+ case DEL:
+ if (cur > 0) {
+ del_char(&input->line[--cur], end);
+ }
+ break;
+ case ESC:
+ esc_state |= ESC_ESC;
+ break;
+ case '\r':
+ input->line[cur + end] = '\0';
+ console_out('\r');
+ console_out('\n');
+ cur = 0;
+ end = 0;
+ os_eventq_put(lines_queue, ev);
+
+#if MYNEWT_VAL(CONSOLE_COMPAT)
+ if (console_compat_rx_cb) {
+ console_compat_rx_cb();
+ }
+#endif
+
+ input = NULL;
+ ev = NULL;
+ break;
+ case '\t':
+ if (completion_cb && !end) {
+ cur += completion_cb(input->line, cur);
+ }
+ break;
+ default:
+ break;
+ }
+
+ return 0;
+ }
+
+ /* Ignore characters if there's no more buffer space */
+ if (cur + end < sizeof(input->line) - 1) {
+ insert_char(&input->line[cur++], byte, end);
+ }
+ return 0;
+}
+
+int
+console_is_init(void)
+{
+#if MYNEWT_VAL(CONSOLE_UART)
+ return uart_console_is_init();
+#endif
+#if MYNEWT_VAL(CONSOLE_RTT)
+ return rtt_console_is_init();
+#endif
+ return 0;
+}
+
+void
+console_set_queues(struct os_eventq *avail, struct os_eventq *lines)
+{
+ avail_queue = avail;
+ lines_queue = lines;
+}
+
+void
+console_set_completion_cb(uint8_t (*completion)(char *str, uint8_t len))
+{
+ completion_cb = completion;
+}
+
+#if MYNEWT_VAL(CONSOLE_COMPAT)
+int
+console_init(console_rx_cb rx_cb)
+{
+ int i;
+
+ os_eventq_init(&compat_lines_queue);
+ os_eventq_init(&compat_avail_queue);
+ console_set_queues(&compat_avail_queue, &compat_lines_queue);
+
+ for (i = 0; i < CONSOLE_COMPAT_MAX_CMD_QUEUED; i++) {
+ shell_console_ev[i].ev_arg = &buf[i];
+ os_eventq_put(avail_queue, &shell_console_ev[i]);
+ }
+ console_compat_rx_cb = rx_cb;
+ return 0;
+}
+#endif
+
+void
+console_pkg_init(void)
+{
+ int rc = 0;
+
+ /* Ensure this function only gets called by sysinit. */
+ SYSINIT_ASSERT_ACTIVE();
+
+#if MYNEWT_VAL(CONSOLE_UART)
+ rc = uart_console_init();
+#endif
+#if MYNEWT_VAL(CONSOLE_RTT)
+ rc = rtt_console_init();
+#endif
+ SYSINIT_PANIC_ASSERT(rc == 0);
+}
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/4863008f/sys/console/full/src/console_fmt.c
----------------------------------------------------------------------
diff --git a/sys/console/full/src/console_fmt.c b/sys/console/full/src/console_fmt.c
new file mode 100644
index 0000000..32b68e3
--- /dev/null
+++ b/sys/console/full/src/console_fmt.c
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+#include <stdarg.h>
+#include <stdio.h>
+#include "syscfg/syscfg.h"
+#include "console/console.h"
+#include "console/ticks.h"
+#include "os/os_time.h"
+
+#define CONS_OUTPUT_MAX_LINE 128
+
+
+#if MYNEWT_VAL(BASELIBC_PRESENT)
+
+/**
+ * Prints the specified format string to the console.
+ *
+ * @return The number of characters that would have been
+ * printed if the console buffer were
+ * unlimited. This return value is analogous
+ * to that of snprintf.
+ */
+int
+console_printf(const char *fmt, ...)
+{
+ va_list args;
+ int num_chars;
+
+ num_chars = 0;
+
+ if (console_get_ticks()) {
+ /* Prefix each line with a timestamp. */
+ if (!console_is_midline) {
+ num_chars += printf("%06lu ", (unsigned long)os_time_get());
+ }
+ }
+
+ va_start(args, fmt);
+ num_chars += vprintf(fmt, args);
+ va_end(args);
+
+ return num_chars;
+}
+
+
+#else
+
+/**
+ * Prints the specified format string to the console.
+ *
+ * @return The number of characters that would have been
+ * printed if the console buffer were
+ * unlimited. This return value is analogous
+ * to that of snprintf.
+ */
+int
+console_printf(const char *fmt, ...)
+{
+ va_list args;
+ char buf[CONS_OUTPUT_MAX_LINE];
+ int num_chars;
+ int len;
+
+ num_chars = 0;
+
+ if (console_get_ticks()) {
+ /* Prefix each line with a timestamp. */
+ if (!console_is_midline) {
+ len = snprintf(buf, sizeof(buf), "%06lu ",
+ (unsigned long)os_time_get());
+ num_chars += len;
+ console_write(buf, len);
+ }
+ }
+
+ va_start(args, fmt);
+ len = vsnprintf(buf, sizeof(buf), fmt, args);
+ num_chars += len;
+ if (len >= sizeof(buf)) {
+ len = sizeof(buf) - 1;
+ }
+ console_write(buf, len);
+ va_end(args);
+
+ return num_chars;
+}
+#endif
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/4863008f/sys/console/full/src/console_priv.h
----------------------------------------------------------------------
diff --git a/sys/console/full/src/console_priv.h b/sys/console/full/src/console_priv.h
new file mode 100644
index 0000000..d307b5d
--- /dev/null
+++ b/sys/console/full/src/console_priv.h
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 __CONSOLE_PRIV_H__
+#define __CONSOLE_PRIV_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int uart_console_is_init(void);
+int uart_console_init(void);
+void uart_console_blocking_mode(void);
+int rtt_console_is_init(void);
+int rtt_console_init(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __CONSOLE_PRIV_H__ */
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/4863008f/sys/console/full/src/prompt.c
----------------------------------------------------------------------
diff --git a/sys/console/full/src/prompt.c b/sys/console/full/src/prompt.c
deleted file mode 100644
index 251c249..0000000
--- a/sys/console/full/src/prompt.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-
-
-#include "console/console.h"
-#include "console/prompt.h"
-#include <syscfg/syscfg.h>
-
-/* console prompt, always followed by a space */
-static char console_prompt[] = " > ";
-static char do_prompt = MYNEWT_VAL(CONSOLE_PROMPT);
-
-
-/* set the prompt character, leave the space */
-void
-console_set_prompt(char p)
-{
- do_prompt = 1;
- console_prompt[1] = p;
-}
-
-void
-console_no_prompt(void)
-{
- do_prompt = 0;
-}
-
-void
-console_yes_prompt(void)
-{
- do_prompt = 1;
-}
-
-/* print the prompt to the console */
-void
-console_print_prompt(void)
-{
- if (do_prompt) {
- console_printf("%s", console_prompt);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/4863008f/sys/console/full/src/rtt_console.c
----------------------------------------------------------------------
diff --git a/sys/console/full/src/rtt_console.c b/sys/console/full/src/rtt_console.c
new file mode 100644
index 0000000..63067c1
--- /dev/null
+++ b/sys/console/full/src/rtt_console.c
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+
+#include "syscfg/syscfg.h"
+
+#if MYNEWT_VAL(CONSOLE_RTT)
+#include <ctype.h>
+
+#include "os/os.h"
+#include "os/os_cputime.h"
+#include "rtt/SEGGER_RTT.h"
+#include "console/console.h"
+#include "console_priv.h"
+
+#if MYNEWT_VAL(CONSOLE_INPUT)
+static struct hal_timer rtt_timer;
+#endif
+
+static const char CR = '\r';
+
+int
+console_out(int character)
+{
+ char c = (char)character;
+
+ if ('\n' == c) {
+ SEGGER_RTT_WriteNoLock(0, &CR, 1);
+ console_is_midline = 0;
+ } else {
+ console_is_midline = 1;
+ }
+
+ SEGGER_RTT_WriteNoLock(0, &c, 1);
+
+ return character;
+}
+
+#if MYNEWT_VAL(CONSOLE_INPUT)
+void
+rtt(void *arg)
+{
+ int key;
+ int i = 0;
+ uint32_t timeout;
+
+ key = SEGGER_RTT_GetKey();
+ if (key >= 0) {
+ console_handle_char((char)key);
+ i = 0;
+ }
+ /* These values were selected to keep the shell responsive
+ * and at the same time reduce context switches.
+ * Min sleep is 50ms and max is 250ms.
+ */
+ if (i < 5) {
+ ++i;
+ }
+ timeout = 50000 * i;
+ os_cputime_timer_relative(&rtt_timer, timeout);
+}
+#endif
+
+int
+rtt_console_is_init(void)
+{
+ return 1;
+}
+
+int
+rtt_console_init(void)
+{
+#if MYNEWT_VAL(CONSOLE_INPUT)
+ os_cputime_timer_init(&rtt_timer, rtt, NULL);
+ /* start after a second */
+ os_cputime_timer_relative(&rtt_timer, 1000000);
+#endif
+ return 0;
+}
+
+#endif /* MYNEWT_VAL(CONSOLE_RTT) */
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/4863008f/sys/console/full/src/ticks.c
----------------------------------------------------------------------
diff --git a/sys/console/full/src/ticks.c b/sys/console/full/src/ticks.c
index 1a442aa..06d1c8f 100644
--- a/sys/console/full/src/ticks.c
+++ b/sys/console/full/src/ticks.c
@@ -18,9 +18,9 @@
*/
+#include "syscfg/syscfg.h"
#include "console/console.h"
#include "console/prompt.h"
-#include "syscfg/syscfg.h"
static char do_ticks = MYNEWT_VAL(CONSOLE_TICKS);
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/4863008f/sys/console/full/src/uart_console.c
----------------------------------------------------------------------
diff --git a/sys/console/full/src/uart_console.c b/sys/console/full/src/uart_console.c
new file mode 100644
index 0000000..44943d2
--- /dev/null
+++ b/sys/console/full/src/uart_console.c
@@ -0,0 +1,193 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+
+#include "syscfg/syscfg.h"
+
+#if MYNEWT_VAL(CONSOLE_UART)
+#include <ctype.h>
+#include <assert.h>
+
+#include "os/os.h"
+#include "uart/uart.h"
+#include "bsp/bsp.h"
+
+#include "console/console.h"
+#include "console_priv.h"
+
+#define CONSOLE_HEAD_INC(cr) (((cr)->cr_head + 1) & ((cr)->cr_size - 1))
+#define CONSOLE_TAIL_INC(cr) (((cr)->cr_tail + 1) & ((cr)->cr_size - 1))
+
+static struct uart_dev *uart_dev;
+static struct console_ring cr_tx;
+/* must be after console_ring */
+static uint8_t cr_tx_buf[MYNEWT_VAL(CONSOLE_UART_TX_BUF_SIZE)];
+typedef void (*console_write_char)(struct uart_dev*, uint8_t);
+static console_write_char write_char_cb;
+
+struct console_ring {
+ uint8_t cr_head;
+ uint8_t cr_tail;
+ uint16_t cr_size;
+ uint8_t *cr_buf;
+};
+
+static void
+console_add_char(struct console_ring *cr, char ch)
+{
+ cr->cr_buf[cr->cr_head] = ch;
+ cr->cr_head = CONSOLE_HEAD_INC(cr);
+}
+
+static uint8_t
+console_pull_char(struct console_ring *cr)
+{
+ uint8_t ch;
+
+ ch = cr->cr_buf[cr->cr_tail];
+ cr->cr_tail = CONSOLE_TAIL_INC(cr);
+ return ch;
+}
+
+static void
+console_queue_char(struct uart_dev *uart_dev, uint8_t ch)
+{
+ int sr;
+
+ OS_ENTER_CRITICAL(sr);
+ while (CONSOLE_HEAD_INC(&cr_tx) == cr_tx.cr_tail) {
+ /* TX needs to drain */
+ uart_start_tx(uart_dev);
+ OS_EXIT_CRITICAL(sr);
+ if (os_started()) {
+ os_time_delay(1);
+ }
+ OS_ENTER_CRITICAL(sr);
+ }
+ console_add_char(&cr_tx, ch);
+ OS_EXIT_CRITICAL(sr);
+}
+
+/*
+ * Flush cnt characters from console output queue.
+ */
+static void
+console_tx_flush(int cnt)
+{
+ int i;
+ uint8_t byte;
+
+ for (i = 0; i < cnt; i++) {
+ if (cr_tx.cr_head == cr_tx.cr_tail) {
+ /*
+ * Queue is empty.
+ */
+ break;
+ }
+ byte = console_pull_char(&cr_tx);
+ uart_blocking_tx(uart_dev, byte);
+ }
+}
+
+void
+uart_console_blocking_mode(void)
+{
+ int sr;
+
+ OS_ENTER_CRITICAL(sr);
+ if (write_char_cb) {
+ write_char_cb = uart_blocking_tx;
+
+ console_tx_flush(MYNEWT_VAL(CONSOLE_UART_TX_BUF_SIZE));
+ }
+ OS_EXIT_CRITICAL(sr);
+}
+
+int
+console_out(int c)
+{
+ if ('\n' == c) {
+ write_char_cb(uart_dev, '\r');
+ console_is_midline = 0;
+ } else {
+ console_is_midline = 1;
+ }
+ write_char_cb(uart_dev, c);
+ uart_start_tx(uart_dev);
+
+ return c;
+}
+
+/*
+ * Interrupts disabled when console_tx_char/console_rx_char are called.
+ * Characters sent only in blocking mode.
+ */
+static int
+console_tx_char(void *arg)
+{
+ if (cr_tx.cr_head == cr_tx.cr_tail) {
+ /*
+ * No more data.
+ */
+ return -1;
+ }
+ return console_pull_char(&cr_tx);
+}
+
+/*
+ * Interrupts disabled when console_tx_char/console_rx_char are called.
+ */
+static int
+console_rx_char(void *arg, uint8_t byte)
+{
+ return console_handle_char(byte);
+}
+
+int
+uart_console_is_init(void)
+{
+ return uart_dev != NULL;
+}
+
+int
+uart_console_init(void)
+{
+ struct uart_conf uc = {
+ .uc_speed = MYNEWT_VAL(CONSOLE_UART_BAUD),
+ .uc_databits = 8,
+ .uc_stopbits = 1,
+ .uc_parity = UART_PARITY_NONE,
+ .uc_flow_ctl = MYNEWT_VAL(CONSOLE_UART_FLOW_CONTROL),
+ .uc_tx_char = console_tx_char,
+ .uc_rx_char = console_rx_char,
+ };
+
+ cr_tx.cr_size = MYNEWT_VAL(CONSOLE_UART_TX_BUF_SIZE);
+ cr_tx.cr_buf = cr_tx_buf;
+ write_char_cb = console_queue_char;
+
+ if (!uart_dev) {
+ uart_dev = (struct uart_dev *)os_dev_open(CONSOLE_UART,
+ OS_TIMEOUT_NEVER, &uc);
+ if (!uart_dev) {
+ return -1;
+ }
+ }
+ return 0;
+}
+#endif /* MYNEWT_VAL(CONSOLE_UART) */
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/4863008f/sys/console/full/syscfg.yml
----------------------------------------------------------------------
diff --git a/sys/console/full/syscfg.yml b/sys/console/full/syscfg.yml
index 68eedaf..45fc2ed 100644
--- a/sys/console/full/syscfg.yml
+++ b/sys/console/full/syscfg.yml
@@ -19,27 +19,31 @@
# Package: sys/console/full
syscfg.defs:
- CONSOLE_BAUD:
+ CONSOLE_UART:
+ description: 'Set console output to UART'
+ value: 1
+ CONSOLE_RTT:
+ description: 'Set console output to RTT'
+ value: 0
+ CONSOLE_INPUT:
+ description: 'Enable console input'
+ value: 1
+ CONSOLE_TICKS:
+ description: 'Print OS Ticks'
+ value: 1
+ CONSOLE_COMPAT:
+ description: 'Console backward compatibility'
+ value: 1
+ CONSOLE_MAX_INPUT_LEN:
+ description: 'Maximum input line length'
+ value: 256
+
+ CONSOLE_UART_BAUD:
description: 'Console UART baud rate.'
value: '115200'
- CONSOLE_FLOW_CONTROL:
+ CONSOLE_UART_FLOW_CONTROL:
description: 'Console UART flow control.'
value: 'UART_FLOW_CTL_NONE'
- CONSOLE_TX_BUF_SIZE:
- description: 'Console transmit buffer size; must be power of 2.'
+ CONSOLE_UART_TX_BUF_SIZE:
+ description: 'UART console transmit buffer size; must be power of 2.'
value: 32
- CONSOLE_RX_BUF_SIZE:
- description: 'Console receive buffer size.'
- value: 128
- CONSOLE_TICKS:
- description: 'Print OS Ticks'
- value: '1'
- CONSOLE_PROMPT:
- description: 'Default console prompt '
- value: '0'
- CONSOLE_ECHO:
- description: 'Default console echo '
- value: '1'
- CONSOLE_HIST_ENABLE:
- description: 'Console history '
- value: 0
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/4863008f/sys/console/minimal/include/console/console.h
----------------------------------------------------------------------
diff --git a/sys/console/minimal/include/console/console.h b/sys/console/minimal/include/console/console.h
deleted file mode 100644
index 61f6534..0000000
--- a/sys/console/minimal/include/console/console.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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 __CONSOLE_H__
-#define __CONSOLE_H__
-
-#include <stdarg.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef void (*console_rx_cb)(void);
-
-int console_init(console_rx_cb rx_cb);
-static int inline
-console_is_init(void)
-{
- return 0;
-}
-
-void console_write(const char *str, int cnt);
-int console_read(char *str, int cnt, int *newline);
-static void inline
-console_blocking_mode(void)
-{
-}
-
-static void inline
-console_echo(int on)
-{
-}
-
-static int console_printf(const char *fmt, ...)
- __attribute__ ((format (printf, 1, 2)));;
-static int inline
-console_printf(const char *fmt, ...)
-{
- return 0;
-}
-
-#define console_is_midline 0
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __CONSOLE_H__ */
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/4863008f/sys/console/minimal/include/console/prompt.h
----------------------------------------------------------------------
diff --git a/sys/console/minimal/include/console/prompt.h b/sys/console/minimal/include/console/prompt.h
deleted file mode 100644
index 6de36f5..0000000
--- a/sys/console/minimal/include/console/prompt.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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 __CONSOLE_PROMPT_H__
-#define __CONSOLE_PROMPT_H__
-
-#include <stdarg.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* print console prompt */
-static void inline
-console_print_prompt(void)
-{
-}
-
-/* set the console prompt character */
-static void inline
-console_set_prompt(char ch)
-{
-}
-
-static void inline
-console_no_prompt(void)
-{
-}
-
-static void inline
-console_yes_prompt(void)
-{
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __CONSOLE_PROMPT_H__ */
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/4863008f/sys/console/minimal/include/console/ticks.h
----------------------------------------------------------------------
diff --git a/sys/console/minimal/include/console/ticks.h b/sys/console/minimal/include/console/ticks.h
deleted file mode 100644
index 97f6a05..0000000
--- a/sys/console/minimal/include/console/ticks.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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 __CONSOLE_TICKS_H__
-#define __CONSOLE_TICKS_H__
-
-#include <stdarg.h>
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-static void inline
-console_no_ticks(void)
-{
-}
-
-static void inline
-console_yes_ticks(void)
-{
-}
-
-static char inline
-console_get_ticks(void)
-{
- return 0;
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __CONSOLE_PROMPT_H__ */
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/4863008f/sys/console/minimal/pkg.yml
----------------------------------------------------------------------
diff --git a/sys/console/minimal/pkg.yml b/sys/console/minimal/pkg.yml
deleted file mode 100644
index 40e8980..0000000
--- a/sys/console/minimal/pkg.yml
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you 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.
-#
-
-pkg.name: sys/console/minimal
-pkg.description: Text-based IO interface (minimized).
-pkg.author: "Apache Mynewt <de...@mynewt.incubator.apache.org>"
-pkg.homepage: "http://mynewt.apache.org/"
-pkg.keywords:
-
-pkg.deps:
- - hw/hal
- - kernel/os
- - hw/drivers/uart
-pkg.apis: console
-
-pkg.init:
- console_pkg_init: 20
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/4863008f/sys/console/minimal/src/cons_tty.c
----------------------------------------------------------------------
diff --git a/sys/console/minimal/src/cons_tty.c b/sys/console/minimal/src/cons_tty.c
deleted file mode 100644
index d837878..0000000
--- a/sys/console/minimal/src/cons_tty.c
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-
-/*
- * Minimal line-based console implementation. Does not include
- * echo, command line history, prompt or console_printf().
- * Only offers console_write() and console_read().
- */
-#include <inttypes.h>
-#include <assert.h>
-#include "syscfg/syscfg.h"
-#include "sysinit/sysinit.h"
-#include "os/os.h"
-#include "uart/uart.h"
-#include "bsp/bsp.h"
-
-#include "console/console.h"
-#include "console/prompt.h"
-
-#define CONSOLE_RX_CHUNK 16
-
-#define CONSOLE_HEAD_INC(cr) (((cr)->cr_head + 1) & ((cr)->cr_size - 1))
-#define CONSOLE_TAIL_INC(cr) (((cr)->cr_tail + 1) & ((cr)->cr_size - 1))
-
-struct console_ring {
- uint8_t cr_head;
- uint8_t cr_tail;
- uint16_t cr_size;
- uint8_t *cr_buf;
-};
-
-struct console_tty {
- struct uart_dev *ct_dev;
-
- struct console_ring ct_tx;
- /* must be after console_ring */
- uint8_t ct_tx_buf[MYNEWT_VAL(CONSOLE_TX_BUF_SIZE)];
-
- struct console_ring ct_rx;
- /* must be after console_ring */
- uint8_t ct_rx_buf[MYNEWT_VAL(CONSOLE_RX_BUF_SIZE)];
-
- console_rx_cb ct_rx_cb; /* callback that input is ready */
-} console_tty;
-
-static void
-console_add_char(struct console_ring *cr, char ch)
-{
- cr->cr_buf[cr->cr_head] = ch;
- cr->cr_head = CONSOLE_HEAD_INC(cr);
-}
-
-static uint8_t
-console_pull_char(struct console_ring *cr)
-{
- uint8_t ch;
-
- ch = cr->cr_buf[cr->cr_tail];
- cr->cr_tail = CONSOLE_TAIL_INC(cr);
- return ch;
-}
-
-static void
-console_queue_char(char ch)
-{
- struct console_tty *ct = &console_tty;
- int sr;
-
- OS_ENTER_CRITICAL(sr);
- while (CONSOLE_HEAD_INC(&ct->ct_tx) == ct->ct_tx.cr_tail) {
- /* TX needs to drain */
- uart_start_tx(ct->ct_dev);
- OS_EXIT_CRITICAL(sr);
- OS_ENTER_CRITICAL(sr);
- }
- console_add_char(&ct->ct_tx, ch);
- OS_EXIT_CRITICAL(sr);
-}
-
-void
-console_write(const char *str, int cnt)
-{
- struct console_tty *ct = &console_tty;
- int i;
-
- for (i = 0; i < cnt; i++) {
- if (str[i] == '\n') {
- console_queue_char('\r');
- }
- console_queue_char(str[i]);
- }
- uart_start_tx(ct->ct_dev);
-}
-
-int
-console_read(char *str, int cnt, int *newline)
-{
- struct console_tty *ct = &console_tty;
- struct console_ring *cr = &ct->ct_rx;
- int sr;
- int i;
- uint8_t ch;
-
- *newline = 0;
- OS_ENTER_CRITICAL(sr);
- for (i = 0; i < cnt; i++) {
- if (cr->cr_head == cr->cr_tail) {
- break;
- }
-
- if ((i & (CONSOLE_RX_CHUNK - 1)) == (CONSOLE_RX_CHUNK - 1)) {
- /*
- * Make a break from blocking interrupts during the copy.
- */
- OS_EXIT_CRITICAL(sr);
- OS_ENTER_CRITICAL(sr);
- }
-
- ch = console_pull_char(cr);
- if (ch == '\n') {
- *str = '\0';
- *newline = 1;
- break;
- }
- *str++ = ch;
- }
- OS_EXIT_CRITICAL(sr);
- if (i > 0 || *newline) {
- uart_start_rx(ct->ct_dev);
- }
- return i;
-}
-
-/*
- * Interrupts disabled when console_tx_char/console_rx_char are called.
- */
-static int
-console_tx_char(void *arg)
-{
- struct console_tty *ct = (struct console_tty *)arg;
- struct console_ring *cr = &ct->ct_tx;
-
- if (cr->cr_head == cr->cr_tail) {
- /*
- * No more data.
- */
- return -1;
- }
- return console_pull_char(cr);
-}
-
-static int
-console_rx_char(void *arg, uint8_t data)
-{
- struct console_tty *ct = (struct console_tty *)arg;
- struct console_ring *rx = &ct->ct_rx;
-
- if (CONSOLE_HEAD_INC(&ct->ct_rx) == ct->ct_rx.cr_tail) {
- /*
- * RX queue full. Reader must drain this.
- */
- if (ct->ct_rx_cb) {
- ct->ct_rx_cb();
- }
- return -1;
- }
-
- /* echo */
- switch (data) {
- case '\r':
- case '\n':
- /*
- * linefeed
- */
- console_add_char(rx, '\n');
- if (ct->ct_rx_cb) {
- ct->ct_rx_cb();
- }
- break;
- default:
- console_add_char(rx, data);
- break;
- }
- return 0;
-}
-
-static int is_power_of_two (unsigned int x)
-{
- return ((x != 0) && !(x & (x - 1)));
-}
-
-int
-console_init(console_rx_cb rx_cb)
-{
- struct console_tty *ct = &console_tty;
- struct uart_conf uc = {
- .uc_speed = MYNEWT_VAL(CONSOLE_BAUD),
- .uc_databits = 8,
- .uc_stopbits = 1,
- .uc_parity = UART_PARITY_NONE,
- .uc_flow_ctl = MYNEWT_VAL(CONSOLE_FLOW_CONTROL),
- .uc_tx_char = console_tx_char,
- .uc_rx_char = console_rx_char,
- .uc_cb_arg = ct
- };
-
- ct->ct_rx_cb = rx_cb;
- if (!ct->ct_dev) {
- ct->ct_tx.cr_size = MYNEWT_VAL(CONSOLE_TX_BUF_SIZE);
- ct->ct_tx.cr_buf = ct->ct_tx_buf;
- ct->ct_rx.cr_size = MYNEWT_VAL(CONSOLE_RX_BUF_SIZE);
- ct->ct_rx.cr_buf = ct->ct_rx_buf;
-
- ct->ct_dev = (struct uart_dev *)os_dev_open(CONSOLE_UART,
- OS_TIMEOUT_NEVER, &uc);
- if (!ct->ct_dev) {
- return -1;
- }
- }
-
- /* must be a power of 2 */
- assert(is_power_of_two(MYNEWT_VAL(CONSOLE_RX_BUF_SIZE)));
-
- return 0;
-}
-
-void
-console_pkg_init(void)
-{
- int rc;
-
- /* Ensure this function only gets called by sysinit. */
- SYSINIT_ASSERT_ACTIVE();
-
- rc = console_init(NULL);
- SYSINIT_PANIC_ASSERT(rc == 0);
-}
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/4863008f/sys/console/minimal/syscfg.yml
----------------------------------------------------------------------
diff --git a/sys/console/minimal/syscfg.yml b/sys/console/minimal/syscfg.yml
deleted file mode 100644
index 8b4732b..0000000
--- a/sys/console/minimal/syscfg.yml
+++ /dev/null
@@ -1,33 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you 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.
-#
-
-# Package: sys/console/minimal
-
-syscfg.defs:
- CONSOLE_BAUD:
- description: 'Console UART baud rate.'
- value: '115200'
- CONSOLE_FLOW_CONTROL:
- description: 'Console UART flow control.'
- value: 'UART_FLOW_CTL_NONE'
- CONSOLE_TX_BUF_SIZE:
- description: 'Console transmit buffer size; must be power of 2.'
- value: 32
- CONSOLE_RX_BUF_SIZE:
- description: 'Console receive buffer size.'
- value: 128
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/4863008f/sys/console/stub/include/console/console.h
----------------------------------------------------------------------
diff --git a/sys/console/stub/include/console/console.h b/sys/console/stub/include/console/console.h
index 3c83b9d..d60aaf8 100644
--- a/sys/console/stub/include/console/console.h
+++ b/sys/console/stub/include/console/console.h
@@ -19,12 +19,18 @@
#ifndef __CONSOLE_H__
#define __CONSOLE_H__
-#include <stdarg.h>
+#include <inttypes.h>
#ifdef __cplusplus
extern "C" {
#endif
+struct os_eventq;
+
+struct console_input {
+ char line[0];
+};
+
typedef void (*console_rx_cb)(void);
static int inline
@@ -34,11 +40,16 @@ console_is_init(void)
}
static int inline
-console_init(console_rx_cb rxcb)
+console_init(console_rx_cb rx_cb)
{
return 0;
}
+static void inline
+console_write(const char *str, int cnt)
+{
+}
+
static int inline
console_read(char *str, int cnt, int *newline)
{
@@ -52,7 +63,7 @@ console_blocking_mode(void)
}
static void inline
-console_write(const char *str, int cnt)
+console_echo(int on)
{
}
@@ -66,8 +77,26 @@ console_printf(const char *fmt, ...)
}
static void inline
-console_echo(int on)
+console_set_queues(struct os_eventq *avail_queue,
+ struct os_eventq *cmd_queue)
+{
+}
+
+static void inline
+console_set_completion_cb(uint8_t (*completion)(char *str, uint8_t len))
+{
+}
+
+static int inline
+console_handle_char(uint8_t byte)
{
+ return 0;
+}
+
+static int inline
+console_out(int character)
+{
+ return 0;
}
#define console_is_midline (0)