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