Create RedirectablePrint and NoopPrint for serial debug redirection

This commit is contained in:
geeksville 2020-04-27 09:01:25 -07:00
parent dda946d933
commit eb40013ddc
2 changed files with 47 additions and 0 deletions

13
src/RedirectablePrint.cpp Normal file
View File

@ -0,0 +1,13 @@
#include "RedirectablePrint.h"
#include <assert.h>
/**
* A printer that doesn't go anywhere
*/
NoopPrint noopPrint;
void RedirectablePrint::setDestination(Print *_dest)
{
assert(_dest);
dest = _dest;
}

34
src/RedirectablePrint.h Normal file
View File

@ -0,0 +1,34 @@
#pragma once
#include <Print.h>
/**
* A Printable that can be switched to squirt its bytes to a different sink.
* This class is mostly useful to allow debug printing to be redirected away from Serial
* to some other transport if we switch Serial usage (on the fly) to some other purpose.
*/
class RedirectablePrint : public Print
{
Print *dest;
public:
RedirectablePrint(Print *_dest) : dest(_dest) {}
/**
* Set a new destination
*/
void setDestination(Print *dest);
virtual size_t write(uint8_t c) { return dest->write(c); }
};
class NoopPrint : public Print
{
public:
virtual size_t write(uint8_t c) { return 1; }
};
/**
* A printer that doesn't go anywhere
*/
extern NoopPrint noopPrint;