This is an automated email from the ASF dual-hosted git repository.

vipulrahane pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git


The following commit(s) were added to refs/heads/master by this push:
     new b0faad3  Add console_reinit(), console_deinit() and 
uart_console_deinit() APIs to disable console input/output at runtime (#1675)
b0faad3 is described below

commit b0faad350148e04cabc9ff2654dcc055e645f857
Author: reshtitus <[email protected]>
AuthorDate: Tue Mar 5 18:01:19 2019 -0800

    Add console_reinit(), console_deinit() and uart_console_deinit() APIs to 
disable console input/output at runtime (#1675)
    
    - Added functions for de-initializing/re-initializing the uart console
    - Added functions to console stub
---
 sys/console/full/include/console/console.h | 26 ++++++++++++++++++++++++++
 sys/console/full/src/console.c             | 20 ++++++++++++++++++++
 sys/console/full/src/console_priv.h        |  1 +
 sys/console/full/src/uart_console.c        | 15 +++++++++++++++
 sys/console/stub/include/console/console.h | 15 +++++++++++++++
 5 files changed, 77 insertions(+)

diff --git a/sys/console/full/include/console/console.h 
b/sys/console/full/include/console/console.h
index cd02260..b375ecf 100644
--- a/sys/console/full/include/console/console.h
+++ b/sys/console/full/include/console/console.h
@@ -45,6 +45,14 @@ typedef void (*console_rx_cb)(void);
 typedef int (*console_append_char_cb)(char *line, uint8_t byte);
 typedef void (*completion_cb)(char *str, console_append_char_cb cb);
 
+/**
+ * De initializes the UART console.
+ */
+void console_deinit(void);
+/**
+ * Re Initializes the UART console.
+ */
+void console_reinit(void);
 int console_init(console_rx_cb rx_cb);
 int console_is_init(void);
 void console_write(const char *str, int cnt);
@@ -69,6 +77,11 @@ void console_line_event_put(struct os_event *ev);
  * Global indicating whether console is silent or not
  */
 extern bool g_silence_console;
+/**
+ * Global indicating whether console input is disabled or not
+ */
+extern bool g_console_input_ignore;
+
 
 /**
  * Silences console output, input is still active
@@ -82,6 +95,19 @@ console_silence(bool silent)
     g_silence_console = silent;
 }
 
+
+/**
+ * Ignores console input, output is still active
+ *
+ * @param ignore Lets console know if input should be disabled,
+ *        true for ignore input, false otherwise
+ */
+static void inline
+console_input_ignore(bool ignore)
+{
+    g_console_input_ignore = ignore;
+}
+
 extern int console_is_midline;
 extern int console_out(int character);
 extern void console_rx_restart(void);
diff --git a/sys/console/full/src/console.c b/sys/console/full/src/console.c
index 93d8a50..c7048a4 100644
--- a/sys/console/full/src/console.c
+++ b/sys/console/full/src/console.c
@@ -84,6 +84,7 @@ static struct os_eventq avail_queue;
 static struct os_eventq *lines_queue;
 static completion_cb completion;
 bool g_silence_console;
+bool g_console_input_ignore;
 static struct os_mutex console_write_lock;
 
 /*
@@ -670,6 +671,9 @@ console_handle_char(uint8_t byte)
 #if !MYNEWT_VAL(CONSOLE_INPUT)
     return 0;
 #endif
+    if (g_console_input_ignore) {
+        return 0;
+    }
 
     static struct os_event *ev;
     static struct console_input *input;
@@ -853,6 +857,22 @@ console_set_completion_cb(completion_cb cb)
     completion = cb;
 }
 
+void
+console_deinit(void)
+{
+#if MYNEWT_VAL(CONSOLE_UART)
+    uart_console_deinit();
+#endif
+}
+
+void
+console_reinit(void)
+{
+#if MYNEWT_VAL(CONSOLE_UART)
+     uart_console_init();
+#endif
+}
+
 #if MYNEWT_VAL(CONSOLE_COMPAT)
 int
 console_init(console_rx_cb rx_cb)
diff --git a/sys/console/full/src/console_priv.h 
b/sys/console/full/src/console_priv.h
index ff41cae..136080c 100644
--- a/sys/console/full/src/console_priv.h
+++ b/sys/console/full/src/console_priv.h
@@ -25,6 +25,7 @@ extern "C" {
 #endif
 
 int uart_console_is_init(void);
+int uart_console_deinit(void);
 int uart_console_init(void);
 void uart_console_blocking_mode(void);
 void uart_console_non_blocking_mode(void);
diff --git a/sys/console/full/src/uart_console.c 
b/sys/console/full/src/uart_console.c
index 8255701..176106a 100644
--- a/sys/console/full/src/uart_console.c
+++ b/sys/console/full/src/uart_console.c
@@ -272,6 +272,21 @@ uart_console_is_init(void)
 }
 
 int
+uart_console_deinit(void)
+{
+    struct os_dev *dev;
+    dev = os_dev_lookup(MYNEWT_VAL(CONSOLE_UART_DEV));
+    if (dev) {
+        /* Force close now */
+        os_dev_close(dev);
+        uart_dev = NULL;
+    } else {
+        return SYS_ENODEV;
+    }
+    return 0;
+}
+
+int
 uart_console_init(void)
 {
     struct uart_conf uc = {
diff --git a/sys/console/stub/include/console/console.h 
b/sys/console/stub/include/console/console.h
index 0543fa6..ff6c6b3 100644
--- a/sys/console/stub/include/console/console.h
+++ b/sys/console/stub/include/console/console.h
@@ -43,6 +43,16 @@ console_is_init(void)
     return 0;
 }
 
+static void inline
+console_deinit(void)
+{
+}
+
+static void inline
+console_reinit(void)
+{
+}
+
 static int inline
 console_init(console_rx_cb rx_cb)
 {
@@ -117,6 +127,11 @@ console_silence(bool silent)
 {
 }
 
+static void inline
+console_input_ignore(bool ignore)
+{
+}
+
 static inline int
 console_lock(int timeout)
 {

Reply via email to