• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2018, The OpenThread Authors.
3  *  All rights reserved.
4  *
5  *  Redistribution and use in source and binary forms, with or without
6  *  modification, are permitted provided that the following conditions are met:
7  *  1. Redistributions of source code must retain the above copyright
8  *     notice, this list of conditions and the following disclaimer.
9  *  2. Redistributions in binary form must reproduce the above copyright
10  *     notice, this list of conditions and the following disclaimer in the
11  *     documentation and/or other materials provided with the distribution.
12  *  3. Neither the name of the copyright holder nor the
13  *     names of its contributors may be used to endorse or promote products
14  *     derived from this software without specific prior written permission.
15  *
16  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17  *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20  *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24  *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25  *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26  *  POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 /**
30  * @file
31  *   This file implements the OpenThread logging related APIs.
32  */
33 
34 #include "openthread-core-config.h"
35 
36 #include "instance/instance.hpp"
37 
38 using namespace ot;
39 
otLoggingGetLevel(void)40 otLogLevel otLoggingGetLevel(void) { return static_cast<otLogLevel>(Instance::GetLogLevel()); }
41 
42 #if OPENTHREAD_CONFIG_LOG_LEVEL_DYNAMIC_ENABLE
otLoggingSetLevel(otLogLevel aLogLevel)43 otError otLoggingSetLevel(otLogLevel aLogLevel)
44 {
45     Error error = kErrorNone;
46 
47     VerifyOrExit(aLogLevel <= kLogLevelDebg && aLogLevel >= kLogLevelNone, error = kErrorInvalidArgs);
48     Instance::SetLogLevel(static_cast<LogLevel>(aLogLevel));
49 
50 exit:
51     return error;
52 }
53 #endif
54 
55 static const char kPlatformModuleName[] = "Platform";
56 
otLogCritPlat(const char * aFormat,...)57 void otLogCritPlat(const char *aFormat, ...)
58 {
59 #if OT_SHOULD_LOG_AT(OT_LOG_LEVEL_CRIT) && OPENTHREAD_CONFIG_LOG_PLATFORM
60     va_list args;
61 
62     va_start(args, aFormat);
63     Logger::LogVarArgs(kPlatformModuleName, kLogLevelCrit, aFormat, args);
64     va_end(args);
65 #else
66     OT_UNUSED_VARIABLE(aFormat);
67     OT_UNUSED_VARIABLE(kPlatformModuleName);
68 #endif
69 }
70 
otLogWarnPlat(const char * aFormat,...)71 void otLogWarnPlat(const char *aFormat, ...)
72 {
73 #if OT_SHOULD_LOG_AT(OT_LOG_LEVEL_WARN) && OPENTHREAD_CONFIG_LOG_PLATFORM
74     va_list args;
75 
76     va_start(args, aFormat);
77     Logger::LogVarArgs(kPlatformModuleName, kLogLevelWarn, aFormat, args);
78     va_end(args);
79 #else
80     OT_UNUSED_VARIABLE(aFormat);
81 #endif
82 }
83 
otLogNotePlat(const char * aFormat,...)84 void otLogNotePlat(const char *aFormat, ...)
85 {
86 #if OT_SHOULD_LOG_AT(OT_LOG_LEVEL_NOTE) && OPENTHREAD_CONFIG_LOG_PLATFORM
87     va_list args;
88 
89     va_start(args, aFormat);
90     Logger::LogVarArgs(kPlatformModuleName, kLogLevelNote, aFormat, args);
91     va_end(args);
92 #else
93     OT_UNUSED_VARIABLE(aFormat);
94 #endif
95 }
96 
otLogInfoPlat(const char * aFormat,...)97 void otLogInfoPlat(const char *aFormat, ...)
98 {
99 #if OT_SHOULD_LOG_AT(OT_LOG_LEVEL_INFO) && OPENTHREAD_CONFIG_LOG_PLATFORM
100     va_list args;
101 
102     va_start(args, aFormat);
103     Logger::LogVarArgs(kPlatformModuleName, kLogLevelInfo, aFormat, args);
104     va_end(args);
105 #else
106     OT_UNUSED_VARIABLE(aFormat);
107 #endif
108 }
109 
otLogDebgPlat(const char * aFormat,...)110 void otLogDebgPlat(const char *aFormat, ...)
111 {
112 #if OT_SHOULD_LOG_AT(OT_LOG_LEVEL_DEBG) && OPENTHREAD_CONFIG_LOG_PLATFORM
113     va_list args;
114 
115     va_start(args, aFormat);
116     Logger::LogVarArgs(kPlatformModuleName, kLogLevelDebg, aFormat, args);
117     va_end(args);
118 #else
119     OT_UNUSED_VARIABLE(aFormat);
120 #endif
121 }
122 
otDumpCritPlat(const char * aText,const void * aData,uint16_t aDataLength)123 void otDumpCritPlat(const char *aText, const void *aData, uint16_t aDataLength)
124 {
125 #if OT_SHOULD_LOG_AT(OT_LOG_LEVEL_CRIT) && OPENTHREAD_CONFIG_LOG_PLATFORM && OPENTHREAD_CONFIG_LOG_PKT_DUMP
126     Logger::DumpInModule(kPlatformModuleName, kLogLevelCrit, aText, aData, aDataLength);
127 #else
128     OT_UNUSED_VARIABLE(aText);
129     OT_UNUSED_VARIABLE(aData);
130     OT_UNUSED_VARIABLE(aDataLength);
131 #endif
132 }
133 
otDumpWarnPlat(const char * aText,const void * aData,uint16_t aDataLength)134 void otDumpWarnPlat(const char *aText, const void *aData, uint16_t aDataLength)
135 {
136 #if OT_SHOULD_LOG_AT(OT_LOG_LEVEL_WARN) && OPENTHREAD_CONFIG_LOG_PLATFORM && OPENTHREAD_CONFIG_LOG_PKT_DUMP
137     Logger::DumpInModule(kPlatformModuleName, kLogLevelWarn, aText, aData, aDataLength);
138 #else
139     OT_UNUSED_VARIABLE(aText);
140     OT_UNUSED_VARIABLE(aData);
141     OT_UNUSED_VARIABLE(aDataLength);
142 #endif
143 }
144 
otDumpNotePlat(const char * aText,const void * aData,uint16_t aDataLength)145 void otDumpNotePlat(const char *aText, const void *aData, uint16_t aDataLength)
146 {
147 #if OT_SHOULD_LOG_AT(OT_LOG_LEVEL_NOTE) && OPENTHREAD_CONFIG_LOG_PLATFORM && OPENTHREAD_CONFIG_LOG_PKT_DUMP
148     Logger::DumpInModule(kPlatformModuleName, kLogLevelNote, aText, aData, aDataLength);
149 #else
150     OT_UNUSED_VARIABLE(aText);
151     OT_UNUSED_VARIABLE(aData);
152     OT_UNUSED_VARIABLE(aDataLength);
153 #endif
154 }
155 
otDumpInfoPlat(const char * aText,const void * aData,uint16_t aDataLength)156 void otDumpInfoPlat(const char *aText, const void *aData, uint16_t aDataLength)
157 {
158 #if OT_SHOULD_LOG_AT(OT_LOG_LEVEL_INFO) && OPENTHREAD_CONFIG_LOG_PLATFORM && OPENTHREAD_CONFIG_LOG_PKT_DUMP
159     Logger::DumpInModule(kPlatformModuleName, kLogLevelInfo, aText, aData, aDataLength);
160 #else
161     OT_UNUSED_VARIABLE(aText);
162     OT_UNUSED_VARIABLE(aData);
163     OT_UNUSED_VARIABLE(aDataLength);
164 #endif
165 }
166 
otDumpDebgPlat(const char * aText,const void * aData,uint16_t aDataLength)167 void otDumpDebgPlat(const char *aText, const void *aData, uint16_t aDataLength)
168 {
169 #if OT_SHOULD_LOG_AT(OT_LOG_LEVEL_DEBG) && OPENTHREAD_CONFIG_LOG_PLATFORM && OPENTHREAD_CONFIG_LOG_PKT_DUMP
170     Logger::DumpInModule(kPlatformModuleName, kLogLevelDebg, aText, aData, aDataLength);
171 #else
172     OT_UNUSED_VARIABLE(aText);
173     OT_UNUSED_VARIABLE(aData);
174     OT_UNUSED_VARIABLE(aDataLength);
175 #endif
176 }
177 
otLogPlat(otLogLevel aLogLevel,const char * aPlatModuleName,const char * aFormat,...)178 void otLogPlat(otLogLevel aLogLevel, const char *aPlatModuleName, const char *aFormat, ...)
179 {
180 #if OPENTHREAD_CONFIG_LOG_PLATFORM
181     va_list args;
182 
183     va_start(args, aFormat);
184     otLogPlatArgs(aLogLevel, aPlatModuleName, aFormat, args);
185     va_end(args);
186 #else
187     OT_UNUSED_VARIABLE(aLogLevel);
188     OT_UNUSED_VARIABLE(aPlatModuleName);
189     OT_UNUSED_VARIABLE(aFormat);
190 #endif
191 }
192 
otLogPlatArgs(otLogLevel aLogLevel,const char * aPlatModuleName,const char * aFormat,va_list aArgs)193 void otLogPlatArgs(otLogLevel aLogLevel, const char *aPlatModuleName, const char *aFormat, va_list aArgs)
194 {
195 #if OT_SHOULD_LOG && OPENTHREAD_CONFIG_LOG_PLATFORM
196     String<kMaxLogModuleNameLength> moduleName;
197 
198     OT_ASSERT(aLogLevel >= kLogLevelNone && aLogLevel <= kLogLevelDebg);
199 
200     moduleName.Append("P-%s", aPlatModuleName);
201     Logger::LogVarArgs(moduleName.AsCString(), static_cast<LogLevel>(aLogLevel), aFormat, aArgs);
202 #else
203     OT_UNUSED_VARIABLE(aLogLevel);
204     OT_UNUSED_VARIABLE(aPlatModuleName);
205     OT_UNUSED_VARIABLE(aFormat);
206     OT_UNUSED_VARIABLE(aArgs);
207 #endif
208 }
209 
otLogCli(otLogLevel aLogLevel,const char * aFormat,...)210 void otLogCli(otLogLevel aLogLevel, const char *aFormat, ...)
211 {
212 #if OT_SHOULD_LOG && OPENTHREAD_CONFIG_LOG_CLI
213     static const char kCliModuleName[] = "Cli";
214 
215     va_list args;
216 
217     OT_ASSERT(aLogLevel >= kLogLevelNone && aLogLevel <= kLogLevelDebg);
218     VerifyOrExit(aLogLevel >= kLogLevelNone && aLogLevel <= kLogLevelDebg);
219 
220     va_start(args, aFormat);
221     Logger::LogVarArgs(kCliModuleName, static_cast<LogLevel>(aLogLevel), aFormat, args);
222     va_end(args);
223 exit:
224 #else
225     OT_UNUSED_VARIABLE(aLogLevel);
226     OT_UNUSED_VARIABLE(aFormat);
227 #endif
228     return;
229 }
230 
otLogGenerateNextHexDumpLine(otLogHexDumpInfo * aInfo)231 otError otLogGenerateNextHexDumpLine(otLogHexDumpInfo *aInfo)
232 {
233     AssertPointerIsNotNull(aInfo);
234 
235     return GenerateNextHexDumpLine(*aInfo);
236 }
237