You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by je...@apache.org on 2019/10/17 11:47:17 UTC
[mynewt-core] 09/21: sys/console: Add console_prompt_set function
This is an automated email from the ASF dual-hosted git repository.
jerzy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git
commit d5fb92abd2211c957ced7c7b7ecbeb702e84670c
Author: Jerzy Kasenberg <je...@codecoup.pl>
AuthorDate: Tue Oct 8 14:20:22 2019 +0200
sys/console: Add console_prompt_set function
New console_prompt_set() function will be used to display
prompt from shell or other client.
Before that change prompt was printed with just console_printf()
function and console was not aware of what prompt was and
could not utilize this for enhancing user experience.
---
sys/console/full/include/console/console.h | 11 +++++++++
sys/console/full/src/console.c | 35 +++++++++++++++++++++++++++
sys/console/full/syscfg.yml | 3 +++
sys/console/minimal/include/console/console.h | 2 ++
sys/console/minimal/src/console.c | 9 +++++++
sys/console/stub/include/console/console.h | 5 ++++
6 files changed, 65 insertions(+)
diff --git a/sys/console/full/include/console/console.h b/sys/console/full/include/console/console.h
index ac15e5b..b4ff296 100644
--- a/sys/console/full/include/console/console.h
+++ b/sys/console/full/include/console/console.h
@@ -132,6 +132,17 @@ extern void console_rx_restart(void);
int console_lock(int timeout);
int console_unlock(void);
+/**
+ * Set prompt and current input line.
+ *
+ * This shows prompt with current input editor, cursor is placed
+ * at the end of line.
+ *
+ * @param prompt non-editable part of user input line
+ * @param line editable part
+ */
+void console_prompt_set(const char *prompt, const char *line);
+
#ifdef __cplusplus
}
#endif
diff --git a/sys/console/full/src/console.c b/sys/console/full/src/console.c
index f8fb42b..fc720c4 100644
--- a/sys/console/full/src/console.c
+++ b/sys/console/full/src/console.c
@@ -93,6 +93,11 @@ bool g_console_silence_non_nlip;
bool g_console_ignore_non_nlip;
static struct os_mutex console_write_lock;
+/* Buffer for prompt */
+static char console_prompt[MYNEWT_VAL(CONSOLE_MAX_PROMPT_LEN)];
+/* Length of prompt stored in console_prompt */
+static uint16_t prompt_len;
+
/*
* Default implementation in case all consoles are disabled - we just ignore any
* output to console.
@@ -159,6 +164,36 @@ console_filter_out(int c)
return console_out_nolock(c);
}
+void
+console_prompt_set(const char *prompt, const char *line)
+{
+ bool locked;
+
+ prompt_len = strlen(prompt);
+
+ /* If this assert fails increase value of CONSOLE_MAX_PROMPT_LEN */
+ assert(MYNEWT_VAL(CONSOLE_MAX_PROMPT_LEN) > prompt_len);
+
+ strcpy(console_prompt, prompt);
+
+ /* Place cursor at the end, no trailing chars */
+ if (line) {
+ cur = strlen(line);
+ } else {
+ cur = 0;
+ }
+ trailing_chars = 0;
+
+ locked = console_lock(1000) == OS_OK;
+
+ console_write(prompt, prompt_len);
+ console_write(line, cur);
+
+ if (locked) {
+ (void)console_unlock();
+ }
+}
+
int
console_out(int c)
{
diff --git a/sys/console/full/syscfg.yml b/sys/console/full/syscfg.yml
index 5faff99..31394be 100644
--- a/sys/console/full/syscfg.yml
+++ b/sys/console/full/syscfg.yml
@@ -46,6 +46,9 @@ syscfg.defs:
Number of lines to be stored in console history.
Set to "0" to disable console history.
value: 0
+ CONSOLE_MAX_PROMPT_LEN:
+ description: 'Maximum number of characters for prompt'
+ value: 16
CONSOLE_UART_BAUD:
description: 'Console UART baud rate.'
diff --git a/sys/console/minimal/include/console/console.h b/sys/console/minimal/include/console/console.h
index df1d2da..4628160 100644
--- a/sys/console/minimal/include/console/console.h
+++ b/sys/console/minimal/include/console/console.h
@@ -128,6 +128,8 @@ extern int console_out(int character);
int console_lock(int timeout);
int console_unlock(void);
+void console_prompt_set(const char *prompt, const char *line);
+
#ifdef __cplusplus
}
#endif
diff --git a/sys/console/minimal/src/console.c b/sys/console/minimal/src/console.c
index 77870cc..16bca59 100644
--- a/sys/console/minimal/src/console.c
+++ b/sys/console/minimal/src/console.c
@@ -130,6 +130,15 @@ console_out(int c)
}
void
+console_prompt_set(const char *prompt, const char *line)
+{
+ console_write(promot, strlen(prompt));
+ if (line) {
+ console_write(line, strlen(line));
+ }
+}
+
+void
console_write(const char *str, int cnt)
{
int i;
diff --git a/sys/console/stub/include/console/console.h b/sys/console/stub/include/console/console.h
index d98b4de..c0d63d3 100644
--- a/sys/console/stub/include/console/console.h
+++ b/sys/console/stub/include/console/console.h
@@ -129,6 +129,11 @@ console_out(int character)
return 0;
}
+static inline void
+console_prompt_set(const char *prompt, const char *line)
+{
+}
+
static void inline
console_silence(bool silent)
{