1
0
forked from fsfw/fsfw

Using C++ to implement preamble. adding optional flag for carriage return

This commit is contained in:
2020-04-12 23:06:57 +02:00
parent 69e9710bf1
commit eb2df3d88c
6 changed files with 47 additions and 22 deletions

View File

@ -2,16 +2,17 @@
#define FRAMEWORK_SERVICEINTERFACE_SERVICEINTERFACEBUFFER_H_
#include <iostream>
#include <iosfwd>
#include <sstream>
#include <cstdio>
#include <iomanip>
#ifndef UT699
class ServiceInterfaceBuffer:
public std::basic_streambuf<char,std::char_traits<char>> {
friend class ServiceInterfaceStream;
public:
ServiceInterfaceBuffer(std::string set_message, uint16_t port);
ServiceInterfaceBuffer(std::string set_message, uint16_t port,
bool addCrToPreamble);
protected:
bool isActive;
// This is called when buffer becomes full. If
@ -28,13 +29,28 @@ private:
std::string log_message;
// For EOF detection
typedef std::char_traits<char> Traits;
// This is useful for some terminal programs which do not have
// implicit carriage return with newline characters.
bool addCrToPreamble;
// Work in buffer mode. It is also possible to work without buffer.
static size_t const BUF_SIZE = 150;
static size_t const BUF_SIZE = 128;
char buf[BUF_SIZE];
// In this function, the characters are parsed.
void putChars(char const* begin, char const* end);
template<typename T>
std::string zero_padded(const T& num, uint8_t width) {
std::ostringstream string_to_pad;
string_to_pad << std::setw(width) << std::setfill('0') << num;
std::string result = string_to_pad.str();
if (result.length() > width)
{
result.erase(0, result.length() - width);
}
return result;
}
};
#endif