From fea9d91f06eaf79c43c5588a8a6af351bd80d725 Mon Sep 17 00:00:00 2001 From: Joe Date: Fri, 12 Nov 2021 20:44:19 -0500 Subject: [PATCH 1/2] Fixed issue #22 so shell_putc() only prints once when using buffered output --- Shell.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/Shell.c b/Shell.c index 5286bd4..171b471 100644 --- a/Shell.c +++ b/Shell.c @@ -152,21 +152,23 @@ void shell_unregister_all() void shell_putc(char c) { - if (initialized != false && shell_writer != 0) - shell_writer(c); - if (initialized != false && obhandle != 0) { - // Keep track of last byte - obhandle->buffertimer = millis(); - // Empty buffer if it´s full before storing anything else - if (obhandle->buffercount >= 30) { - // Write output... - if (obhandle->shell_bwriter != 0) - obhandle->shell_bwriter(obhandle->outbuffer, obhandle->buffercount); - // and clear counter - obhandle->buffercount = 0; + if (initialized != false) { + if (shell_writer != 0) { + shell_writer(c); + } else if (obhandle != 0) { + // Keep track of last byte + obhandle->buffertimer = millis(); + // Empty buffer if it´s full before storing anything else + if (obhandle->buffercount >= 30) { + // Write output... + if (obhandle->shell_bwriter != 0) + obhandle->shell_bwriter(obhandle->outbuffer, obhandle->buffercount); + // and clear counter + obhandle->buffercount = 0; + } + // Write to buffer always + obhandle->outbuffer[obhandle->buffercount++] = c; } - // Write to buffer always - obhandle->outbuffer[obhandle->buffercount++] = c; } } From 224b0cbb07beda9b975261a3f6a67ef085e3d8b7 Mon Sep 17 00:00:00 2001 From: Joe Date: Fri, 12 Nov 2021 21:13:46 -0500 Subject: [PATCH 2/2] Set shell_writter to 0 when using buffered output --- Shell.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Shell.c b/Shell.c index 171b471..e8699ad 100644 --- a/Shell.c +++ b/Shell.c @@ -124,6 +124,9 @@ void shell_use_buffered_output(shell_bwriter_t writer) obd.shell_bwriter = writer; obd.buffercount = 0; obd.buffertimer = millis(); + + // Set shell_writer to 0 so that it's no longer called + shell_writer = 0; } bool shell_register(shell_program_t program, const char * string)