From a6c86bc2946b7389070466835520d22561ea70a8 Mon Sep 17 00:00:00 2001 From: Harald Barth Date: Mon, 7 Jul 2025 20:37:57 +0200 Subject: [PATCH] Add Diag::SNIFFER so config verbosity of sniffer output --- CommandStation-EX.ino | 3 ++- DCCDecoder.cpp | 5 ++++- DCCEXParser.cpp | 3 +++ DCCPacket.h | 13 ++++++++----- StringFormatter.cpp | 1 + StringFormatter.h | 2 +- 6 files changed, 19 insertions(+), 8 deletions(-) diff --git a/CommandStation-EX.ino b/CommandStation-EX.ino index cbefe6e..6eb3a0c 100644 --- a/CommandStation-EX.ino +++ b/CommandStation-EX.ino @@ -166,7 +166,8 @@ void loop() DCCPacket p = dccSniffer->fetchPacket(); if (p.len() != 0) { if (DCCDecoder::parse(p)) { - p.print(Serial); + if (Diag::SNIFFER) + p.print(); } } } diff --git a/DCCDecoder.cpp b/DCCDecoder.cpp index 1304367..380e7f4 100644 --- a/DCCDecoder.cpp +++ b/DCCDecoder.cpp @@ -42,7 +42,10 @@ bool DCCDecoder::parse(DCCPacket &p) { for (byte n = 0; n < p.len(); n++) checksum ^= d[n]; if (checksum) { // Result should be zero, if not it's an error! - DIAG(F("Checksum error")); + if (Diag::SNIFFER) { + DIAG(F("Checksum error")); + p.print(); + } return false; } diff --git a/DCCEXParser.cpp b/DCCEXParser.cpp index 352d289..d8890bc 100644 --- a/DCCEXParser.cpp +++ b/DCCEXParser.cpp @@ -1243,6 +1243,9 @@ bool DCCEXParser::parseD(Print *stream, int16_t params, int16_t p[]) case "LCN"_hk: // Diag::LCN = onOff; return true; + case "SNIFFER"_hk: // + Diag::SNIFFER = onOff; + return true; #endif #ifndef DISABLE_EEPROM case "EEPROM"_hk: // diff --git a/DCCPacket.h b/DCCPacket.h index e754142..8258378 100644 --- a/DCCPacket.h +++ b/DCCPacket.h @@ -20,6 +20,7 @@ #ifndef DCCPacket_h #define DCCPacket_h #include +#include "defines.h" class DCCPacket { public: @@ -63,13 +64,15 @@ public: return true; return (bcmp(_data, right._data, _len) == 0); }; - void print(HardwareSerial &s) { - s.print("<* DCCPACKET "); + void print() { + static const char hexchars[]="0123456789ABCDEF"; + USB_SERIAL.print(F("<* DCCPACKET ")); for (byte n = 0; n< _len; n++) { - s.print(_data[n], HEX); - s.print(" "); + USB_SERIAL.print(hexchars[_data[n]>>4]); + USB_SERIAL.print(hexchars[_data[n] & 0x0f]); + USB_SERIAL.print(' '); } - s.print("*>\n"); + USB_SERIAL.print(F("*>\n")); }; inline byte len() {return _len;}; inline byte *data() {return _data;}; diff --git a/StringFormatter.cpp b/StringFormatter.cpp index 192e1cc..baa23f7 100644 --- a/StringFormatter.cpp +++ b/StringFormatter.cpp @@ -27,6 +27,7 @@ bool Diag::WIFI=false; bool Diag::WITHROTTLE=false; bool Diag::ETHERNET=false; bool Diag::LCN=false; +bool Diag::SNIFFER=false; void StringFormatter::diag( const FSH* input...) { diff --git a/StringFormatter.h b/StringFormatter.h index 25d15e2..a61b7ad 100644 --- a/StringFormatter.h +++ b/StringFormatter.h @@ -30,7 +30,7 @@ class Diag { static bool WITHROTTLE; static bool ETHERNET; static bool LCN; - + static bool SNIFFER; }; class StringFormatter