18c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/* Copyright (c) 2011-2014 The Linux Foundation. All rights reserved. 28c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * 38c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * Redistribution and use in source and binary forms, with or without 48c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * modification, are permitted provided that the following conditions are 58c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * met: 68c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * * Redistributions of source code must retain the above copyright 78c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * notice, this list of conditions and the following disclaimer. 88c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * * Redistributions in binary form must reproduce the above 98c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * copyright notice, this list of conditions and the following 108c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * disclaimer in the documentation and/or other materials provided 118c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * with the distribution. 128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * * Neither the name of The Linux Foundation nor the names of its 138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * contributors may be used to endorse or promote products derived 148c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * from this software without specific prior written permission. 158c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * 168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 188c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 198c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 228c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 238c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 268c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 278c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * 288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam */ 298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#ifndef __LOG_UTIL_H__ 318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define __LOG_UTIL_H__ 328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#ifndef USE_GLIB 348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <utils/Log.h> 358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#endif /* USE_GLIB */ 368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#ifdef USE_GLIB 388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <stdio.h> 408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <sys/types.h> 418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#include <unistd.h> 428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#ifndef LOG_TAG 448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOG_TAG "GPS_UTILS" 458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#endif // LOG_TAG 478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#endif /* USE_GLIB */ 498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#ifdef __cplusplus 518c2d3d5afc51d3f35150f748f263870367771b6fEd Tamextern "C" 528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#endif 548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*============================================================================= 558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * 568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * LOC LOGGER TYPE DECLARATION 578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * 588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam *============================================================================*/ 598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/* LOC LOGGER */ 608c2d3d5afc51d3f35150f748f263870367771b6fEd Tamtypedef struct loc_logger_s 618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam{ 628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam unsigned long DEBUG_LEVEL; 638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam unsigned long TIMESTAMP; 648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} loc_logger_s_type; 658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*============================================================================= 678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * 688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * EXTERNAL DATA 698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * 708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam *============================================================================*/ 718c2d3d5afc51d3f35150f748f263870367771b6fEd Tamextern loc_logger_s_type loc_logger; 728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// Logging Improvements 748c2d3d5afc51d3f35150f748f263870367771b6fEd Tamextern const char *loc_logger_boolStr[]; 758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 768c2d3d5afc51d3f35150f748f263870367771b6fEd Tamextern const char *boolStr[]; 778c2d3d5afc51d3f35150f748f263870367771b6fEd Tamextern const char VOID_RET[]; 788c2d3d5afc51d3f35150f748f263870367771b6fEd Tamextern const char FROM_AFW[]; 798c2d3d5afc51d3f35150f748f263870367771b6fEd Tamextern const char TO_MODEM[]; 808c2d3d5afc51d3f35150f748f263870367771b6fEd Tamextern const char FROM_MODEM[]; 818c2d3d5afc51d3f35150f748f263870367771b6fEd Tamextern const char TO_AFW[]; 828c2d3d5afc51d3f35150f748f263870367771b6fEd Tamextern const char EXIT_TAG[]; 838c2d3d5afc51d3f35150f748f263870367771b6fEd Tamextern const char ENTRY_TAG[]; 848c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*============================================================================= 858c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * 868c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * MODULE EXPORTED FUNCTIONS 878c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * 888c2d3d5afc51d3f35150f748f263870367771b6fEd Tam *============================================================================*/ 898c2d3d5afc51d3f35150f748f263870367771b6fEd Tamextern void loc_logger_init(unsigned long debug, unsigned long timestamp); 908c2d3d5afc51d3f35150f748f263870367771b6fEd Tamextern char* get_timestamp(char* str, unsigned long buf_size); 918c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 928c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#ifndef DEBUG_DMN_LOC_API 938c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 948c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/* LOGGING MACROS */ 958c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*loc_logger.DEBUG_LEVEL is initialized to 0xff in loc_cfg.cpp 968c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if that value remains unchanged, it means gps.conf did not 978c2d3d5afc51d3f35150f748f263870367771b6fEd Tam provide a value and we default to the initial value to use 988c2d3d5afc51d3f35150f748f263870367771b6fEd Tam Android's logging levels*/ 998c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define IF_LOC_LOGE if((loc_logger.DEBUG_LEVEL >= 1) && (loc_logger.DEBUG_LEVEL <= 5)) 1008c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1018c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define IF_LOC_LOGW if((loc_logger.DEBUG_LEVEL >= 2) && (loc_logger.DEBUG_LEVEL <= 5)) 1028c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1038c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define IF_LOC_LOGI if((loc_logger.DEBUG_LEVEL >= 3) && (loc_logger.DEBUG_LEVEL <= 5)) 1048c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1058c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define IF_LOC_LOGD if((loc_logger.DEBUG_LEVEL >= 4) && (loc_logger.DEBUG_LEVEL <= 5)) 1068c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1078c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define IF_LOC_LOGV if((loc_logger.DEBUG_LEVEL >= 5) && (loc_logger.DEBUG_LEVEL <= 5)) 1088c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1098c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_LOGE(...) \ 1108c2d3d5afc51d3f35150f748f263870367771b6fEd TamIF_LOC_LOGE { ALOGE("E/" __VA_ARGS__); } \ 1118c2d3d5afc51d3f35150f748f263870367771b6fEd Tamelse if (loc_logger.DEBUG_LEVEL == 0xff) { ALOGE("E/" __VA_ARGS__); } 1128c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1138c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_LOGW(...) \ 1148c2d3d5afc51d3f35150f748f263870367771b6fEd TamIF_LOC_LOGW { ALOGE("W/" __VA_ARGS__); } \ 1158c2d3d5afc51d3f35150f748f263870367771b6fEd Tamelse if (loc_logger.DEBUG_LEVEL == 0xff) { ALOGW("W/" __VA_ARGS__); } 1168c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1178c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_LOGI(...) \ 1188c2d3d5afc51d3f35150f748f263870367771b6fEd TamIF_LOC_LOGI { ALOGE("I/" __VA_ARGS__); } \ 1198c2d3d5afc51d3f35150f748f263870367771b6fEd Tamelse if (loc_logger.DEBUG_LEVEL == 0xff) { ALOGI("I/" __VA_ARGS__); } 1208c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1218c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_LOGD(...) \ 1228c2d3d5afc51d3f35150f748f263870367771b6fEd TamIF_LOC_LOGD { ALOGE("D/" __VA_ARGS__); } \ 1238c2d3d5afc51d3f35150f748f263870367771b6fEd Tamelse if (loc_logger.DEBUG_LEVEL == 0xff) { ALOGD("D/" __VA_ARGS__); } 1248c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1258c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_LOGV(...) \ 1268c2d3d5afc51d3f35150f748f263870367771b6fEd TamIF_LOC_LOGV { ALOGE("V/" __VA_ARGS__); } \ 1278c2d3d5afc51d3f35150f748f263870367771b6fEd Tamelse if (loc_logger.DEBUG_LEVEL == 0xff) { ALOGV("V/" __VA_ARGS__); } 1288c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1298c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#else /* DEBUG_DMN_LOC_API */ 1308c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1318c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_LOGE(...) ALOGE("E/" __VA_ARGS__) 1328c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1338c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_LOGW(...) ALOGW("W/" __VA_ARGS__) 1348c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1358c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_LOGI(...) ALOGI("I/" __VA_ARGS__) 1368c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1378c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_LOGD(...) ALOGD("D/" __VA_ARGS__) 1388c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1398c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOC_LOGV(...) ALOGV("V/" __VA_ARGS__) 1408c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1418c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#endif /* DEBUG_DMN_LOC_API */ 1428c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1438c2d3d5afc51d3f35150f748f263870367771b6fEd Tam/*============================================================================= 1448c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * 1458c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * LOGGING IMPROVEMENT MACROS 1468c2d3d5afc51d3f35150f748f263870367771b6fEd Tam * 1478c2d3d5afc51d3f35150f748f263870367771b6fEd Tam *============================================================================*/ 1488c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOG_(LOC_LOG, ID, WHAT, SPEC, VAL) \ 1498c2d3d5afc51d3f35150f748f263870367771b6fEd Tam do { \ 1508c2d3d5afc51d3f35150f748f263870367771b6fEd Tam if (loc_logger.TIMESTAMP) { \ 1518c2d3d5afc51d3f35150f748f263870367771b6fEd Tam char ts[32]; \ 1528c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOG("[%s] %s %s line %d " #SPEC, \ 1538c2d3d5afc51d3f35150f748f263870367771b6fEd Tam get_timestamp(ts, sizeof(ts)), ID, WHAT, __LINE__, VAL); \ 1548c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } else { \ 1558c2d3d5afc51d3f35150f748f263870367771b6fEd Tam LOC_LOG("%s %s line %d " #SPEC, \ 1568c2d3d5afc51d3f35150f748f263870367771b6fEd Tam ID, WHAT, __LINE__, VAL); \ 1578c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } \ 1588c2d3d5afc51d3f35150f748f263870367771b6fEd Tam } while(0) 1598c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1608c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1618c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOG_I(ID, WHAT, SPEC, VAL) LOG_(LOC_LOGI, ID, WHAT, SPEC, VAL) 1628c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define LOG_V(ID, WHAT, SPEC, VAL) LOG_(LOC_LOGV, ID, WHAT, SPEC, VAL) 1638c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1648c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define ENTRY_LOG() LOG_V(ENTRY_TAG, __func__, %s, "") 1658c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define EXIT_LOG(SPEC, VAL) LOG_V(EXIT_TAG, __func__, SPEC, VAL) 1668c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1678c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1688c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// Used for logging callflow from Android Framework 1698c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define ENTRY_LOG_CALLFLOW() LOG_I(FROM_AFW, __func__, %s, "") 1708c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// Used for logging callflow to Modem 1718c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define EXIT_LOG_CALLFLOW(SPEC, VAL) LOG_I(TO_MODEM, __func__, SPEC, VAL) 1728c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// Used for logging callflow from Modem(TO_MODEM, __func__, %s, "") 1738c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define MODEM_LOG_CALLFLOW(SPEC, VAL) LOG_I(FROM_MODEM, __func__, SPEC, VAL) 1748c2d3d5afc51d3f35150f748f263870367771b6fEd Tam// Used for logging callflow to Android Framework 1758c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#define CALLBACK_LOG_CALLFLOW(CB, SPEC, VAL) LOG_I(TO_AFW, CB, SPEC, VAL) 1768c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1778c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#ifdef __cplusplus 1788c2d3d5afc51d3f35150f748f263870367771b6fEd Tam} 1798c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#endif 1808c2d3d5afc51d3f35150f748f263870367771b6fEd Tam 1818c2d3d5afc51d3f35150f748f263870367771b6fEd Tam#endif // __LOG_UTIL_H__ 182