Skip to content

Commit

Permalink
Create RedirectablePrint and NoopPrint for serial debug redirection
Browse files Browse the repository at this point in the history
  • Loading branch information
geeksville committed Apr 27, 2020
1 parent dda946d commit eb40013
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 0 deletions.
13 changes: 13 additions & 0 deletions src/RedirectablePrint.cpp
Original file line number Diff line number Diff line change
@@ -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 changes: 34 additions & 0 deletions src/RedirectablePrint.h
Original file line number Diff line number Diff line change
@@ -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;

0 comments on commit eb40013

Please sign in to comment.