1e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/* Copyright (c) 2011-2012, 2015, The Linux Foundation. All rights reserved.
2e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *
3e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * Redistribution and use in source and binary forms, with or without
4e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * modification, are permitted provided that the following conditions are
5e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * met:
6e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *     * Redistributions of source code must retain the above copyright
7e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *       notice, this list of conditions and the following disclaimer.
8e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *     * Redistributions in binary form must reproduce the above
9e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *       copyright notice, this list of conditions and the following
10e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *       disclaimer in the documentation and/or other materials provided
11e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *       with the distribution.
12e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *     * Neither the name of The Linux Foundation, nor the names of its
13e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *       contributors may be used to endorse or promote products derived
14e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *       from this software without specific prior written permission.
15e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *
16e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *
28e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti */
29e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
30e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#define LOG_NDDEBUG 0
31e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
32e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <stdio.h>
33e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <stdlib.h>
34e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <sys/time.h>
35e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include "loc_log.h"
36e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include "msg_q.h"
37e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#ifdef USE_GLIB
38e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <time.h>
39e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#endif /* USE_GLIB  */
40e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include "log_util.h"
41e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include "platform_lib_includes.h"
42e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
43e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#define  BUFFER_SIZE  120
44e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
45e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti// Logging Improvements
46e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleticonst char *loc_logger_boolStr[]={"False","True"};
47e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleticonst char VOID_RET[]   = "None";
48e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleticonst char FROM_AFW[]   = "===>";
49e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleticonst char TO_MODEM[]   = "--->";
50e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleticonst char FROM_MODEM[] = "<---";
51e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleticonst char TO_AFW[]     = "<===";
52e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleticonst char EXIT_TAG[]   = "Exiting";
53e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleticonst char ENTRY_TAG[]  = "Entering";
54e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleticonst char EXIT_ERROR_TAG[]  = "Exiting with error";
55e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
56e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/* Logging Mechanism */
57e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiloc_logger_s_type loc_logger;
58e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
59e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/* Get names from value */
60e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleticonst char* loc_get_name_from_mask(const loc_name_val_s_type table[], size_t table_size, long mask)
61e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
62e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   size_t i;
63e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   for (i = 0; i < table_size; i++)
64e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   {
65e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti      if (table[i].val & (long) mask)
66e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti      {
67e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti         return table[i].name;
68e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti      }
69e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   }
70e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   return UNKNOWN_STR;
71e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
72e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
73e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/* Get names from value */
74e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleticonst char* loc_get_name_from_val(const loc_name_val_s_type table[], size_t table_size, long value)
75e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
76e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   size_t i;
77e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   for (i = 0; i < table_size; i++)
78e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   {
79e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti      if (table[i].val == (long) value)
80e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti      {
81e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti         return table[i].name;
82e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti      }
83e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   }
84e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   return UNKNOWN_STR;
85e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
86e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
87e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic const loc_name_val_s_type loc_msg_q_status[] =
88e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
89e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    NAME_VAL( eMSG_Q_SUCCESS ),
90e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    NAME_VAL( eMSG_Q_FAILURE_GENERAL ),
91e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    NAME_VAL( eMSG_Q_INVALID_PARAMETER ),
92e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    NAME_VAL( eMSG_Q_INVALID_HANDLE ),
93e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    NAME_VAL( eMSG_Q_UNAVAILABLE_RESOURCE ),
94e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    NAME_VAL( eMSG_Q_INSUFFICIENT_BUFFER )
95e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti};
96e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic const size_t loc_msg_q_status_num = LOC_TABLE_SIZE(loc_msg_q_status);
97e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
98e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/* Find msg_q status name */
99e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleticonst char* loc_get_msg_q_status(int status)
100e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
101e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   return loc_get_name_from_val(loc_msg_q_status, loc_msg_q_status_num, (long) status);
102e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
103e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
104e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleticonst char* log_succ_fail_string(int is_succ)
105e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
106e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   return is_succ? "successful" : "failed";
107e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
108e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
109e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti//Target names
110e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic const loc_name_val_s_type target_name[] =
111e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
112e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    NAME_VAL(GNSS_NONE),
113e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    NAME_VAL(GNSS_MSM),
114e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    NAME_VAL(GNSS_GSS),
115e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    NAME_VAL(GNSS_MDM),
116e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    NAME_VAL(GNSS_QCA1530),
117e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    NAME_VAL(GNSS_AUTO),
118e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    NAME_VAL(GNSS_UNKNOWN)
119e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti};
120e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
121e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic const size_t target_name_num = LOC_TABLE_SIZE(target_name);
122e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
123e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/*===========================================================================
124e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
125e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiFUNCTION loc_get_target_name
126e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
127e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiDESCRIPTION
128e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   Returns pointer to a string that contains name of the target
129e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
130e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   XX:XX:XX.000\0
131e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
132e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiRETURN VALUE
133e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   The target name string
134e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
135e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti===========================================================================*/
136e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleticonst char *loc_get_target_name(unsigned int target)
137e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
138e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    int index = 0;
139e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    static char ret[BUFFER_SIZE];
140e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
141e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    index =  getTargetGnssType(target);
142e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if( index < 0 || (unsigned)index >= target_name_num )
143e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        index = target_name_num - 1;
144e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
145e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if( (target & HAS_SSC) == HAS_SSC ) {
146e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        snprintf(ret, sizeof(ret), " %s with SSC",
147e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti           loc_get_name_from_val(target_name, target_name_num, (long)index) );
148e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
149e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    else {
150e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti       snprintf(ret, sizeof(ret), " %s  without SSC",
151e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti           loc_get_name_from_val(target_name, target_name_num, (long)index) );
152e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
153e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return ret;
154e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
155e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
156e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
157e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/*===========================================================================
158e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
159e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiFUNCTION loc_get_time
160e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
161e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiDESCRIPTION
162e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   Logs a callback event header.
163e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   The pointer time_string should point to a buffer of at least 13 bytes:
164e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
165e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   XX:XX:XX.000\0
166e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
167e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiRETURN VALUE
168e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   The time string
169e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
170e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti===========================================================================*/
171e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletichar *loc_get_time(char *time_string, size_t buf_size)
172e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
173e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   struct timeval now;     /* sec and usec     */
174e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   struct tm now_tm;       /* broken-down time */
175e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   char hms_string[80];    /* HH:MM:SS         */
176e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
177e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   gettimeofday(&now, NULL);
178e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   localtime_r(&now.tv_sec, &now_tm);
179e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
180e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   strftime(hms_string, sizeof hms_string, "%H:%M:%S", &now_tm);
181e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   snprintf(time_string, buf_size, "%s.%03d", hms_string, (int) (now.tv_usec / 1000));
182e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
183e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   return time_string;
184e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
185e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
186e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
187e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/*===========================================================================
188e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiFUNCTION loc_logger_init
189e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
190e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiDESCRIPTION
191e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   Initializes the state of DEBUG_LEVEL and TIMESTAMP
192e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
193e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiDEPENDENCIES
194e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   N/A
195e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
196e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiRETURN VALUE
197e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   None
198e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
199e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiSIDE EFFECTS
200e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   N/A
201e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti===========================================================================*/
202e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletivoid loc_logger_init(unsigned long debug, unsigned long timestamp)
203e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
204e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   loc_logger.DEBUG_LEVEL = debug;
205e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#ifdef TARGET_BUILD_VARIANT_USER
206e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   // force user builds to 2 or less
207e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   if (loc_logger.DEBUG_LEVEL > 2) {
208e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti       loc_logger.DEBUG_LEVEL = 2;
209e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   }
210e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#endif
211e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   loc_logger.TIMESTAMP   = timestamp;
212e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
213e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
214e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
215e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/*===========================================================================
216e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiFUNCTION get_timestamp
217e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
218e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiDESCRIPTION
219e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   Generates a timestamp using the current system time
220e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
221e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiDEPENDENCIES
222e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   N/A
223e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
224e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiRETURN VALUE
225e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   Char pointer to the parameter str
226e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
227e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiSIDE EFFECTS
228e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   N/A
229e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti===========================================================================*/
230e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletichar * get_timestamp(char *str, unsigned long buf_size)
231e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
232e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti  struct timeval tv;
233e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti  struct timezone tz;
234e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti  int hh, mm, ss;
235e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti  gettimeofday(&tv, &tz);
236e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti  hh = tv.tv_sec/3600%24;
237e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti  mm = (tv.tv_sec%3600)/60;
238e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti  ss = tv.tv_sec%60;
239e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti  snprintf(str, buf_size, "%02d:%02d:%02d.%06ld", hh, mm, ss, tv.tv_usec);
240e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti  return str;
241e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
242e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
243