17494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 27494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall $License: 37494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall Copyright (C) 2011 InvenSense Corporation, All Rights Reserved. 47494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall $ 57494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 67494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 77494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 87494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * This file incorporates work covered by the following copyright and 97494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * permission notice: 107494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * 117494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Copyright (C) 2005 The Android Open Source Project 127494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * 137494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Licensed under the Apache License, Version 2.0 (the "License"); 147494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * you may not use this file except in compliance with the License. 157494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * You may obtain a copy of the License at 167494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * 177494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * http://www.apache.org/licenses/LICENSE-2.0 187494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * 197494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Unless required by applicable law or agreed to in writing, software 207494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * distributed under the License is distributed on an "AS IS" BASIS, 217494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 227494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * See the License for the specific language governing permissions and 237494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * limitations under the License. 247494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 257494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 267494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 277494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * C/C++ logging functions. See the logging documentation for API details. 287494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * 297494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * We'd like these to be available from C code (in case we import some from 307494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * somewhere), so this has a C interface. 317494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * 327494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * The output will be correct when the log file is shared between multiple 337494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * threads and/or multiple processes so long as the operating system 347494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * supports O_APPEND. These calls have mutex-protected data structures 357494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * and so are NOT reentrant. Do not use MPL_LOG in a signal handler. 367494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 377494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef _LIBS_CUTILS_MPL_LOG_H 387494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define _LIBS_CUTILS_MPL_LOG_H 397494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 408504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall#include <stdlib.h> 417494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#include <stdarg.h> 427494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 437494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef ANDROID 447494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef NDK_BUILD 457494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#include "log_macros.h" 467494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 477494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#include <utils/Log.h> /* For the LOG macro */ 487494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 497494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 507494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 517494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef __KERNEL__ 527494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#include <linux/kernel.h> 537494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 547494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 557494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef __cplusplus 567494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrallextern "C" { 577494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 587494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 598504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall 607494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* --------------------------------------------------------------------- */ 617494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 627494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 637494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Normally we strip MPL_LOGV (VERBOSE messages) from release builds. 647494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * You can modify this (for example with "#define MPL_LOG_NDEBUG 0" 657494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * at the top of your source file) to change that behavior. 667494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 677494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOG_NDEBUG 687494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef NDEBUG 697494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_NDEBUG 1 707494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 717494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_NDEBUG 0 727494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 737494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 747494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 757494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef __KERNEL__ 767494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_UNKNOWN MPL_LOG_VERBOSE 777494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_DEFAULT KERN_DEFAULT 787494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_VERBOSE KERN_CONT 797494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_DEBUG KERN_NOTICE 807494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_INFO KERN_INFO 817494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_WARN KERN_WARNING 827494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_ERROR KERN_ERR 837494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_SILENT MPL_LOG_VERBOSE 847494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 857494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 867494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall /* Based off the log priorities in android 877494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall /system/core/include/android/log.h */ 887494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_UNKNOWN (0) 897494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_DEFAULT (1) 907494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_VERBOSE (2) 917494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_DEBUG (3) 927494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_INFO (4) 937494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_WARN (5) 947494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_ERROR (6) 957494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_SILENT (8) 967494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 977494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 987494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 997494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 1007494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * This is the local tag used for the following simplified 1017494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * logging macros. You can change this preprocessor definition 1027494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * before using the other macros to change the tag. 1037494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 1047494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOG_TAG 1057494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef __KERNEL__ 1067494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_TAG 1077494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 1087494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_TAG NULL 1097494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1107494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1117494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 1127494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* --------------------------------------------------------------------- */ 1137494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 1147494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 1157494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Simplified macro to send a verbose log message using the current MPL_LOG_TAG. 1167494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 1177494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOGV 1187494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#if MPL_LOG_NDEBUG 1197494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef _WIN32 1207494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGV(fmt, ...) \ 1217494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall do { \ 1227494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall __pragma (warning(suppress : 4127 )) \ 1237494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall if (0) \ 1247494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall MPL_LOG(LOG_VERBOSE, MPL_LOG_TAG, fmt, ##__VA_ARGS__);\ 1257494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall __pragma (warning(suppress : 4127 )) \ 1267494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall } while (0) 1277494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 1287494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGV(fmt, ...) \ 1297494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall do { \ 1307494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall if (0) \ 1317494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall MPL_LOG(LOG_VERBOSE, MPL_LOG_TAG, fmt, ##__VA_ARGS__);\ 1327494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall } while (0) 1337494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1347494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 1357494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 1367494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGV(fmt, ...) MPL_LOG(LOG_VERBOSE, MPL_LOG_TAG, fmt, ##__VA_ARGS__) 1377494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1387494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1397494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 1407494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef CONDITION 1417494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define CONDITION(cond) ((cond) != 0) 1427494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1437494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 1447494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOGV_IF 1457494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#if MPL_LOG_NDEBUG 1467494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGV_IF(cond, fmt, ...) \ 1477494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall do { if (0) MPL_LOG(fmt, ##__VA_ARGS__); } while (0) 1487494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 1497494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGV_IF(cond, fmt, ...) \ 1507494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall ((CONDITION(cond)) \ 1517494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall ? MPL_LOG(LOG_VERBOSE, MPL_LOG_TAG, fmt, ##__VA_ARGS__) \ 1527494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall : (void)0) 1537494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1547494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1557494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 1567494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 1577494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Simplified macro to send a debug log message using the current MPL_LOG_TAG. 1587494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 1597494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOGD 1607494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGD(fmt, ...) MPL_LOG(LOG_DEBUG, MPL_LOG_TAG, fmt, ##__VA_ARGS__) 1617494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1627494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 1637494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOGD_IF 1647494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGD_IF(cond, fmt, ...) \ 1657494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall ((CONDITION(cond)) \ 1667494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall ? MPL_LOG(LOG_DEBUG, MPL_LOG_TAG, fmt, ##__VA_ARGS__) \ 1677494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall : (void)0) 1687494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1697494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 1707494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 1717494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Simplified macro to send an info log message using the current MPL_LOG_TAG. 1727494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 1737494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOGI 1747494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef __KERNEL__ 1757494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGI(fmt, ...) pr_info(KERN_INFO MPL_LOG_TAG fmt, ##__VA_ARGS__) 1767494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 1777494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGI(fmt, ...) MPL_LOG(LOG_INFO, MPL_LOG_TAG, fmt, ##__VA_ARGS__) 1787494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1797494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1807494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 1817494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOGI_IF 1827494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGI_IF(cond, fmt, ...) \ 1837494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall ((CONDITION(cond)) \ 1847494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall ? MPL_LOG(LOG_INFO, MPL_LOG_TAG, fmt, ##__VA_ARGS__) \ 1857494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall : (void)0) 1867494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1877494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 1887494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 1897494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Simplified macro to send a warning log message using the current MPL_LOG_TAG. 1907494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 1917494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOGW 1927494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef __KERNEL__ 1937494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGW(fmt, ...) printk(KERN_WARNING MPL_LOG_TAG fmt, ##__VA_ARGS__) 1947494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 1957494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGW(fmt, ...) MPL_LOG(LOG_WARN, MPL_LOG_TAG, fmt, ##__VA_ARGS__) 1967494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1977494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 1987494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 1997494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOGW_IF 2007494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGW_IF(cond, fmt, ...) \ 2017494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall ((CONDITION(cond)) \ 2027494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall ? MPL_LOG(LOG_WARN, MPL_LOG_TAG, fmt, ##__VA_ARGS__) \ 2037494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall : (void)0) 2047494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 2057494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 2067494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 2077494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Simplified macro to send an error log message using the current MPL_LOG_TAG. 2087494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 2097494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOGE 2107494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef __KERNEL__ 2117494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGE(fmt, ...) printk(KERN_ERR MPL_LOG_TAG fmt, ##__VA_ARGS__) 2127494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 2137494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGE(fmt, ...) MPL_LOG(LOG_ERROR, MPL_LOG_TAG, fmt, ##__VA_ARGS__) 2147494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 2157494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 2167494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 2177494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOGE_IF 2187494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOGE_IF(cond, fmt, ...) \ 2197494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall ((CONDITION(cond)) \ 2207494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall ? MPL_LOG(LOG_ERROR, MPL_LOG_TAG, fmt, ##__VA_ARGS__) \ 2217494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall : (void)0) 2227494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 2237494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 2247494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* --------------------------------------------------------------------- */ 2257494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 2267494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 2277494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Log a fatal error. If the given condition fails, this stops program 2287494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * execution like a normal assertion, but also generating the given message. 2297494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * It is NOT stripped from release builds. Note that the condition test 2307494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * is -inverted- from the normal assert() semantics. 2317494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 2327494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_ALWAYS_FATAL_IF(cond, fmt, ...) \ 2337494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall ((CONDITION(cond)) \ 2347494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall ? ((void)android_printAssert(#cond, MPL_LOG_TAG, \ 2357494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall fmt, ##__VA_ARGS__)) \ 2367494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall : (void)0) 2377494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 2387494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_ALWAYS_FATAL(fmt, ...) \ 2397494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall (((void)android_printAssert(NULL, MPL_LOG_TAG, fmt, ##__VA_ARGS__))) 2407494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 2417494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 2427494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Versions of MPL_LOG_ALWAYS_FATAL_IF and MPL_LOG_ALWAYS_FATAL that 2437494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * are stripped out of release builds. 2447494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 2457494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#if MPL_LOG_NDEBUG 2467494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_FATAL_IF(cond, fmt, ...) \ 2477494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall do { \ 2487494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall if (0) \ 2497494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall MPL_LOG_ALWAYS_FATAL_IF(cond, fmt, ##__VA_ARGS__); \ 2507494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall } while (0) 2517494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_FATAL(fmt, ...) \ 2527494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall do { \ 2537494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall if (0) \ 2547494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall MPL_LOG_ALWAYS_FATAL(fmt, ##__VA_ARGS__) \ 2557494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall } while (0) 2567494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 2577494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_FATAL_IF(cond, fmt, ...) \ 2587494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall MPL_LOG_ALWAYS_FATAL_IF(cond, fmt, ##__VA_ARGS__) 2597494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_FATAL(fmt, ...) \ 2607494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall MPL_LOG_ALWAYS_FATAL(fmt, ##__VA_ARGS__) 2617494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 2627494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 2637494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 2647494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Assertion that generates a log message when the assertion fails. 2657494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Stripped out of release builds. Uses the current MPL_LOG_TAG. 2667494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 2677494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_ASSERT(cond, fmt, ...) \ 2687494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall MPL_LOG_FATAL_IF(!(cond), fmt, ##__VA_ARGS__) 2697494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 2707494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* --------------------------------------------------------------------- */ 2717494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 2727494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 2737494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Basic log message macro. 2747494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * 2757494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Example: 2767494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * MPL_LOG(MPL_LOG_WARN, NULL, "Failed with error %d", errno); 2777494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * 2787494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * The second argument may be NULL or "" to indicate the "global" tag. 2797494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 2807494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOG 2817494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG(priority, tag, fmt, ...) \ 2827494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall MPL_LOG_PRI(priority, tag, fmt, ##__VA_ARGS__) 2837494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 2847494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 2857494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 2867494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Log macro that allows you to specify a number for the priority. 2877494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 2887494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOG_PRI 2897494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef ANDROID 2907494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_PRI(priority, tag, fmt, ...) \ 2918504ee554e5ca7014b3160b1cbeb4506e231338bJP Abgrall ALOG(priority, tag, fmt, ##__VA_ARGS__) 2927494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#elif defined __KERNEL__ 2937494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_PRI(priority, tag, fmt, ...) \ 2947494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall pr_debug(MPL_##priority tag fmt, ##__VA_ARGS__) 2957494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 2967494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_PRI(priority, tag, fmt, ...) \ 2977494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall _MLPrintLog(MPL_##priority, tag, fmt, ##__VA_ARGS__) 2987494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 2997494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 3007494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 3017494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 3027494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * Log macro that allows you to pass in a varargs ("args" is a va_list). 3037494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 3047494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef MPL_LOG_PRI_VA 3057494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef ANDROID 3067494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_PRI_VA(priority, tag, fmt, args) \ 3077494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall android_vprintLog(priority, NULL, tag, fmt, args) 3087494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#elif defined __KERNEL__ 3097494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* not allowed in the Kernel because there is no dev_dbg that takes a va_list */ 3107494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 3117494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define MPL_LOG_PRI_VA(priority, tag, fmt, args) \ 3127494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall _MLPrintVaLog(priority, NULL, tag, fmt, args) 3137494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 3147494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 3157494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 3167494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* --------------------------------------------------------------------- */ 3177494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 3187494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* 3197494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * =========================================================================== 3207494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * 3217494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall * The stuff in the rest of this file should not be used directly. 3227494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall */ 3237494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 3247494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifndef ANDROID 3257494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrallint _MLPrintLog(int priority, const char *tag, const char *fmt, ...); 3267494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrallint _MLPrintVaLog(int priority, const char *tag, const char *fmt, va_list args); 3277494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* Final implementation of actual writing to a character device */ 3287494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrallint _MLWriteLog(const char *buf, int buflen); 3297494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 3307494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 3317494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrallstatic inline void __print_result_location(int result, 3327494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall const char *file, 3337494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall const char *func, int line) 3347494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall{ 3357494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall MPL_LOGE("%s|%s|%d returning %d\n", file, func, line, result); 3367494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall} 3377494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 3387494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef _WIN32 3397494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall/* The pragma removes warning about expression being constant */ 3407494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define LOG_RESULT_LOCATION(condition) \ 3417494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall do { \ 3427494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall __print_result_location((int)(condition), __FILE__, \ 3437494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall __func__, __LINE__); \ 3447494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall __pragma (warning(suppress : 4127 )) \ 3457494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall } while (0) 3467494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#else 3477494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define LOG_RESULT_LOCATION(condition) \ 3487494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall do { \ 3497494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall __print_result_location((int)(condition), __FILE__, \ 3507494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall __func__, __LINE__); \ 3517494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall } while (0) 3527494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 3537494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 3547494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 3557494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#define INV_ERROR_CHECK(r_1329) \ 35633ce91b37062fa63af192f5643de93f3beebe854JP Abgrall if (r_1329) { \ 35733ce91b37062fa63af192f5643de93f3beebe854JP Abgrall LOG_RESULT_LOCATION(r_1329); \ 35833ce91b37062fa63af192f5643de93f3beebe854JP Abgrall return r_1329; \ 3597494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall } 3607494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall 3617494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#ifdef __cplusplus 3627494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall} 3637494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif 3647494581689b0fc1d8addd016b1c92d74d01f5ad4JP Abgrall#endif /* _LIBS_CUTILS_MPL_LOG_H */ 365