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 <[email protected]>
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)
 {

Reply via email to