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 3ca145c sys/console: add support for silencing output from the
console (#1341)
3ca145c is described below
commit 3ca145c8cfa11d67385911cb4327125f694ed7df
Author: Vipul Rahane <[email protected]>
AuthorDate: Tue Aug 21 13:48:44 2018 -0700
sys/console: add support for silencing output from the console (#1341)
* sys/console: add support for silencing output from the console
- Add support for silencing output from the console
- Change parse_ull_bounds to check for range and return SYS_ERANGE error
* console/stub: add stub function for console_silence
* parse: cleanup, adding comments and addressing review
- Return character if console is silenced
---
sys/console/full/include/console/console.h | 16 ++++++++++++++++
sys/console/full/src/ble_monitor_console.c | 4 ++++
sys/console/full/src/console.c | 1 +
sys/console/full/src/rtt_console.c | 4 ++++
sys/console/full/src/uart_console.c | 4 ++++
sys/console/minimal/include/console/console.h | 17 +++++++++++++++++
sys/console/minimal/src/console.c | 1 +
sys/console/minimal/src/rtt_console.c | 4 ++++
sys/console/minimal/src/uart_console.c | 4 ++++
sys/console/stub/include/console/console.h | 6 ++++++
util/parse/src/parse.c | 20 ++++++++++++--------
11 files changed, 73 insertions(+), 8 deletions(-)
diff --git a/sys/console/full/include/console/console.h
b/sys/console/full/include/console/console.h
index ab1af6e..bb9f11a 100644
--- a/sys/console/full/include/console/console.h
+++ b/sys/console/full/include/console/console.h
@@ -65,6 +65,22 @@ int console_handle_char(uint8_t byte);
void console_line_queue_set(struct os_eventq *evq);
/* Put (handled) line event to console */
void console_line_event_put(struct os_event *ev);
+/**
+ * Global indicating whether console is silent or not
+ */
+extern bool g_silence_console;
+
+/**
+ * Silences console output, input is still active
+ *
+ * @param silent Let console know if it needs to be silent,
+ * true for silence, false otherwise
+ */
+static void inline
+console_silence(bool silent)
+{
+ g_silence_console = silent;
+}
extern int console_is_midline;
extern int console_out(int character);
diff --git a/sys/console/full/src/ble_monitor_console.c
b/sys/console/full/src/ble_monitor_console.c
index d25bfdb..12cd44f 100644
--- a/sys/console/full/src/ble_monitor_console.c
+++ b/sys/console/full/src/ble_monitor_console.c
@@ -27,6 +27,10 @@
int
console_out(int c)
{
+ if (g_silence_console) {
+ return c;
+ }
+
console_is_midline = (c != '\n');
return ble_monitor_out(c);
diff --git a/sys/console/full/src/console.c b/sys/console/full/src/console.c
index 78bf9cc..6f996cf 100644
--- a/sys/console/full/src/console.c
+++ b/sys/console/full/src/console.c
@@ -82,6 +82,7 @@ static uint16_t cur, end;
static struct os_eventq avail_queue;
static struct os_eventq *lines_queue;
static completion_cb completion;
+bool g_silence_console;
/*
* Default implementation in case all consoles are disabled - we just ignore
any
diff --git a/sys/console/full/src/rtt_console.c
b/sys/console/full/src/rtt_console.c
index fa3c692..0191372 100644
--- a/sys/console/full/src/rtt_console.c
+++ b/sys/console/full/src/rtt_console.c
@@ -37,6 +37,10 @@ console_out(int character)
{
char c = (char)character;
+ if (g_silence_console) {
+ return c;
+ }
+
if ('\n' == c) {
SEGGER_RTT_WriteWithOverwriteNoLock(0, &CR, 1);
console_is_midline = 0;
diff --git a/sys/console/full/src/uart_console.c
b/sys/console/full/src/uart_console.c
index aa25790..252d576 100644
--- a/sys/console/full/src/uart_console.c
+++ b/sys/console/full/src/uart_console.c
@@ -154,6 +154,10 @@ uart_console_non_blocking_mode(void)
int
console_out(int c)
{
+ if (g_silence_console) {
+ return c;
+ }
+
/* Assure that there is a write cb installed; this enables to debug
* code that is faulting before the console was initialized.
*/
diff --git a/sys/console/minimal/include/console/console.h
b/sys/console/minimal/include/console/console.h
index 5e8eeb2..6c82006 100644
--- a/sys/console/minimal/include/console/console.h
+++ b/sys/console/minimal/include/console/console.h
@@ -63,6 +63,23 @@ console_set_completion_cb(uint8_t (*completion)(char *str,
uint8_t len))
{
}
+/**
+ * Global indicating whether console is silent or not
+ */
+extern bool g_silence_console;
+
+/**
+ * Silences console output, input is still active
+ *
+ * @param silent Let console know if it needs to be silent,
+ * true for silence, false otherwise
+ */
+static void inline
+console_silence(bool silent)
+{
+ g_silence_console = silent;
+}
+
int console_handle_char(uint8_t byte);
extern int console_is_midline;
diff --git a/sys/console/minimal/src/console.c
b/sys/console/minimal/src/console.c
index d0fc786..9f50e90 100644
--- a/sys/console/minimal/src/console.c
+++ b/sys/console/minimal/src/console.c
@@ -56,6 +56,7 @@ static int echo = MYNEWT_VAL(CONSOLE_ECHO);
static uint8_t cur, end;
static struct os_eventq *avail_queue;
static struct os_eventq *lines_queue;
+bool g_silence_console;
int __attribute__((weak))
console_out(int c)
diff --git a/sys/console/minimal/src/rtt_console.c
b/sys/console/minimal/src/rtt_console.c
index b678e96..085690d 100644
--- a/sys/console/minimal/src/rtt_console.c
+++ b/sys/console/minimal/src/rtt_console.c
@@ -37,6 +37,10 @@ console_out(int character)
{
char c = (char)character;
+ if (g_silence_console) {
+ return c;
+ }
+
if ('\n' == c) {
SEGGER_RTT_WriteWithOverwriteNoLock(0, &CR, 1);
console_is_midline = 0;
diff --git a/sys/console/minimal/src/uart_console.c
b/sys/console/minimal/src/uart_console.c
index 7c3a72e..0f9b00b 100644
--- a/sys/console/minimal/src/uart_console.c
+++ b/sys/console/minimal/src/uart_console.c
@@ -132,6 +132,10 @@ uart_console_non_blocking_mode(void)
int
console_out(int c)
{
+ if (g_silence_console) {
+ return c;
+ }
+
if ('\n' == c) {
write_char_cb(uart_dev, '\r');
console_is_midline = 0;
diff --git a/sys/console/stub/include/console/console.h
b/sys/console/stub/include/console/console.h
index f1e27a3..57c5ab0 100644
--- a/sys/console/stub/include/console/console.h
+++ b/sys/console/stub/include/console/console.h
@@ -20,6 +20,7 @@
#define __CONSOLE_H__
#include <inttypes.h>
+#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
@@ -111,6 +112,11 @@ console_out(int character)
return 0;
}
+static void inline
+console_silence(bool silent)
+{
+}
+
#define console_is_midline (0)
#ifdef __cplusplus
diff --git a/util/parse/src/parse.c b/util/parse/src/parse.c
index 626a97e..e403203 100644
--- a/util/parse/src/parse.c
+++ b/util/parse/src/parse.c
@@ -54,11 +54,13 @@ parse_ll_bounds(const char *sval, long long min, long long
max,
char *endptr;
long long llval;
- llval = strtoll(sval, &endptr, parse_num_base(sval));
- if (sval[0] != '\0' && *endptr == '\0' &&
- llval >= min && llval <= max) {
+ *out_status = SYS_EOK;
- *out_status = 0;
+ llval = strtoll(sval, &endptr, parse_num_base(sval));
+ if (sval[0] != '\0' && *endptr == '\0') {
+ if (llval < min || llval > max) {
+ *out_status = SYS_ERANGE;
+ }
return llval;
}
@@ -74,11 +76,13 @@ parse_ull_bounds(const char *sval,
char *endptr;
unsigned long long ullval;
- ullval = strtoull(sval, &endptr, parse_num_base(sval));
- if (sval[0] != '\0' && *endptr == '\0' &&
- ullval >= min && ullval <= max) {
+ *out_status = SYS_EOK;
- *out_status = 0;
+ ullval = strtoull(sval, &endptr, parse_num_base(sval));
+ if (sval[0] != '\0' && *endptr == '\0') {
+ if (ullval < min || ullval > max) {
+ *out_status = SYS_ERANGE;
+ }
return ullval;
}