libDaisy
Hardware Library for Daisy
Loading...
Searching...
No Matches
logger.h
Go to the documentation of this file.
1#pragma once
2#ifndef __DSY_LOGGER_H__
3#define __DSY_LOGGER_H__
4
5#include <cmath>
6#include <cstdarg>
7#include <cstdio>
8#include <type_traits>
9#include "logger_impl.h"
10
11namespace daisy
12{
29#define LOGGER_NEWLINE "\r\n"
30#define LOGGER_BUFFER 128
35#define PPCAT_NX(A, B) A##B
36#define PPCAT(A, B) PPCAT_NX(A, B)
37#define STRINGIZE_NX(A) #A
38#define STRINGIZE(A) STRINGIZE_NX(A)
43// clang-format off
44#define FLT_FMT(_n) STRINGIZE(PPCAT(PPCAT(%c%d.%0, _n), d))
45// clang-format on
46
50#define FLT_VAR(_n, _x) \
51 (_x < 0 ? '-' : ' '), (int)(abs(_x)), \
52 (int)(((abs(_x)) - (int)(abs(_x))) * pow(10, (_n)))
53
56#define FLT_FMT3 FLT_FMT(3)
59#define FLT_VAR3(_x) FLT_VAR(3, _x)
60
61 // End logging_macros
62
71template <LoggerDestination dest = LOGGER_INTERNAL>
72class Logger
73{
74 public:
77 Logger() {}
78
81 static void Print(const char* format, ...);
82
85 static void PrintLine(const char* format, ...);
86
91 static void StartLog(bool wait_for_pc = false);
92
95 static void PrintV(const char* format, va_list va);
96
99 static void PrintLineV(const char* format, va_list va);
100
104 template <LoggerDestination D = dest>
105 static std::enable_if_t<D == LOGGER_UART>
107 {
108 impl_.Configure(cfg);
109 }
110
111
112 protected:
121
124 static void TransmitSync(const void* buffer, size_t bytes)
125 {
126 while(false == impl_.Transmit(buffer, bytes)) {}
127 }
128
131 static void TransmitBuf();
132
135 static void AppendNewLine();
136
139 static constexpr size_t NewLineSeqLength()
140 {
141 size_t len = 0;
142 constexpr const char* nl = LOGGER_NEWLINE;
143 while(nl[len] != '\0')
144 {
145 len++;
146 }
147 return len;
148 }
149
153 static char tx_buff_[LOGGER_BUFFER];
154 static size_t tx_ptr_;
155 static size_t pc_sync_;
157};
158
166template <LoggerDestination dest>
168
171template <LoggerDestination dest>
172size_t Logger<dest>::pc_sync_ = LOGGER_SYNC_OUT;
173
174template <LoggerDestination dest>
175size_t Logger<dest>::tx_ptr_ = 0;
176
177template <LoggerDestination dest>
179
180 // end logger_statics
181
184template <>
186{
187 public:
188 Logger() {}
189 static void Print(const char* format, ...) {}
190 static void PrintLine(const char* format, ...) {}
191 static void StartLog(bool wait_for_pc = false) {}
192 static void PrintV(const char* format, va_list va) {}
193 static void PrintLineV(const char* format, va_list va) {}
194};
195
197} // namespace daisy
198
199#endif // __DSY_LOGGER_H__
static void PrintLineV(const char *format, va_list va)
Definition logger.h:193
Logger()
Definition logger.h:188
static void Print(const char *format,...)
Definition logger.h:189
static void StartLog(bool wait_for_pc=false)
Definition logger.h:191
static void PrintV(const char *format, va_list va)
Definition logger.h:192
static void PrintLine(const char *format,...)
Definition logger.h:190
Interface for simple USB logging.
Definition logger.h:73
static void AppendNewLine()
static void PrintLineV(const char *format, va_list va)
static std::enable_if_t< D==LOGGER_UART > Configure(const LoggerImpl< LOGGER_UART >::Config cfg)
Definition logger.h:106
Logger()
Definition logger.h:77
static void TransmitBuf()
static constexpr size_t NewLineSeqLength()
Definition logger.h:139
static void PrintV(const char *format, va_list va)
static void StartLog(bool wait_for_pc=false)
static void Print(const char *format,...)
LoggerConsts
Definition logger.h:116
@ LOGGER_SYNC_OUT
Definition logger.h:117
@ LOGGER_SYNC_IN
Definition logger.h:118
static void PrintLine(const char *format,...)
static void TransmitSync(const void *buffer, size_t bytes)
Definition logger.h:124
Logging I/O underlying implementation.
Definition logger_impl.h:32
static size_t tx_ptr_
Definition logger.h:154
static LoggerImpl< dest > impl_
Definition logger.h:156
static size_t pc_sync_
Definition logger.h:155
static char tx_buff_[128]
Definition logger.h:153
#define LOGGER_NEWLINE
Definition logger.h:29
#define LOGGER_BUFFER
Definition logger.h:30
Hardware defines and helpers for daisy field platform.
Definition index.h:2
@ LOGGER_NONE
Definition logger_impl.h:19