RF24Log  0.1.3
Unified logging library
OStreamLogger.cpp
Go to the documentation of this file.
1 
13 #ifndef ARDUINO
14 #include <ctime> // for time_t, struct tm*, time(), localtime(), strftime()
15 #include "OStreamLogger.h"
16 
17 /****************************************************************************/
18 
19 OStreamLogger::OStreamLogger(std::ostream *stream)
20 {
21  _stream = stream;
22 }
23 
24 /****************************************************************************/
25 
27 {
28  char buffer[21];
29  time_t rawtime;
30  time(&rawtime);
31 
32  strftime(buffer, 20, "%F:%H:%M:%S", localtime(&rawtime));
33  buffer[19] = RF24LOG_DELIMITER;
34  buffer[20] = 0;
35  *_stream << buffer;
36 }
37 
38 /****************************************************************************/
39 
40 void OStreamLogger::appendChar(char data, uint16_t depth)
41 {
42  while (depth)
43  {
44  --depth;
45  *_stream << data;
46  }
47 }
48 
49 /****************************************************************************/
50 
51 void OStreamLogger::appendInt(long data)
52 {
53  *_stream << std::dec << data;
54 }
55 
56 /****************************************************************************/
57 
58 void OStreamLogger::appendUInt(unsigned long data, uint8_t base)
59 {
60  if (base == 2)
61  {
62  if (!data)
63  {
64  *_stream << '0'; // output a zero
65  return;
66  }
67  char buffer[64];
68  uint8_t index = 0;
69  while (data)
70  {
71  // get representation as a reversed string
72  buffer[index] = (data & 1) + 48;
73  data >>= 1;
74  ++index;
75  }
76  while (index)
77  {
78  *_stream << buffer[--index]; // dump reversed string 1 char at a time
79  }
80  }
81  else if (base == 8)
82  {
83  *_stream << std::oct << data;
84  }
85  else if (base == 16)
86  {
87  *_stream << std::hex << std::uppercase << data;
88  }
89  else
90  {
91  *_stream << std::dec << data;
92  }
93 }
94 
95 void OStreamLogger::appendDouble(double data, uint8_t precision)
96 {
97  std::streamsize prev_precision = _stream->precision(precision);
98  _stream->setf(std::ios::fixed, std::ios::floatfield);
99  *_stream << data;
100  _stream->precision(prev_precision);
101  _stream->unsetf(std::ios::floatfield);
102  _stream->unsetf(std::ios::fixed);
103 }
104 
105 void OStreamLogger::appendStr(const char* data)
106 {
107  *_stream << data;
108 }
109 
110 #endif // !defined(ARDUINO)
handler for ostream based objects
#define RF24LOG_DELIMITER
Change The Delimiter character used in the header prefix of log messages.
void appendTimestamp()
output a timestamp
void appendChar(char data, uint16_t depth=1)
append a character a number of times
OStreamLogger(std::ostream *stream)
Construct a new OStreamLogger object.
void appendDouble(double data, uint8_t precision=2)
append a floating point number
void appendStr(const char *data)
append a c-string
void appendInt(long data)
append a signed (+/-) number
void appendUInt(unsigned long data, uint8_t base=10)
append an ‘unsigned’ (only +) number