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