Bluenet  5.7.0
Bluenet, firmware for nRF52 smart home devices
Loading...
Searching...
No Matches
cs_LogBinaryProtocol.h
Go to the documentation of this file.
1/*
2 * Author: Crownstone Team
3 * Copyright: Crownstone (https://crownstone.rocks)
4 * Date: Sep 1, 2022
5 * License: LGPLv3+, Apache License 2.0, and/or MIT (triple-licensed)
6 */
7
8#pragma once
9
11
20#define _log(level, addNewLine, fmt, ...) \
21 if (level <= SERIAL_VERBOSITY) { \
22 cs_log_args(fileNameHash(__FILE__, sizeof(__FILE__)), __LINE__, level, addNewLine, fmt, ##__VA_ARGS__); \
23 }
24
25// No manual formatting: uses default format based on element type.
26#define _logArray0(level, addNewLine, pointer, size) \
27 if (level <= SERIAL_VERBOSITY) { \
28 cs_log_array( \
29 fileNameHash(__FILE__, sizeof(__FILE__)), \
30 __LINE__, \
31 level, \
32 addNewLine, \
33 false, \
34 pointer, \
35 size, \
36 "[", \
37 "]", \
38 ", "); \
39 }
40
41// Manual element format, but default start and end format.
42#define _logArray1(level, addNewLine, pointer, size, elementFmt) \
43 if (level <= SERIAL_VERBOSITY) { \
44 cs_log_array( \
45 fileNameHash(__FILE__, sizeof(__FILE__)), \
46 __LINE__, \
47 level, \
48 addNewLine, \
49 false, \
50 pointer, \
51 size, \
52 "[", \
53 "]", \
54 ", ", \
55 elementFmt); \
56 }
57
58// Manual start and end format. Default element format, based on element type.
59#define _logArray2(level, addNewLine, pointer, size, startFmt, endFmt) \
60 if (level <= SERIAL_VERBOSITY) { \
61 cs_log_array( \
62 fileNameHash(__FILE__, sizeof(__FILE__)), \
63 __LINE__, \
64 level, \
65 addNewLine, \
66 false, \
67 pointer, \
68 size, \
69 startFmt, \
70 endFmt, \
71 ", "); \
72 }
73
74// Manual start and end format. Default element separation format.
75#define _logArray3(level, addNewLine, pointer, size, startFmt, endFmt, elementFmt) \
76 if (level <= SERIAL_VERBOSITY) { \
77 cs_log_array( \
78 fileNameHash(__FILE__, sizeof(__FILE__)), \
79 __LINE__, \
80 level, \
81 addNewLine, \
82 false, \
83 pointer, \
84 size, \
85 startFmt, \
86 endFmt, \
87 ", ", \
88 elementFmt); \
89 }
90
91// Manual format.
92#define _logArray4(level, addNewLine, pointer, size, startFmt, endFmt, elementFmt, seperationFmt) \
93 if (level <= SERIAL_VERBOSITY) { \
94 cs_log_array( \
95 fileNameHash(__FILE__, sizeof(__FILE__)), \
96 __LINE__, \
97 level, \
98 addNewLine, \
99 false, \
100 pointer, \
101 size, \
102 startFmt, \
103 endFmt, \
104 seperationFmt, \
105 elementFmt); \
106 }
107
108// Manual format.
109#define _logArray5(level, addNewLine, pointer, size, startFmt, endFmt, elementFmt, seperationFmt, reverse) \
110 if (level <= SERIAL_VERBOSITY) { \
111 cs_log_array( \
112 fileNameHash(__FILE__, sizeof(__FILE__)), \
113 __LINE__, \
114 level, \
115 addNewLine, \
116 reverse, \
117 pointer, \
118 size, \
119 startFmt, \
120 endFmt, \
121 seperationFmt, \
122 elementFmt); \
123 }
124
125// Helper function that returns argument 5 (which is one of the _logArrayX definitions).
126#define _logArrayGetArg5(arg0, arg1, arg2, arg3, arg4, arg5, arg6, ...) arg6
127
128#define _logArray(level, addNewLine, pointer, ...) \
129 _logArrayGetArg5(__VA_ARGS__, _logArray5, _logArray4, _logArray3, _logArray2, _logArray1, _logArray0)( \
130 level, addNewLine, pointer, __VA_ARGS__)