Skip to content

Commit ce833b7

Browse files
committed
Disable direct logging in listening mode
1 parent 7f578c5 commit ce833b7

File tree

2 files changed

+34
-19
lines changed

2 files changed

+34
-19
lines changed

wiring/inc/spark_wiring_logging.h

-11
Original file line numberDiff line numberDiff line change
@@ -702,10 +702,6 @@ inline Print* spark::StreamLogHandler::stream() const {
702702
return stream_;
703703
}
704704

705-
inline void spark::StreamLogHandler::write(const char *data, size_t size) {
706-
stream_->write((const uint8_t*)data, size);
707-
}
708-
709705
inline void spark::StreamLogHandler::write(const char *str) {
710706
write(str, strlen(str));
711707
}
@@ -714,13 +710,6 @@ inline void spark::StreamLogHandler::write(char c) {
714710
write(&c, 1);
715711
}
716712

717-
inline void spark::StreamLogHandler::printf(const char *fmt, ...) {
718-
va_list args;
719-
va_start(args, fmt);
720-
stream_->vprintf(false, fmt, args);
721-
va_end(args);
722-
}
723-
724713
// spark::JSONStreamLogHandler
725714
inline void spark::JSONStreamLogHandler::write(const char *data, size_t size) {
726715
// This handler doesn't support direct logging

wiring/src/spark_wiring_logging.cpp

+34-8
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@
3434
// Uncomment to enable logging in interrupt handlers
3535
// #define LOG_FROM_ISR
3636

37+
// Uncomment to enable logging to the USB serial while in listening mode
38+
// #define LOG_IN_LISTENING_MODE
39+
3740
#if defined(LOG_FROM_ISR) && PLATFORM_ID != PLATFORM_GCC
3841
// When compiled with LOG_FROM_ISR defined use ATOMIC_BLOCK
3942
#define LOG_WITH_LOCK(x) ATOMIC_BLOCK()
@@ -472,12 +475,6 @@ int spark::detail::LogFilter::nodeIndex(const Vector<Node> &nodes, const char *n
472475

473476
// spark::StreamLogHandler
474477
void spark::StreamLogHandler::logMessage(const char *msg, LogLevel level, const char *category, const LogAttributes &attr) {
475-
// TODO: Move this check to a base class (see also JSONStreamLogHandler::logMessage())
476-
#if PLATFORM_ID != PLATFORM_GCC
477-
if (stream_ == &Serial && Network.listening()) {
478-
return; // Do not mix logging and serial console output
479-
}
480-
#endif // PLATFORM_ID != PLATFORM_GCC
481478
const char *s = nullptr;
482479
// Timestamp
483480
if (attr.has_time) {
@@ -539,10 +536,39 @@ void spark::StreamLogHandler::logMessage(const char *msg, LogLevel level, const
539536
write("\r\n", 2);
540537
}
541538

539+
void spark::StreamLogHandler::write(const char *data, size_t size) {
540+
// TODO: Move this check to a base class (see also JSONStreamLogHandler::logMessage())
541+
#if PLATFORM_ID != PLATFORM_GCC && !defined(LOG_IN_LISTENING_MODE)
542+
if (stream_ == &Serial && Network.listening()) {
543+
return; // Do not mix logging and serial console output
544+
}
545+
#endif
546+
stream_->write((const uint8_t*)data, size);
547+
}
548+
549+
void spark::StreamLogHandler::printf(const char *fmt, ...) {
550+
char buf[32];
551+
va_list args;
552+
va_start(args, fmt);
553+
int n = vsnprintf(buf, sizeof(buf), fmt, args);
554+
va_end(args);
555+
if ((size_t)n >= sizeof(buf)) {
556+
char buf[n + 1]; // Use a larger buffer
557+
va_start(args, fmt);
558+
n = vsnprintf(buf, sizeof(buf), fmt, args);
559+
va_end(args);
560+
if (n > 0) {
561+
write(buf, n);
562+
}
563+
} else if (n > 0) {
564+
write(buf, n);
565+
}
566+
}
567+
542568
// spark::JSONStreamLogHandler
543569
void spark::JSONStreamLogHandler::logMessage(const char *msg, LogLevel level, const char *category, const LogAttributes &attr) {
544-
// TODO: Move this check to a base class (see also StreamLogHandler::logMessage())
545-
#if PLATFORM_ID != PLATFORM_GCC
570+
// TODO: Move this check to a base class (see also StreamLogHandler::write())
571+
#if PLATFORM_ID != PLATFORM_GCC && !defined(LOG_IN_LISTENING_MODE)
546572
if (this->stream() == &Serial && Network.listening()) {
547573
return; // Do not mix logging and serial console output
548574
}

0 commit comments

Comments
 (0)