#ifndef TP4_LOG_INCLUDED
#define TP4_LOG_INCLUDED
/************************************************************************/
/* SISCO SOFTWARE MODULE HEADER *****************************************/
/************************************************************************/
/*   (c) Copyright Systems Integration Specialists Company, Inc.,	*/
/*      	  1996 - 2005, All Rights Reserved.		        */
/*									*/
/*		    PROPRIETARY AND CONFIDENTIAL			*/
/*									*/
/* MODULE NAME : tp4_log.h						*/
/* PRODUCT(S)  : Lean-T Stack						*/
/*									*/
/* MODULE DESCRIPTION : 						*/
/*		This header file contains logging macros for TP.	*/
/*	Note:	To compile logging functions use the DEBUG_SISCO define	*/
/*		in the project make file.				*/
/*									*/
/*									*/
/* MODIFICATION LOG :							*/
/*  Date     Who   Rev			Comments			*/
/* --------  ---  ------   -------------------------------------------	*/
/* 05/10/05  EJV     04    Added TP_LOG_ERR3.				*/
/* 09/13/99  MDE     03    Added SD_CONST modifiers			*/
/* 10/08/98  MDE     02    Migrated to updated SLOG interface		*/
/* 05/27/97  JRB   7.00    MMSEASE 7.0 release.				*/
/* 06/24/96  EJV     01    Created					*/
/************************************************************************/
#include "slog.h"
#include "tp4api.h"	/* NOTE the masks are defined in tp4api.h,	*/
			/*	should we include it here? */

#ifdef __cplusplus
extern "C" {
#endif

/****************************************************************/
/* Log Control types						*/
/****************************************************************/

/* defined for TP_LOG.._RIn macros */
#define	TP_REQ	(ST_UCHAR) 0
#define	TP_IND	(ST_UCHAR) 1

#if defined(DEBUG_SISCO)

extern SD_CONST ST_CHAR *SD_CONST _tp4_err_logstr;
extern SD_CONST ST_CHAR *SD_CONST _tp4_flowup_logstr;
extern SD_CONST ST_CHAR *SD_CONST _tp4_flowdown_logstr;

  /*--------------------------------------------*/
  /* errors logging				*/
  /*--------------------------------------------*/

  #define TP_LOG_ERR0(a) {\
                  if (tp4_debug_sel & TP4_LOG_ERR)\
                    _slog (sLogCtrl,_tp4_err_logstr,\
	                  thisFileName,__LINE__,a);\
                    }
  #define TP_LOG_ERR1(a,b) {\
                    if (tp4_debug_sel & TP4_LOG_ERR)\
                      _slog (sLogCtrl,_tp4_err_logstr,\
	                    thisFileName,__LINE__,a,b);\
                    }
  #define TP_LOG_ERR2(a,b,c) {\
                    if (tp4_debug_sel & TP4_LOG_ERR)\
                      _slog (sLogCtrl,_tp4_err_logstr,\
	                    thisFileName,__LINE__,a,b,c);\
                    }
  #define TP_LOG_ERR3(a,b,c,d) {\
                    if (tp4_debug_sel & TP4_LOG_ERR)\
                      _slog (sLogCtrl,_tp4_err_logstr,\
	                    thisFileName,__LINE__,a,b,c,d);\
                    }
  /* continuation log */

  #define TP_LOGC_ERR0(a) {\
                  if (tp4_debug_sel & TP4_LOG_ERR)\
                    _slogc (sLogCtrl,a);\
                    }
  #define TP_LOGC_ERR1(a,b) {\
                    if (tp4_debug_sel & TP4_LOG_ERR)\
                      _slogc (sLogCtrl,a,b);\
                    }
  #define TP_LOGC_ERR2(a,b,c) {\
                    if (tp4_debug_sel & TP4_LOG_ERR)\
                      _slogc (sLogCtrl,a,b,c);\
                    }
  /* hex logging */

  #define TP_LOGH_ERR(a,b) {\
                    if (tp4_debug_sel & TP4_LOG_ERR)\
                      _slogHex (sLogCtrl,a,b);\
                    }

  /*--------------------------------------------*/
  /* Indication logging				*/
  /*--------------------------------------------*/

  #define TP_LOG_IND0(a) {\
                     if (tp4_debug_sel & TP4_LOG_FLOWUP)\
                       _slog (sLogCtrl,_tp4_flowup_logstr,\
		             thisFileName,__LINE__,a);\
                    }
  #define TP_LOG_IND1(a,b) {\
                       if (tp4_debug_sel & TP4_LOG_FLOWUP)\
                         _slog (sLogCtrl,_tp4_flowup_logstr,\
		               thisFileName,__LINE__,a,b);\
                    }
  #define TP_LOG_IND2(a,b,c) {\
                       if (tp4_debug_sel & TP4_LOG_FLOWUP)\
                         _slog (sLogCtrl,_tp4_flowup_logstr,\
		               thisFileName,__LINE__,a,b,c);\
                    }
  #define TP_LOG_IND3(a,b,c,d) {\
                       if (tp4_debug_sel & TP4_LOG_FLOWUP)\
                         _slog (sLogCtrl,_tp4_flowup_logstr,\
		               thisFileName,__LINE__,a,b,c,d);\
                    }
  #define TP_LOG_IND4(a,b,c,d,e) {\
                       if (tp4_debug_sel & TP4_LOG_FLOWUP)\
                         _slog (sLogCtrl,_tp4_flowup_logstr,\
		               thisFileName,__LINE__,a,b,c,d,e);\
                    }
  #define TP_LOG_IND5(a,b,c,d,e,f) {\
                       if (tp4_debug_sel & TP4_LOG_FLOWUP)\
                         _slog (sLogCtrl,_tp4_flowup_logstr,\
		               thisFileName,__LINE__,a,b,c,d,e,f);\
                    }
  #define TP_LOG_IND6(a,b,c,d,e,f,g) {\
                       if (tp4_debug_sel & TP4_LOG_FLOWUP)\
                         _slog (sLogCtrl,_tp4_flowup_logstr,\
		               thisFileName,__LINE__,a,b,c,d,e,f,g);\
                    }

		      
  /* continuation log */

  #define TP_LOGC_IND0(a) {\
                     if (tp4_debug_sel & TP4_LOG_FLOWUP)\
                       _slogc (sLogCtrl,a);\
                      }
  #define TP_LOGC_IND1(a,b) {\
                       if (tp4_debug_sel & TP4_LOG_FLOWUP)\
                         _slogc (sLogCtrl,a,b);\
                      }
  #define TP_LOGC_IND2(a,b,c) {\
                       if (tp4_debug_sel & TP4_LOG_FLOWUP)\
                         _slogc (sLogCtrl,a,b,c);\
                      }
  /* hex logging */

  #define TP_LOGH_IND(a,b) {\
                       if (tp4_debug_sel & TP4_LOG_FLOWUP)\
                         _slogHex (sLogCtrl,a,b);\
                      }

  /* continuation hex logging */

  #define TP_LOGHC_IND(a,b) {\
                         if (tp4_debug_sel & TP4_LOG_FLOWUP)\
                           _slogHex (sLogCtrl,a,b);\
                        }

  /*--------------------------------------------*/
  /* Request logging				*/
  /*--------------------------------------------*/

  #define TP_LOG_REQ0(a) {\
                       if (tp4_debug_sel & TP4_LOG_FLOWDOWN)\
                         _slog (sLogCtrl,_tp4_flowup_logstr,\
		               thisFileName,__LINE__,a);\
                      }
  #define TP_LOG_REQ1(a,b) {\
                         if (tp4_debug_sel & TP4_LOG_FLOWDOWN)\
                           _slog (sLogCtrl,_tp4_flowdown_logstr,\
	   	                 thisFileName,__LINE__,a,b);\
                        }
  #define TP_LOG_REQ2(a,b,c) {\
                         if (tp4_debug_sel & TP4_LOG_FLOWDOWN)\
                           _slog (sLogCtrl,_tp4_flowdown_logstr,\
	   	                 thisFileName,__LINE__,a,b,c);\
                        }
  #define TP_LOG_REQ3(a,b,c,d) {\
                         if (tp4_debug_sel & TP4_LOG_FLOWDOWN)\
                           _slog (sLogCtrl,_tp4_flowdown_logstr,\
	   	                 thisFileName,__LINE__,a,b,c,d);\
                        }
  #define TP_LOG_REQ4(a,b,c,d,e) {\
                         if (tp4_debug_sel & TP4_LOG_FLOWDOWN)\
                           _slog (sLogCtrl,_tp4_flowdown_logstr,\
	   	                 thisFileName,__LINE__,a,b,c,d,e);\
                        }
  #define TP_LOG_REQ5(a,b,c,d,e,f) {\
                         if (tp4_debug_sel & TP4_LOG_FLOWDOWN)\
                           _slog (sLogCtrl,_tp4_flowdown_logstr,\
	   	                 thisFileName,__LINE__,a,b,c,d,e,f);\
                        }
  #define TP_LOG_REQ6(a,b,c,d,e,f,g) {\
                         if (tp4_debug_sel & TP4_LOG_FLOWDOWN)\
                           _slog (sLogCtrl,_tp4_flowdown_logstr,\
	   	                 thisFileName,__LINE__,a,b,c,d,e,f,g);\
                        }

  /* continuation log */

  #define TP_LOGC_REQ0(a) {\
                       if (tp4_debug_sel & TP4_LOG_FLOWDOWN)\
                         _slogc (sLogCtrl,a);\
                      }
  #define TP_LOGC_REQ1(a,b) {\
                         if (tp4_debug_sel & TP4_LOG_FLOWDOWN)\
                           _slogc (sLogCtrl,a,b);\
                        }
  #define TP_LOGC_REQ2(a,b,c) {\
                         if (tp4_debug_sel & TP4_LOG_FLOWDOWN)\
                           _slogc (sLogCtrl,a,b,c);\
                        }

  /* hex logging */

  #define TP_LOGH_REQ(a,b) {\
                         if (tp4_debug_sel & TP4_LOG_FLOWDOWN)\
                           _slogHex (sLogCtrl,a,b);\
                        }

  /* continuation hex logging */

  #define TP_LOGHC_REQ(a,b) {\
                         if (tp4_debug_sel & TP4_LOG_FLOWDOWN)\
                           _slogHex (sLogCtrl,a,b);\
                        }

  /*--------------------------------------------------------------------*/
  /* macros below are used to log REQ or IND by passing mask to select 	*/
  /* the logging macro (this is handy in log function so the macros	*/
  /* do not have to repeated in function for REQ and then for IND)	*/
  /*--------------------------------------------------------------------*/

  #define TP_LOG_RI0(m,a)             {if (m == TP_REQ) {TP_LOG_REQ0(a)}             else {TP_LOG_IND0(a)}}
  #define TP_LOG_RI1(m,a,b)           {if (m == TP_REQ) {TP_LOG_REQ1(a,b)}           else {TP_LOG_IND1(a,b)}}
  #define TP_LOG_RI2(m,a,b,c)         {if (m == TP_REQ) {TP_LOG_REQ2(a,b,c)}         else {TP_LOG_IND2(a,b,c)}}
  #define TP_LOG_RI3(m,a,b,c,d)       {if (m == TP_REQ) {TP_LOG_REQ3(a,b,c,d)}       else {TP_LOG_IND3(a,b,c,d)}}
  #define TP_LOG_RI4(m,a,b,c,d,e)     {if (m == TP_REQ) {TP_LOG_REQ4(a,b,c,d,e)}     else {TP_LOG_IND4(a,b,c,d,e)}}
  #define TP_LOG_RI5(m,a,b,c,d,e,f)   {if (m == TP_REQ) {TP_LOG_REQ5(a,b,c,d,e,f)}   else {TP_LOG_IND5(a,b,c,d,e,f)}}
  #define TP_LOG_RI6(m,a,b,c,d,e,f,g) {if (m == TP_REQ) {TP_LOG_REQ6(a,b,c,d,e,f,g)} else {TP_LOG_IND6(a,b,c,d,e,f,g)}}

  #define TP_LOGC_RI0(m,a)     {if (m == TP_REQ) {TP_LOGC_REQ0(a)}     else {TP_LOGC_IND0(a)}}
  #define TP_LOGC_RI1(m,a,b)   {if (m == TP_REQ) {TP_LOGC_REQ1(a,b)}   else {TP_LOGC_IND1(a,b)}}
  #define TP_LOGC_RI2(m,a,b,c) {if (m == TP_REQ) {TP_LOGC_REQ2(a,b,c)} else {TP_LOGC_IND2(a,b,c)}}

  #define TP_LOGH_RI(m,a,b)   {if (m == TP_REQ) {TP_LOGH_REQ(a,b)}    else {TP_LOGH_IND(a,b)}}
  #define TP_LOGHC_RI(m,a,b)  {if (m == TP_REQ) {TP_LOGHC_REQ(a,b)}   else {TP_LOGHC_IND(a,b)}}


#else  /* macros if DEBUG_SISCO not defined */

  /*--------------------------------------------*/
  /* errors logging				*/
  /*--------------------------------------------*/

  #define TP_LOG_ERR0(a)
  #define TP_LOG_ERR1(a,b)
  #define TP_LOG_ERR2(a,b,c)
  #define TP_LOG_ERR3(a,b,c,d)

  #define TP_LOGC_ERR0(a)
  #define TP_LOGC_ERR1(a,b)
  #define TP_LOGC_ERR2(a,b,c)

  #define TP_LOGH_ERR(a,b)
  #define TP_LOGHC_ERR(a,b)

  /*--------------------------------------------*/
  /* Indication logging				*/
  /*--------------------------------------------*/

  #define TP_LOG_IND0(a)
  #define TP_LOG_IND1(a,b)
  #define TP_LOG_IND2(a,b,c)
  #define TP_LOG_IND3(a,b,c,d)
  #define TP_LOG_IND4(a,b,c,d,e)
  #define TP_LOG_IND5(a,b,c,d,e,f)
  #define TP_LOG_IND6(a,b,c,d,e,f,g)

  #define TP_LOGC_IND0(a)
  #define TP_LOGC_IND1(a,b)
  #define TP_LOGC_IND2(a,b,c)

  #define TP_LOGH_IND(a,b)
  #define TP_LOGHC_IND(a,b)

  /*--------------------------------------------*/
  /* Request logging				*/
  /*--------------------------------------------*/

  #define TP_LOG_REQ0(a)
  #define TP_LOG_REQ1(a,b)
  #define TP_LOG_REQ2(a,b,c)
  #define TP_LOG_REQ3(a,b,c,d)
  #define TP_LOG_REQ4(a,b,c,d,e)
  #define TP_LOG_REQ5(a,b,c,d,e,f)
  #define TP_LOG_REQ6(a,b,c,d,e,f,g)

  #define TP_LOGC_REQ0(a)
  #define TP_LOGC_REQ1(a,b)
  #define TP_LOGC_REQ2(a,b,c)

  #define TP_LOGH_REQ(a,b)
  #define TP_LOGHC_REQ(a,b)

  /*--------------------------------------------------------------------*/
  /* macros below are used to log REQ or IND by passing mask		*/
  /*--------------------------------------------------------------------*/

  #define TP_LOG_RI0(m,a)
  #define TP_LOG_RI1(m,a,b)
  #define TP_LOG_RI2(m,a,b,c)
  #define TP_LOG_RI3(m,a,b,c,d)
  #define TP_LOG_RI4(m,a,b,c,d,e)
  #define TP_LOG_RI5(m,a,b,c,d,e,f)
  #define TP_LOG_RI6(m,a,b,c,d,e,f,g)

  #define TP_LOGC_RI0(m,a)
  #define TP_LOGC_RI1(m,a,b)
  #define TP_LOGC_RI2(m,a,b,c)

  #define TP_LOGH_RI(m,a,b)
  #define TP_LOGHC_RI(m,a,b)

#endif

#ifdef __cplusplus
}
#endif

#endif  /* end of 'already included' 	*/

