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