2010-07-09 18:55:33 +00:00
|
|
|
|
/***************************************************************************
|
|
|
|
|
sua_logging.cpp - description
|
|
|
|
|
-------------------
|
|
|
|
|
begin : Tue Jan 8 2002
|
|
|
|
|
copyright : (C) 2002 by Lode Coene
|
|
|
|
|
email : lode.coene@siemens.atea.be
|
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
|
|
|
* *
|
|
|
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
|
|
|
* it under the terms of the GNU General Public License as published by *
|
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
|
|
|
* (at your option) any later version. *
|
|
|
|
|
* *
|
|
|
|
|
***************************************************************************/
|
|
|
|
|
/*
|
|
|
|
|
* $Id: sua_logging.cpp,v 1.1.1.1 2002/02/04 14:30:41 p82609 Exp $
|
|
|
|
|
*
|
|
|
|
|
* SUA implementation according to SUA draft issue 6.
|
|
|
|
|
*
|
|
|
|
|
* Author(s): Lode Coene
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* Copyright (C) 2001 by Siemens Atea, Herentals, Belgium.
|
|
|
|
|
*
|
|
|
|
|
* Realized in co-operation between Siemens Atea and
|
|
|
|
|
* Siemens AG, Munich, Germany.
|
|
|
|
|
*
|
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
|
* modify it under the terms of the GNU General Public License
|
|
|
|
|
* as published by the Free Software Foundation; either version 2
|
|
|
|
|
* of the License, or (at your option) any later version.
|
|
|
|
|
*
|
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
|
* along with this program; if not, write to the Free Software
|
|
|
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
|
*
|
|
|
|
|
* Contact: gery.verwimp@siemens.atea.be
|
|
|
|
|
* lode.coene@siemens.atea.be
|
|
|
|
|
*
|
|
|
|
|
* The alternative comment
|
|
|
|
|
* inspiration : Cindy
|
|
|
|
|
* "KISS (ME * ) methodology applies"
|
|
|
|
|
* " * The extended KISS method only applies to beautifull girls."
|
|
|
|
|
*
|
|
|
|
|
* Purpose: This code-file defines the SUA logging(error or normal stuff)
|
|
|
|
|
* functions for:
|
|
|
|
|
* - initialise the logging file
|
|
|
|
|
* - log events to logging file
|
|
|
|
|
* - log byte arrya to logging file
|
|
|
|
|
* - Display byte array to screen
|
|
|
|
|
* - close logging file
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "sua_debug.h"
|
|
|
|
|
#include "sua.h"
|
|
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
#include <stdarg.h>
|
|
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
|
#include <iostream>
|
|
|
|
|
#include <iomanip>
|
|
|
|
|
#include <fstream.h>
|
|
|
|
|
|
|
|
|
|
#include <sys/time.h>
|
|
|
|
|
#include <time.h>
|
|
|
|
|
|
|
|
|
|
#ifdef HAVE_UNISTD_H
|
|
|
|
|
#include <unistd.h>
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define MAX_BYTES_IN_LINE 20
|
|
|
|
|
|
2010-07-09 18:57:43 +00:00
|
|
|
|
using namespace std;
|
|
|
|
|
|
2010-07-09 18:55:33 +00:00
|
|
|
|
ofstream logfile;
|
|
|
|
|
char log_filename[100];
|
|
|
|
|
|
|
|
|
|
typedef enum { min = -127,
|
|
|
|
|
max = 128
|
|
|
|
|
} sua_byte_str;
|
|
|
|
|
|
|
|
|
|
/***********************************************************************/
|
|
|
|
|
/* init_logging_file */
|
|
|
|
|
/***********************************************************************/
|
|
|
|
|
void init_logging_file()
|
|
|
|
|
{
|
|
|
|
|
struct timeval tv;
|
|
|
|
|
struct timezone tz;
|
|
|
|
|
struct tm *the_time;
|
|
|
|
|
// random temporary logfile
|
|
|
|
|
//sprintf(log_filename, "./tmp%d.log",(int)getpid());
|
|
|
|
|
sprintf(log_filename, "./tmp2603.log");
|
|
|
|
|
cout << "Logging all errors and events to file " << log_filename <<"\n";
|
|
|
|
|
// creation of random logfile: overwrite file if already exists
|
|
|
|
|
logfile.open(log_filename);
|
|
|
|
|
if (!logfile)
|
|
|
|
|
{
|
|
|
|
|
cout << "Logging file " << log_filename << " could not be created\n";
|
|
|
|
|
exit(0);
|
|
|
|
|
}
|
|
|
|
|
gettimeofday(&tv, &tz);
|
|
|
|
|
the_time = localtime((time_t *) & (tv.tv_sec));
|
|
|
|
|
logfile << the_time->tm_hour << ":" << the_time->tm_min << ":" << the_time->tm_sec << ":" << (int) (tv.tv_usec / 1000) << " >> Logfile " << log_filename << " created \n" << flush;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* This function logs events.
|
|
|
|
|
Parameters:
|
|
|
|
|
@param event_log_level : INTERNAL_EVENT_0 INTERNAL_EVENT_1 EXTERNAL_EVENT_X EXTERNAL_EVENT
|
|
|
|
|
@param module_name : the name of the module that received the event.
|
|
|
|
|
@param log_info : the info that is printed with the modulename.
|
|
|
|
|
@param anyno : optional pointer to unsigned int, which is printed along with log_info.
|
|
|
|
|
The conversion specification must be contained in log_info.
|
|
|
|
|
@author H<EFBFBD>lzlwimmer
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/***********************************************************************/
|
|
|
|
|
/* event_log */
|
|
|
|
|
/***********************************************************************/
|
|
|
|
|
void event_log( char *module_name, char *log_info, ...)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
#ifdef FILE_DEBUG
|
|
|
|
|
struct timeval tv;
|
|
|
|
|
struct timezone tz;
|
|
|
|
|
struct tm *the_time;
|
|
|
|
|
|
|
|
|
|
gettimeofday(&tv, &tz);
|
|
|
|
|
the_time = localtime((time_t *) & (tv.tv_sec));
|
|
|
|
|
logfile << the_time->tm_hour << ":" << the_time->tm_min << ":" << the_time->tm_sec << ":" << (int) (tv.tv_usec / 1000) << " >> " << module_name << " >> " << log_info << " \n" << flush;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/***********************************************************************/
|
|
|
|
|
/* event_log_byte_array */
|
|
|
|
|
/***********************************************************************/
|
|
|
|
|
void log_byte_array( char *module_name, char *log_info, int len)
|
|
|
|
|
{
|
|
|
|
|
#ifdef FILE_DEBUG
|
|
|
|
|
int i,space;
|
|
|
|
|
int li;
|
|
|
|
|
int lines;
|
|
|
|
|
int index;
|
|
|
|
|
struct timeval tv;
|
|
|
|
|
struct timezone tz;
|
|
|
|
|
struct tm *the_time;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gettimeofday(&tv, &tz);
|
|
|
|
|
the_time = localtime((time_t *) & (tv.tv_sec));
|
|
|
|
|
logfile << the_time->tm_hour << ":" << the_time->tm_min << ":" << the_time->tm_sec << ":" << (int) (tv.tv_usec / 1000) << " >> " << module_name << " >> " ;
|
|
|
|
|
logfile << "Display byte array(in Hex), length " << len << "(hex " << hex << len << ")\n";
|
|
|
|
|
|
|
|
|
|
lines = (len / MAX_BYTES_IN_LINE) + 1;
|
|
|
|
|
li = 0;
|
|
|
|
|
index = 0;
|
|
|
|
|
logfile.setf(ios::hex);
|
|
|
|
|
while ( li < lines){
|
|
|
|
|
i = 0;
|
|
|
|
|
space = 0;
|
|
|
|
|
while (( i < MAX_BYTES_IN_LINE) && (index < len)) {
|
|
|
|
|
/* what is needed to display a single byte in hex */
|
|
|
|
|
/* convert the char element to a unsigned character : weird??? */
|
|
|
|
|
/* then convert the unsigned char to a unsigned short */
|
|
|
|
|
/* do the display of the unsigned short */
|
|
|
|
|
unsigned char usc = (log_info[index]);
|
|
|
|
|
unsigned short c = usc;
|
|
|
|
|
logfile << hex << setfill('0') << setw(2) << c;
|
|
|
|
|
space++;
|
|
|
|
|
if (space >= 4) {
|
|
|
|
|
logfile << " ";
|
|
|
|
|
space = 0;
|
|
|
|
|
}
|
|
|
|
|
index++;
|
|
|
|
|
i++;
|
|
|
|
|
}
|
|
|
|
|
logfile << "\n";
|
|
|
|
|
li++;
|
|
|
|
|
}
|
|
|
|
|
logfile.setf(ios::dec);
|
|
|
|
|
logfile << flush;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***********************************************************************/
|
|
|
|
|
/* display_byte_array */
|
|
|
|
|
/***********************************************************************/
|
|
|
|
|
void display_byte_array( char *log_info, int len)
|
|
|
|
|
{
|
|
|
|
|
int i,li, lines,index, space;
|
|
|
|
|
|
|
|
|
|
lines = (len / MAX_BYTES_IN_LINE) + 1;
|
|
|
|
|
li = 0;
|
|
|
|
|
index = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//cout << "lines = " << lines << " , len = " << len << "\n";
|
|
|
|
|
cout.setf(ios::hex);
|
|
|
|
|
while ( li < lines){
|
|
|
|
|
i = 0;
|
|
|
|
|
space = 0;
|
|
|
|
|
while (( i < MAX_BYTES_IN_LINE) && (index < len)) {
|
|
|
|
|
/* what is needed to display a single byte in hex */
|
|
|
|
|
/* convert the char element to a unsigned character : weird??? */
|
|
|
|
|
/* then convert the unsigned char to a unsigned short */
|
|
|
|
|
/* do the display of the unsigned short */
|
|
|
|
|
unsigned char usc = (log_info[index]);
|
|
|
|
|
unsigned short c = usc;
|
|
|
|
|
cout << hex << setfill('0') << setw(2) << c;
|
|
|
|
|
space++;
|
|
|
|
|
if (space >= 4) {
|
|
|
|
|
cout << " ";
|
|
|
|
|
space = 0;
|
|
|
|
|
}
|
|
|
|
|
index++;
|
|
|
|
|
i++;
|
|
|
|
|
}
|
|
|
|
|
cout << "\n";
|
|
|
|
|
// cout << dec << "i = " << i << " , li = " << li << " , index = " << index << "\n";
|
|
|
|
|
li++;
|
|
|
|
|
}
|
|
|
|
|
cout.setf(ios::dec);
|
|
|
|
|
cout << "SUA message size = " << len << "\n";
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***********************************************************************/
|
|
|
|
|
/* close_logging_file */
|
|
|
|
|
/***********************************************************************/
|
|
|
|
|
void close_logging_file()
|
|
|
|
|
{
|
|
|
|
|
struct timeval tv;
|
|
|
|
|
struct timezone tz;
|
|
|
|
|
struct tm *the_time;
|
|
|
|
|
|
|
|
|
|
gettimeofday(&tv, &tz);
|
|
|
|
|
the_time = localtime((time_t *) & (tv.tv_sec));
|
|
|
|
|
logfile << the_time->tm_hour << ":" << the_time->tm_min << ":" << the_time->tm_sec << ":" << (int) (tv.tv_usec / 1000) << " >> Logfile " << log_filename << " closed \n" << flush;
|
|
|
|
|
|
|
|
|
|
// closing of random logfile
|
|
|
|
|
logfile.close();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|