1010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 2010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Copyright (C) 2005 The Android Open Source Project 3010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * 4010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License"); 5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * you may not use this file except in compliance with the License. 6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * You may obtain a copy of the License at 7010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * 8010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * http://www.apache.org/licenses/LICENSE-2.0 9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * 10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Unless required by applicable law or agreed to in writing, software 11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS, 12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * See the License for the specific language governing permissions and 14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * limitations under the License. 15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// 18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// C/C++ logging functions. See the logging documentation for API details. 19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// 20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// We'd like these to be available from C code (in case we import some from 21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// somewhere), so this has a C interface. 22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// 23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// The output will be correct when the log file is shared between multiple 24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// threads and/or multiple processes so long as the operating system 25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// supports O_APPEND. These calls have mutex-protected data structures 26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// and so are NOT reentrant. Do not use LOG in a signal handler. 27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// 28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef _LIBS_LOG_LOG_H 29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define _LIBS_LOG_LOG_H 30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <stdio.h> 32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <time.h> 33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <sys/types.h> 34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <unistd.h> 35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifdef HAVE_PTHREADS 36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <pthread.h> 37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <stdarg.h> 39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifdef ANDROID 41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <log/uio.h> 42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <log/logd.h> 43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#else 44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <android/log.h> 45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifdef __cplusplus 48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)extern "C" { 49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// --------------------------------------------------------------------- 52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Normally we strip ALOGV (VERBOSE messages) from release builds. 55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * You can modify this (for example with "#define LOG_NDEBUG 0" 56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * at the top of your source file) to change that behavior. 57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef LOG_NDEBUG 59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifdef NDEBUG 60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define LOG_NDEBUG 1 61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#else 62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define LOG_NDEBUG 0 63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * This is the local tag used for the following simplified 68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * logging macros. You can change this preprocessor definition 69010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * before using the other macros to change the tag. 70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 71010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef LOG_TAG 72010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define LOG_TAG NULL 73010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 74010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 75010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// --------------------------------------------------------------------- 76010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 78010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Simplified macro to send a verbose log message using the current LOG_TAG. 79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 80010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef ALOGV 81010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if LOG_NDEBUG 82010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define ALOGV(...) ((void)0) 83010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#else 84010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define ALOGV(...) ((void)ALOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__)) 85010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 86010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 88010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define CONDITION(cond) (__builtin_expect((cond)!=0, 0)) 89010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 90010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef ALOGV_IF 91010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if LOG_NDEBUG 92010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define ALOGV_IF(cond, ...) ((void)0) 93010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#else 94010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define ALOGV_IF(cond, ...) \ 95010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ( (CONDITION(cond)) \ 96010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ? ((void)ALOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__)) \ 97010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : (void)0 ) 98010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 99010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 100010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 101010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 102010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Simplified macro to send a debug log message using the current LOG_TAG. 103010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 104010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef ALOGD 105010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define ALOGD(...) ((void)ALOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__)) 106010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 107010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 108010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef ALOGD_IF 109010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define ALOGD_IF(cond, ...) \ 110010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ( (CONDITION(cond)) \ 111010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ? ((void)ALOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__)) \ 112010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : (void)0 ) 113010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 114010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 115010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 116010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Simplified macro to send an info log message using the current LOG_TAG. 117010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 118010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef ALOGI 119010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define ALOGI(...) ((void)ALOG(LOG_INFO, LOG_TAG, __VA_ARGS__)) 120010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 121010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 122010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef ALOGI_IF 123010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define ALOGI_IF(cond, ...) \ 124010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ( (CONDITION(cond)) \ 125010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ? ((void)ALOG(LOG_INFO, LOG_TAG, __VA_ARGS__)) \ 126010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : (void)0 ) 127010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 128010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 129010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 130010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Simplified macro to send a warning log message using the current LOG_TAG. 131010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 132010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef ALOGW 133010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define ALOGW(...) ((void)ALOG(LOG_WARN, LOG_TAG, __VA_ARGS__)) 134010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 135010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 136010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef ALOGW_IF 137010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define ALOGW_IF(cond, ...) \ 138010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ( (CONDITION(cond)) \ 139010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ? ((void)ALOG(LOG_WARN, LOG_TAG, __VA_ARGS__)) \ 140010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : (void)0 ) 141010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 142010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 143010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 144010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Simplified macro to send an error log message using the current LOG_TAG. 145010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 146010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef ALOGE 147010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define ALOGE(...) ((void)ALOG(LOG_ERROR, LOG_TAG, __VA_ARGS__)) 148010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 149010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 150010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef ALOGE_IF 151010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define ALOGE_IF(cond, ...) \ 152010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ( (CONDITION(cond)) \ 153010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ? ((void)ALOG(LOG_ERROR, LOG_TAG, __VA_ARGS__)) \ 154010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : (void)0 ) 155010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 156010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 157010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// --------------------------------------------------------------------- 158010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 159010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 160010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Conditional based on whether the current LOG_TAG is enabled at 161010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * verbose priority. 162010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 163010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef IF_ALOGV 164010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if LOG_NDEBUG 165010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define IF_ALOGV() if (false) 166010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#else 167010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define IF_ALOGV() IF_ALOG(LOG_VERBOSE, LOG_TAG) 168010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 169010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 170010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 171010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 172010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Conditional based on whether the current LOG_TAG is enabled at 173010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * debug priority. 174010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 175010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef IF_ALOGD 176010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define IF_ALOGD() IF_ALOG(LOG_DEBUG, LOG_TAG) 177010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 178010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 179010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 180010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Conditional based on whether the current LOG_TAG is enabled at 181010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * info priority. 182010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 183010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef IF_ALOGI 184010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define IF_ALOGI() IF_ALOG(LOG_INFO, LOG_TAG) 185010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 186010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 187010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 188010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Conditional based on whether the current LOG_TAG is enabled at 189010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * warn priority. 190010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 191010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef IF_ALOGW 192010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define IF_ALOGW() IF_ALOG(LOG_WARN, LOG_TAG) 193010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 194010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 195010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 196010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Conditional based on whether the current LOG_TAG is enabled at 197010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * error priority. 198010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 199010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef IF_ALOGE 200010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define IF_ALOGE() IF_ALOG(LOG_ERROR, LOG_TAG) 201010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 202010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 203010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 204010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// --------------------------------------------------------------------- 205010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 206010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 207010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Simplified macro to send a verbose system log message using the current LOG_TAG. 208010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 209010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef SLOGV 210010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if LOG_NDEBUG 211010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define SLOGV(...) ((void)0) 212010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#else 213010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define SLOGV(...) ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__)) 214010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 215010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 216010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 217010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define CONDITION(cond) (__builtin_expect((cond)!=0, 0)) 218010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 219010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef SLOGV_IF 220010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if LOG_NDEBUG 221010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define SLOGV_IF(cond, ...) ((void)0) 222010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#else 223010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define SLOGV_IF(cond, ...) \ 224010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ( (CONDITION(cond)) \ 225010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ? ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__)) \ 226010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : (void)0 ) 227010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 228010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 229010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 230010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 231010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Simplified macro to send a debug system log message using the current LOG_TAG. 232010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 233010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef SLOGD 234010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define SLOGD(...) ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)) 235010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 236010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 237010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef SLOGD_IF 238010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define SLOGD_IF(cond, ...) \ 239010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ( (CONDITION(cond)) \ 240010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ? ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)) \ 241010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : (void)0 ) 242010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 243010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 244010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 245010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Simplified macro to send an info system log message using the current LOG_TAG. 246010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 247010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef SLOGI 248010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define SLOGI(...) ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)) 249010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 250010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 251010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef SLOGI_IF 252010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define SLOGI_IF(cond, ...) \ 253010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ( (CONDITION(cond)) \ 254010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ? ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)) \ 255010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : (void)0 ) 256010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 257010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 258010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 259010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Simplified macro to send a warning system log message using the current LOG_TAG. 260010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 261010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef SLOGW 262010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define SLOGW(...) ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__)) 263010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 264010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 265010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef SLOGW_IF 266010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define SLOGW_IF(cond, ...) \ 267010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ( (CONDITION(cond)) \ 268010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ? ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__)) \ 269010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : (void)0 ) 270010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 271010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 272010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 273010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Simplified macro to send an error system log message using the current LOG_TAG. 274010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 275010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef SLOGE 276010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define SLOGE(...) ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)) 277010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 278010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 279010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef SLOGE_IF 280010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define SLOGE_IF(cond, ...) \ 281010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ( (CONDITION(cond)) \ 282010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ? ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)) \ 283010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : (void)0 ) 284010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 285010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 286010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// --------------------------------------------------------------------- 287010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 288010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 289010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Simplified macro to send a verbose radio log message using the current LOG_TAG. 290010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 291010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef RLOGV 292010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if LOG_NDEBUG 293010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define RLOGV(...) ((void)0) 294010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#else 295010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define RLOGV(...) ((void)__android_log_buf_print(LOG_ID_RADIO, ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__)) 296010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 297010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 298010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 299010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define CONDITION(cond) (__builtin_expect((cond)!=0, 0)) 300010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 301010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef RLOGV_IF 302010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if LOG_NDEBUG 303010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define RLOGV_IF(cond, ...) ((void)0) 304010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#else 305010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define RLOGV_IF(cond, ...) \ 306010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ( (CONDITION(cond)) \ 307010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ? ((void)__android_log_buf_print(LOG_ID_RADIO, ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__)) \ 308010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : (void)0 ) 309010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 310010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 311010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 312010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 313010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Simplified macro to send a debug radio log message using the current LOG_TAG. 314010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 315010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef RLOGD 316010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define RLOGD(...) ((void)__android_log_buf_print(LOG_ID_RADIO, ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)) 317010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 318010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 319010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef RLOGD_IF 320010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define RLOGD_IF(cond, ...) \ 321010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ( (CONDITION(cond)) \ 322010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ? ((void)__android_log_buf_print(LOG_ID_RADIO, ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)) \ 323010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : (void)0 ) 324010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 325010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 326010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 327010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Simplified macro to send an info radio log message using the current LOG_TAG. 328010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 329010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef RLOGI 330010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define RLOGI(...) ((void)__android_log_buf_print(LOG_ID_RADIO, ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)) 331010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 332010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 333010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef RLOGI_IF 334010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define RLOGI_IF(cond, ...) \ 335010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ( (CONDITION(cond)) \ 336010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ? ((void)__android_log_buf_print(LOG_ID_RADIO, ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)) \ 337010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : (void)0 ) 338010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 339010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 340010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 341010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Simplified macro to send a warning radio log message using the current LOG_TAG. 342010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 343010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef RLOGW 344010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define RLOGW(...) ((void)__android_log_buf_print(LOG_ID_RADIO, ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__)) 345010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 346010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 347010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef RLOGW_IF 348010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define RLOGW_IF(cond, ...) \ 349010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ( (CONDITION(cond)) \ 350010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ? ((void)__android_log_buf_print(LOG_ID_RADIO, ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__)) \ 351010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : (void)0 ) 352010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 353010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 354010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 355010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Simplified macro to send an error radio log message using the current LOG_TAG. 356010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 357010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef RLOGE 358010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define RLOGE(...) ((void)__android_log_buf_print(LOG_ID_RADIO, ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)) 359010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 360010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 361010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef RLOGE_IF 362010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define RLOGE_IF(cond, ...) \ 363010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ( (CONDITION(cond)) \ 364010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ? ((void)__android_log_buf_print(LOG_ID_RADIO, ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)) \ 365010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : (void)0 ) 366010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 367010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 368010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 369010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// --------------------------------------------------------------------- 370010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 371010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 372010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Log a fatal error. If the given condition fails, this stops program 373010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * execution like a normal assertion, but also generating the given message. 374010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * It is NOT stripped from release builds. Note that the condition test 375010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * is -inverted- from the normal assert() semantics. 376010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 377010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef LOG_ALWAYS_FATAL_IF 378010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define LOG_ALWAYS_FATAL_IF(cond, ...) \ 379010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ( (CONDITION(cond)) \ 380010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ? ((void)android_printAssert(#cond, LOG_TAG, ## __VA_ARGS__)) \ 381010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : (void)0 ) 382010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 383010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 384010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef LOG_ALWAYS_FATAL 385010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define LOG_ALWAYS_FATAL(...) \ 386010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ( ((void)android_printAssert(NULL, LOG_TAG, ## __VA_ARGS__)) ) 387010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 388010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 389010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 390010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Versions of LOG_ALWAYS_FATAL_IF and LOG_ALWAYS_FATAL that 391010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * are stripped out of release builds. 392010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 393010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if LOG_NDEBUG 394010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 395010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef LOG_FATAL_IF 396010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define LOG_FATAL_IF(cond, ...) ((void)0) 397010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 398010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef LOG_FATAL 399010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define LOG_FATAL(...) ((void)0) 400010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 401010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 402010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#else 403010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 404010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef LOG_FATAL_IF 405010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define LOG_FATAL_IF(cond, ...) LOG_ALWAYS_FATAL_IF(cond, ## __VA_ARGS__) 406010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 407010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef LOG_FATAL 408010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define LOG_FATAL(...) LOG_ALWAYS_FATAL(__VA_ARGS__) 409010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 410010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 411010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 412010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 413010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 414010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Assertion that generates a log message when the assertion fails. 415010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Stripped out of release builds. Uses the current LOG_TAG. 416010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 417010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef ALOG_ASSERT 418010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define ALOG_ASSERT(cond, ...) LOG_FATAL_IF(!(cond), ## __VA_ARGS__) 419010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)//#define ALOG_ASSERT(cond) LOG_FATAL_IF(!(cond), "Assertion failed: " #cond) 420010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 421010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 422010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// --------------------------------------------------------------------- 423010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 424010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 425010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Basic log message macro. 426010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * 427010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Example: 428010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * ALOG(LOG_WARN, NULL, "Failed with error %d", errno); 429010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * 430010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * The second argument may be NULL or "" to indicate the "global" tag. 431010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 432010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef ALOG 433010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define ALOG(priority, tag, ...) \ 434010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) LOG_PRI(ANDROID_##priority, tag, __VA_ARGS__) 435010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 436010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 437010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 438010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Log macro that allows you to specify a number for the priority. 439010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 440010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef LOG_PRI 441010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define LOG_PRI(priority, tag, ...) \ 442010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) android_printLog(priority, tag, __VA_ARGS__) 443010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 444010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 445010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 446010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Log macro that allows you to pass in a varargs ("args" is a va_list). 447010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 448010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef LOG_PRI_VA 449010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define LOG_PRI_VA(priority, tag, fmt, args) \ 450010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) android_vprintLog(priority, NULL, tag, fmt, args) 451010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 452010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 453010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 454010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Conditional given a desired logging priority and tag. 455010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 456010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef IF_ALOG 457010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define IF_ALOG(priority, tag) \ 458010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (android_testLog(ANDROID_##priority, tag)) 459010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 460010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 461010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// --------------------------------------------------------------------- 462010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 463010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 464010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Event logging. 465010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 466010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 467010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 468010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Event log entry types. These must match up with the declarations in 469010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * java/android/android/util/EventLog.java. 470010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 471010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)typedef enum { 472010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EVENT_TYPE_INT = 0, 473010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EVENT_TYPE_LONG = 1, 474010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EVENT_TYPE_STRING = 2, 475010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EVENT_TYPE_LIST = 3, 476010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} AndroidEventLogType; 477010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 478010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 479010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef LOG_EVENT_INT 480010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define LOG_EVENT_INT(_tag, _value) { \ 481010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int intBuf = _value; \ 482010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void) android_btWriteLog(_tag, EVENT_TYPE_INT, &intBuf, \ 483010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) sizeof(intBuf)); \ 484010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 485010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 486010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef LOG_EVENT_LONG 487010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define LOG_EVENT_LONG(_tag, _value) { \ 488010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) long long longBuf = _value; \ 489010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) (void) android_btWriteLog(_tag, EVENT_TYPE_LONG, &longBuf, \ 490010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) sizeof(longBuf)); \ 491010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 492010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 493010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef LOG_EVENT_STRING 494010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define LOG_EVENT_STRING(_tag, _value) \ 495010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ((void) 0) /* not implemented -- must combine len with string */ 496010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 497010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* TODO: something for LIST */ 498010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 499010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 500010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * =========================================================================== 501010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * 502010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * The stuff in the rest of this file should not be used directly. 503010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 504010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 505010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define android_printLog(prio, tag, fmt...) \ 506010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) __android_log_print(prio, tag, fmt) 507010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 508010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define android_vprintLog(prio, cond, tag, fmt...) \ 509010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) __android_log_vprint(prio, tag, fmt) 510010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 511010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* XXX Macros to work around syntax errors in places where format string 512010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * arg is not passed to ALOG_ASSERT, LOG_ALWAYS_FATAL or LOG_ALWAYS_FATAL_IF 513010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * (happens only in debug builds). 514010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 515010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 516010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* Returns 2nd arg. Used to substitute default value if caller's vararg list 517010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * is empty. 518010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 519010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define __android_second(dummy, second, ...) second 520010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 521010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* If passed multiple args, returns ',' followed by all but 1st arg, otherwise 522010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * returns nothing. 523010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 524010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define __android_rest(first, ...) , ## __VA_ARGS__ 525010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 526010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define android_printAssert(cond, tag, fmt...) \ 527010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) __android_log_assert(cond, tag, \ 528010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) __android_second(0, ## fmt, NULL) __android_rest(fmt)) 529010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 530010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define android_writeLog(prio, tag, text) \ 531010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) __android_log_write(prio, tag, text) 532010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 533010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define android_bWriteLog(tag, payload, len) \ 534010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) __android_log_bwrite(tag, payload, len) 535010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define android_btWriteLog(tag, type, payload, len) \ 536010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) __android_log_btwrite(tag, type, payload, len) 537010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 538010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// TODO: remove these prototypes and their users 539010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define android_testLog(prio, tag) (1) 540010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define android_writevLog(vec,num) do{}while(0) 541010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define android_write1Log(str,len) do{}while (0) 542010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define android_setMinPriority(tag, prio) do{}while(0) 543010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)//#define android_logToCallback(func) do{}while(0) 544010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define android_logToFile(tag, file) (0) 545010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define android_logToFd(tag, fd) (0) 546010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 547010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)typedef enum { 548010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) LOG_ID_MAIN = 0, 549010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) LOG_ID_RADIO = 1, 550010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) LOG_ID_EVENTS = 2, 551010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) LOG_ID_SYSTEM = 3, 552010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 553010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) LOG_ID_MAX 554010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} log_id_t; 555010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 556010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/* 557010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Send a simple string to the log. 558010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 559010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)int __android_log_buf_write(int bufID, int prio, const char *tag, const char *text); 560010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)int __android_log_buf_print(int bufID, int prio, const char *tag, const char *fmt, ...); 561010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 562010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 563010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifdef __cplusplus 564010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 565010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 566010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 567010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif // _LIBS_CUTILS_LOG_H 568