1a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol/*
2a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol * Copyright (C) 2017 The Android Open Source Project
3a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol *
4a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol * Licensed under the Apache License, Version 2.0 (the "License");
5a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol * you may not use this file except in compliance with the License.
6a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol * You may obtain a copy of the License at
7a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol *
8a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol *      http://www.apache.org/licenses/LICENSE-2.0
9a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol *
10a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol * Unless required by applicable law or agreed to in writing, software
11a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol * distributed under the License is distributed on an "AS IS" BASIS,
12a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol * See the License for the specific language governing permissions and
14a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol * limitations under the License.
15a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol */
16a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol
17a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#ifndef CHRE_UTIL_NANOAPP_LOG_H_
18a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#define CHRE_UTIL_NANOAPP_LOG_H_
19a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol
20a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol/**
21a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol * @file
22a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol * Logging macros for nanoapps. These macros allow injecting a LOG_TAG and
23a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol * compiling nanoapps with a minimum logging level (that is different than CHRE
24a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol * itself).
25a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol *
26a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol * The typical format for the LOG_TAG macro is: "[AppName]"
27a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol */
28a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol
29a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#include "chre/util/log_common.h"
30a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol
31a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#ifndef NANOAPP_MINIMUM_LOG_LEVEL
32a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#error "NANOAPP_MINIMUM_LOG_LEVEL must be defined"
33a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#endif  // NANOAPP_MINIMUM_LOG_LEVEL
34a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol
35a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol/*
36a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol * Supply a stub implementation of the LOGx macros when the build is
37a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol * configured with a minimum logging level that is above the requested level.
38a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol * Otherwise just map into the chreLog function with the appropriate level.
39a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol */
40a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol
41a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#if NANOAPP_MINIMUM_LOG_LEVEL >= CHRE_LOG_LEVEL_ERROR
42a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#define LOGE(fmt, ...) chreLog(CHRE_LOG_ERROR, LOG_TAG " " fmt, ##__VA_ARGS__)
43a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#else
44a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#define LOGE(fmt, ...) chreLogNull(fmt, ##__VA_ARGS__)
45a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#endif
46a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol
47a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#if CHRE_MINIMUM_LOG_LEVEL >= CHRE_LOG_LEVEL_WARN
48a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#define LOGW(fmt, ...) chreLog(CHRE_LOG_WARN, LOG_TAG " " fmt, ##__VA_ARGS__)
49a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#else
50a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#define LOGW(fmt, ...) chreLogNull(fmt, ##__VA_ARGS__)
51a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#endif
52a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol
53a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#if CHRE_MINIMUM_LOG_LEVEL >= CHRE_LOG_LEVEL_INFO
54a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#define LOGI(fmt, ...) chreLog(CHRE_LOG_INFO, LOG_TAG " " fmt, ##__VA_ARGS__)
55a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#else
56a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#define LOGI(fmt, ...) chreLogNull(fmt, ##__VA_ARGS__)
57a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#endif
58a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol
59a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#if CHRE_MINIMUM_LOG_LEVEL >= CHRE_LOG_LEVEL_DEBUG
60a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#define LOGD(fmt, ...) chreLog(CHRE_LOG_DEBUG, LOG_TAG " " fmt, ##__VA_ARGS__)
61a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#else
62a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#define LOGD(fmt, ...) chreLogNull(fmt, ##__VA_ARGS__)
63a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#endif
64a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol
65a16406ba1a734f21f36a4b0f64b23b062644b6e2Andrew Rossignol#endif  // CHRE_UTIL_NANOAPP_LOG_H_
66