User | Revision | Line number | New contents of line |
paul_harris77 |
0:23f7bb983ae0
|
1
|
//*********************************************************************************************************************
|
paul_harris77 |
0:23f7bb983ae0
|
2
|
// LOGGER LIBRARY - HEADER FILE
|
paul_harris77 |
0:23f7bb983ae0
|
3
|
// PAUL HARRIS, OCTOBER 2016
|
paul_harris77 |
0:23f7bb983ae0
|
4
|
// *********************************************************************************************************************
|
paul_harris77 |
0:23f7bb983ae0
|
5
|
|
paul_harris77 |
0:23f7bb983ae0
|
6
|
#ifndef LOGGER_H
|
paul_harris77 |
0:23f7bb983ae0
|
7
|
#define LOGGER_H
|
paul_harris77 |
0:23f7bb983ae0
|
8
|
|
paul_harris77 |
0:23f7bb983ae0
|
9
|
#include "mbed.h"
|
paul_harris77 |
0:23f7bb983ae0
|
10
|
#include <vector>
|
paul_harris77 |
0:23f7bb983ae0
|
11
|
#include <stdio.h>
|
paul_harris77 |
0:23f7bb983ae0
|
12
|
#include <stdarg.h>
|
paul_harris77 |
0:23f7bb983ae0
|
13
|
|
paul_harris77 |
0:23f7bb983ae0
|
14
|
#include "logger_defs.h"
|
paul_harris77 |
0:23f7bb983ae0
|
15
|
#include "MODSERIAL.h"
|
paul_harris77 |
0:23f7bb983ae0
|
16
|
|
paul_harris77 |
0:23f7bb983ae0
|
17
|
|
paul_harris77 |
0:23f7bb983ae0
|
18
|
class cLogger{
|
paul_harris77 |
0:23f7bb983ae0
|
19
|
public:
|
paul_harris77 |
0:23f7bb983ae0
|
20
|
//***********Begin constructor************
|
paul_harris77 |
0:23f7bb983ae0
|
21
|
cLogger(MODSERIAL* std_out);
|
paul_harris77 |
0:23f7bb983ae0
|
22
|
//***********End constructor************
|
paul_harris77 |
0:23f7bb983ae0
|
23
|
|
paul_harris77 |
0:23f7bb983ae0
|
24
|
//***********Begin Public member functions************
|
paul_harris77 |
0:23f7bb983ae0
|
25
|
|
paul_harris77 |
0:23f7bb983ae0
|
26
|
//Registers a log area with the logger with specified default log level and prefix
|
paul_harris77 |
0:23f7bb983ae0
|
27
|
void registerLogArea(eLogArea area, eLogLevel defaultLevel, const char* log_prefix);
|
paul_harris77 |
0:23f7bb983ae0
|
28
|
//Log the specified formatted log text given the text's specified area and level (printf like formatting variable arguments)
|
paul_harris77 |
0:23f7bb983ae0
|
29
|
void log(eLogArea area, eLogLevel text_level, char* log_text, ...);
|
paul_harris77 |
0:23f7bb983ae0
|
30
|
//Log plain formatted text, bypassing any logger level control and without an area prefix (warning: will always be logged!)
|
paul_harris77 |
0:23f7bb983ae0
|
31
|
void plainText(char* log_text, ...);
|
paul_harris77 |
0:23f7bb983ae0
|
32
|
//Print a new line
|
paul_harris77 |
0:23f7bb983ae0
|
33
|
void newLine(void);
|
paul_harris77 |
0:23f7bb983ae0
|
34
|
//Set the specified log area level
|
paul_harris77 |
0:23f7bb983ae0
|
35
|
void setLogLevel(eLogArea area, eLogLevel level);
|
paul_harris77 |
0:23f7bb983ae0
|
36
|
//Set all log areas to the specified log level
|
paul_harris77 |
0:23f7bb983ae0
|
37
|
void setAllAreaLevels(eLogLevel level);
|
paul_harris77 |
0:23f7bb983ae0
|
38
|
//Set the specified log area text prefix
|
paul_harris77 |
0:23f7bb983ae0
|
39
|
void setLogPrefix(eLogArea area, const char* log_prefix);
|
paul_harris77 |
0:23f7bb983ae0
|
40
|
|
paul_harris77 |
0:23f7bb983ae0
|
41
|
//***********End Public member functions************
|
paul_harris77 |
0:23f7bb983ae0
|
42
|
|
paul_harris77 |
0:23f7bb983ae0
|
43
|
private:
|
paul_harris77 |
0:23f7bb983ae0
|
44
|
|
paul_harris77 |
0:23f7bb983ae0
|
45
|
//***********Begin Private member functions************
|
paul_harris77 |
0:23f7bb983ae0
|
46
|
|
paul_harris77 |
0:23f7bb983ae0
|
47
|
//Returns the index in the log_list of the given log area
|
paul_harris77 |
0:23f7bb983ae0
|
48
|
int getLogListIndex(eLogArea area);
|
paul_harris77 |
0:23f7bb983ae0
|
49
|
|
paul_harris77 |
0:23f7bb983ae0
|
50
|
//Print formatted log text with its associated log level prefix
|
paul_harris77 |
0:23f7bb983ae0
|
51
|
void printf(eLogArea area, char* log_text, va_list args);
|
paul_harris77 |
0:23f7bb983ae0
|
52
|
|
paul_harris77 |
0:23f7bb983ae0
|
53
|
//***********End Private member functions************
|
paul_harris77 |
0:23f7bb983ae0
|
54
|
|
paul_harris77 |
0:23f7bb983ae0
|
55
|
|
paul_harris77 |
0:23f7bb983ae0
|
56
|
//***********Begin Private member variables************
|
paul_harris77 |
0:23f7bb983ae0
|
57
|
|
paul_harris77 |
0:23f7bb983ae0
|
58
|
//Pointer to the MODSERIAL object to use for log output
|
paul_harris77 |
0:23f7bb983ae0
|
59
|
MODSERIAL* pStdOut;
|
paul_harris77 |
0:23f7bb983ae0
|
60
|
|
paul_harris77 |
0:23f7bb983ae0
|
61
|
//Mutex for making MODSERIAL printf thread safe
|
paul_harris77 |
0:23f7bb983ae0
|
62
|
Mutex stdio_mutex;
|
paul_harris77 |
0:23f7bb983ae0
|
63
|
|
paul_harris77 |
0:23f7bb983ae0
|
64
|
//Structure to hold log areas and their associated levels/prefixes
|
paul_harris77 |
0:23f7bb983ae0
|
65
|
struct log_struct
|
paul_harris77 |
0:23f7bb983ae0
|
66
|
{
|
paul_harris77 |
0:23f7bb983ae0
|
67
|
eLogArea area;
|
paul_harris77 |
0:23f7bb983ae0
|
68
|
eLogLevel level;
|
paul_harris77 |
0:23f7bb983ae0
|
69
|
const char* prefix;
|
paul_harris77 |
0:23f7bb983ae0
|
70
|
};
|
paul_harris77 |
0:23f7bb983ae0
|
71
|
|
paul_harris77 |
0:23f7bb983ae0
|
72
|
//Type def of log_struct structure
|
paul_harris77 |
0:23f7bb983ae0
|
73
|
typedef struct log_struct log_t;
|
paul_harris77 |
0:23f7bb983ae0
|
74
|
|
paul_harris77 |
0:23f7bb983ae0
|
75
|
//Vector containers to hold vector of log area structures
|
paul_harris77 |
0:23f7bb983ae0
|
76
|
std::vector<log_t> log_list;
|
paul_harris77 |
0:23f7bb983ae0
|
77
|
|
paul_harris77 |
0:23f7bb983ae0
|
78
|
//***********End Private member variables************
|
paul_harris77 |
0:23f7bb983ae0
|
79
|
|
paul_harris77 |
0:23f7bb983ae0
|
80
|
};
|
paul_harris77 |
0:23f7bb983ae0
|
81
|
|
paul_harris77 |
0:23f7bb983ae0
|
82
|
//Globally declare a logger object for use in all modules. To be created/defined in main.cpp.
|
paul_harris77 |
0:23f7bb983ae0
|
83
|
extern cLogger logger;
|
paul_harris77 |
0:23f7bb983ae0
|
84
|
#endif |