• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /* Copyright (c) 2011-2014 The Linux Foundation. All rights reserved.
2   *
3   * Redistribution and use in source and binary forms, with or without
4   * modification, are permitted provided that the following conditions are
5   * met:
6   *     * Redistributions of source code must retain the above copyright
7   *       notice, this list of conditions and the following disclaimer.
8   *     * Redistributions in binary form must reproduce the above
9   *       copyright notice, this list of conditions and the following
10   *       disclaimer in the documentation and/or other materials provided
11   *       with the distribution.
12   *     * Neither the name of The Linux Foundation nor the names of its
13   *       contributors may be used to endorse or promote products derived
14   *       from this software without specific prior written permission.
15   *
16   * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19   * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20   * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23   * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24   * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25   * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26   * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27   *
28   */
29  
30  #ifndef __LOG_UTIL_H__
31  #define __LOG_UTIL_H__
32  
33  #ifndef USE_GLIB
34  #include <utils/Log.h>
35  #endif /* USE_GLIB */
36  
37  #ifdef USE_GLIB
38  
39  #include <stdio.h>
40  #include <sys/types.h>
41  #include <unistd.h>
42  
43  #ifndef LOG_TAG
44  #define LOG_TAG "GPS_UTILS"
45  
46  #endif  // LOG_TAG
47  
48  #endif /* USE_GLIB */
49  
50  #ifdef __cplusplus
51  extern "C"
52  {
53  #endif
54  /*=============================================================================
55   *
56   *                         LOC LOGGER TYPE DECLARATION
57   *
58   *============================================================================*/
59  /* LOC LOGGER */
60  typedef struct loc_logger_s
61  {
62    unsigned long  DEBUG_LEVEL;
63    unsigned long  TIMESTAMP;
64  } loc_logger_s_type;
65  
66  /*=============================================================================
67   *
68   *                               EXTERNAL DATA
69   *
70   *============================================================================*/
71  extern loc_logger_s_type loc_logger;
72  
73  // Logging Improvements
74  extern const char *loc_logger_boolStr[];
75  
76  extern const char *boolStr[];
77  extern const char VOID_RET[];
78  extern const char FROM_AFW[];
79  extern const char TO_MODEM[];
80  extern const char FROM_MODEM[];
81  extern const char TO_AFW[];
82  extern const char EXIT_TAG[];
83  extern const char ENTRY_TAG[];
84  /*=============================================================================
85   *
86   *                        MODULE EXPORTED FUNCTIONS
87   *
88   *============================================================================*/
89  extern void loc_logger_init(unsigned long debug, unsigned long timestamp);
90  extern char* get_timestamp(char* str, unsigned long buf_size);
91  
92  #ifndef DEBUG_DMN_LOC_API
93  
94  /* LOGGING MACROS */
95  /*loc_logger.DEBUG_LEVEL is initialized to 0xff in loc_cfg.cpp
96    if that value remains unchanged, it means gps.conf did not
97    provide a value and we default to the initial value to use
98    Android's logging levels*/
99  #define IF_LOC_LOGE if((loc_logger.DEBUG_LEVEL >= 1) && (loc_logger.DEBUG_LEVEL <= 5))
100  #define IF_LOC_LOGW if((loc_logger.DEBUG_LEVEL >= 2) && (loc_logger.DEBUG_LEVEL <= 5))
101  #define IF_LOC_LOGI if((loc_logger.DEBUG_LEVEL >= 3) && (loc_logger.DEBUG_LEVEL <= 5))
102  #define IF_LOC_LOGD if((loc_logger.DEBUG_LEVEL >= 4) && (loc_logger.DEBUG_LEVEL <= 5))
103  #define IF_LOC_LOGV if((loc_logger.DEBUG_LEVEL >= 5) && (loc_logger.DEBUG_LEVEL <= 5))
104  
105  #define LOC_LOGE(...) IF_LOC_LOGE { ALOGE(__VA_ARGS__); }
106  #define LOC_LOGW(...) IF_LOC_LOGW { ALOGW(__VA_ARGS__); }
107  #define LOC_LOGI(...) IF_LOC_LOGI { ALOGI(__VA_ARGS__); }
108  #define LOC_LOGD(...) IF_LOC_LOGD { ALOGD(__VA_ARGS__); }
109  #define LOC_LOGV(...) IF_LOC_LOGV { ALOGV(__VA_ARGS__); }
110  
111  #else /* DEBUG_DMN_LOC_API */
112  
113  #define LOC_LOGE(...) ALOGE(__VA_ARGS__)
114  #define LOC_LOGW(...) ALOGW(__VA_ARGS__)
115  #define LOC_LOGI(...) ALOGI(__VA_ARGS__)
116  #define LOC_LOGD(...) ALOGD(__VA_ARGS__)
117  #define LOC_LOGV(...) ALOGV(__VA_ARGS__)
118  
119  #endif /* DEBUG_DMN_LOC_API */
120  
121  /*=============================================================================
122   *
123   *                          LOGGING IMPROVEMENT MACROS
124   *
125   *============================================================================*/
126  #define LOG_(LOC_LOG, ID, WHAT, SPEC, VAL)                                    \
127      do {                                                                      \
128          if (loc_logger.TIMESTAMP) {                                           \
129              char ts[32];                                                      \
130              LOC_LOG("[%s] %s %s line %d " #SPEC,                              \
131                       get_timestamp(ts, sizeof(ts)), ID, WHAT, __LINE__, VAL); \
132          } else {                                                              \
133              LOC_LOG("%s %s line %d " #SPEC,                                   \
134                       ID, WHAT, __LINE__, VAL);                                \
135          }                                                                     \
136      } while(0)
137  
138  
139  #define LOG_I(ID, WHAT, SPEC, VAL) LOG_(LOC_LOGI, ID, WHAT, SPEC, VAL)
140  #define LOG_V(ID, WHAT, SPEC, VAL) LOG_(LOC_LOGV, ID, WHAT, SPEC, VAL)
141  
142  #define ENTRY_LOG() LOG_V(ENTRY_TAG, __func__, %s, "")
143  #define EXIT_LOG(SPEC, VAL) LOG_V(EXIT_TAG, __func__, SPEC, VAL)
144  
145  // Used for logging callflow from Android Framework
146  #define ENTRY_LOG_CALLFLOW() LOG_I(FROM_AFW, __FUNCTION__, %s, "")
147  // Used for logging callflow to Modem
148  #define EXIT_LOG_CALLFLOW(SPEC, VAL) LOG_I(TO_MODEM, __FUNCTION__, SPEC, VAL)
149  // Used for logging callflow from Modem(TO_MODEM, __FUNCTION__, %s, "")
150  #define MODEM_LOG_CALLFLOW(SPEC, VAL) LOG_I(FROM_MODEM, __FUNCTION__, SPEC, VAL)
151  // Used for logging callflow to Android Framework
152  #define CALLBACK_LOG_CALLFLOW(CB, SPEC, VAL) LOG_I(TO_AFW, CB, SPEC, VAL)
153  
154  #ifdef __cplusplus
155  }
156  #endif
157  
158  #endif // __LOG_UTIL_H__
159