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)
{