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