/*************************************************************************************************/
|
/*!
|
* \file wsf_trace.h
|
*
|
* \brief Trace message interface.
|
*
|
* Copyright (c) 2009-2019 Arm Ltd. All Rights Reserved.
|
*
|
* Copyright (c) 2019-2020 Packetcraft, Inc.
|
*
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
* you may not use this file except in compliance with the License.
|
* You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing, software
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
* limitations under the License.
|
*/
|
/*************************************************************************************************/
|
#ifndef WSF_TRACE_H
|
#define WSF_TRACE_H
|
|
#include <stdarg.h>
|
#include "wsf_types.h"
|
|
#ifdef __cplusplus
|
extern "C" {
|
#endif
|
|
/*! \addtogroup WSF_TRACE_API
|
* \{ */
|
|
/**************************************************************************************************
|
Macros
|
**************************************************************************************************/
|
|
#ifndef WSF_TRACE_ENABLED
|
/*! \brief Trace enable flag (default is disabled, override with compile-time directive). */
|
#define WSF_TRACE_ENABLED FALSE
|
#endif
|
|
#ifndef WSF_TOKEN_ENABLED
|
/*! \brief Tokenized tracing enable flag (default is disabled, override with compile-time directive). */
|
#define WSF_TOKEN_ENABLED FALSE
|
#endif
|
|
#ifndef LL_TRACE_ENABLED
|
/*! \brief Trace enabled for controller */
|
#define LL_TRACE_ENABLED FALSE
|
#endif
|
|
#ifndef AUD_TRACE_ENABLED
|
/*! \brief Trace enabled for audio subsystem */
|
#define AUD_TRACE_ENABLED FALSE
|
#endif
|
|
/**************************************************************************************************
|
Data Types
|
**************************************************************************************************/
|
|
/*! \brief Token event handler. */
|
typedef bool_t (*WsfTraceHandler_t)(const uint8_t *pBuf, uint32_t len);
|
|
/*! \brief BT4 Platform trace callback. */
|
typedef void (*WsfBt4TraceCback_t)(const char *pStr, va_list args);
|
|
/**************************************************************************************************
|
Function Prototypes
|
**************************************************************************************************/
|
|
/*************************************************************************************************/
|
/*!
|
* \brief Output tokenized message.
|
*
|
* \param tok Token
|
* \param var Variable
|
*/
|
/*************************************************************************************************/
|
void WsfToken(uint32_t tok, uint32_t var);
|
|
/*************************************************************************************************/
|
/*!
|
* \brief Enable trace messages.
|
*
|
* \param enable TRUE to enable, FALSE to disable
|
*/
|
/*************************************************************************************************/
|
void WsfTraceEnable(bool_t enable);
|
|
/*************************************************************************************************/
|
/*!
|
* \brief Output trace message.
|
*
|
* \param pStr Format string
|
* Addition parameters variable arguments to the format string.
|
*/
|
/*************************************************************************************************/
|
void WsfTrace(const char *pStr, ...);
|
|
/*************************************************************************************************/
|
/*!
|
* \brief Register trace handler.
|
*
|
* \param traceCback Token event handler.
|
*
|
* This routine registers a token callback. This callback is called when the next token event
|
* is ready to be written to the I/O.
|
*/
|
/*************************************************************************************************/
|
void WsfTraceRegisterHandler(WsfTraceHandler_t traceCback);
|
|
/*************************************************************************************************/
|
/*!
|
* \brief Register BT4 platform trace callback function.
|
*
|
* \param cback Callback function
|
*/
|
/*************************************************************************************************/
|
void WsfTraceRegister(WsfBt4TraceCback_t cback);
|
|
/*************************************************************************************************/
|
/*!
|
* \brief Service the trace ring buffer.
|
*
|
* \return TRUE if trace messages pending, FALSE otherwise.
|
*
|
* This routine is called in the main loop for a "push" type trace systems.
|
*/
|
/*************************************************************************************************/
|
bool_t WsfTokenService(void);
|
|
/**************************************************************************************************
|
Macros
|
**************************************************************************************************/
|
|
#ifdef TOKEN_GENERATION
|
|
#define WSF_TOKEN(subsys, stat, msg) \
|
__WSF_TOKEN_DEFINE__(/* token: */ MODULE_ID, __LINE__, /* origin: */ __FILE__, subsys, /* message: */ stat, msg)
|
|
#define WSF_TRACE0(subsys, stat, msg) WSF_TOKEN(subsys, stat, msg)
|
#define WSF_TRACE1(subsys, stat, msg, var1) WSF_TOKEN(subsys, stat, msg)
|
#define WSF_TRACE2(subsys, stat, msg, var1, var2) WSF_TOKEN(subsys, stat, msg)
|
#define WSF_TRACE3(subsys, stat, msg, var1, var2, var3) WSF_TOKEN(subsys, stat, msg)
|
|
#elif WSF_TOKEN_ENABLED == TRUE
|
|
/** \name Trace macros
|
*
|
*/
|
/**@{*/
|
#define WSF_TRACE0(subsys, stat, msg) WsfToken(((__LINE__ & 0xFFF) << 16) | MODULE_ID, 0)
|
#define WSF_TRACE1(subsys, stat, msg, var1) WsfToken(((__LINE__ & 0xFFF) << 16) | MODULE_ID, (uint32_t)(var1))
|
#define WSF_TRACE2(subsys, stat, msg, var1, var2) \
|
WsfToken(((__LINE__ & 0xFFF) << 16) | MODULE_ID, (uint32_t)(((var2) << 16) | ((var1)&0xFFFF)))
|
#define WSF_TRACE3(subsys, stat, msg, var1, var2, var3) \
|
WsfToken(((__LINE__ & 0xFFF) << 16) | MODULE_ID, \
|
(uint32_t)((((var3)&0xFFFF) << 16) | (((var2)&0xFF) << 8) | ((var1)&0xFF)))
|
/**@}*/
|
|
#elif WSF_TRACE_ENABLED == TRUE
|
|
/** \name Trace macros
|
*
|
*/
|
/**@{*/
|
#define WSF_TRACE0(subsys, stat, msg) WsfTrace(msg)
|
#define WSF_TRACE1(subsys, stat, msg, var1) WsfTrace(msg, var1)
|
#define WSF_TRACE2(subsys, stat, msg, var1, var2) WsfTrace(msg, var1, var2)
|
#define WSF_TRACE3(subsys, stat, msg, var1, var2, var3) WsfTrace(msg, var1, var2, var3)
|
#define WSF_TRACE4(subsys, stat, msg, var1, var2, var3, var4) WsfTrace(msg, var1, var2, var3, var4)
|
#define WSF_TRACE5(subsys, stat, msg, var1, var2, var3, var4, var5) WsfTrace(msg, var1, var2, var3, var4, var5)
|
#define WSF_TRACE6(subsys, stat, msg, var1, var2, var3, var4, var5, var6) \
|
WsfTrace(msg, var1, var2, var3, var4, var5, var6)
|
#define WSF_TRACE7(subsys, stat, msg, var1, var2, var3, var4, var5, var6, var7) \
|
WsfTrace(msg, var1, var2, var3, var4, var5, var6, var7)
|
#define WSF_TRACE8(subsys, stat, msg, var1, var2, var3, var4, var5, var6, var7, var8) \
|
WsfTrace(msg, var1, var2, var3, var4, var5, var6, var7, var8)
|
#define WSF_TRACE9(subsys, stat, msg, var1, var2, var3, var4, var5, var6, var7, var8, var9) \
|
WsfTrace(msg, var1, var2, var3, var4, var5, var6, var7, var8, var9)
|
#define WSF_TRACE12(subsys, stat, msg, var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12) \
|
WsfTrace(msg, var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12)
|
/**@}*/
|
|
#else
|
|
/** \name Trace macros
|
*
|
*/
|
/**@{*/
|
#define WSF_TRACE0(subsys, stat, msg)
|
#define WSF_TRACE1(subsys, stat, msg, var1)
|
#define WSF_TRACE2(subsys, stat, msg, var1, var2)
|
#define WSF_TRACE3(subsys, stat, msg, var1, var2, var3)
|
#define WSF_TRACE4(subsys, stat, msg, var1, var2, var3, var4)
|
#define WSF_TRACE5(subsys, stat, msg, var1, var2, var3, var4, var5)
|
#define WSF_TRACE6(subsys, stat, msg, var1, var2, var3, var4, var5, var6)
|
#define WSF_TRACE7(subsys, stat, msg, var1, var2, var3, var4, var5, var6, var7)
|
#define WSF_TRACE8(subsys, stat, msg, var1, var2, var3, var4, var5, var6, var7, var8)
|
#define WSF_TRACE9(subsys, stat, msg, var1, var2, var3, var4, var5, var6, var7, var8, var9)
|
#define WSF_TRACE12(subsys, stat, msg, var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12)
|
/**@}*/
|
#endif
|
|
/*! \brief 0 argument WSF info trace. */
|
#define WSF_TRACE_INFO0(msg)
|
/*! \brief 1 argument WSF info trace. */
|
#define WSF_TRACE_INFO1(msg, var1)
|
/*! \brief 2 argument WSF info trace. */
|
#define WSF_TRACE_INFO2(msg, var1, var2)
|
/*! \brief 3 argument WSF info trace. */
|
#define WSF_TRACE_INFO3(msg, var1, var2, var3)
|
/*! \brief 0 argument WSF warning trace. */
|
#define WSF_TRACE_WARN0(msg) WSF_TRACE0("WSF", "WARN", msg)
|
/*! \brief 1 argument WSF warning trace. */
|
#define WSF_TRACE_WARN1(msg, var1) WSF_TRACE1("WSF", "WARN", msg, var1)
|
/*! \brief 2 argument WSF warning trace. */
|
#define WSF_TRACE_WARN2(msg, var1, var2) WSF_TRACE2("WSF", "WARN", msg, var1, var2)
|
/*! \brief 3 argument WSF warning trace. */
|
#define WSF_TRACE_WARN3(msg, var1, var2, var3) WSF_TRACE3("WSF", "WARN", msg, var1, var2, var3)
|
/*! \brief 0 argument WSF error trace. */
|
#define WSF_TRACE_ERR0(msg) WSF_TRACE0("WSF", "ERR", msg)
|
/*! \brief 1 argument WSF error trace. */
|
#define WSF_TRACE_ERR1(msg, var1) WSF_TRACE1("WSF", "ERR", msg, var1)
|
/*! \brief 2 argument WSF error trace. */
|
#define WSF_TRACE_ERR2(msg, var1, var2) WSF_TRACE2("WSF", "ERR", msg, var1, var2)
|
/*! \brief 3 argument WSF error trace. */
|
#define WSF_TRACE_ERR3(msg, var1, var2, var3) WSF_TRACE3("WSF", "ERR", msg, var1, var2, var3)
|
/*! \brief 0 argument WSF buffer allocation trace. */
|
#define WSF_TRACE_ALLOC0(msg)
|
/*! \brief 1 argument WSF buffer allocation trace. */
|
#define WSF_TRACE_ALLOC1(msg, var1)
|
/*! \brief 2 argument WSF buffer allocation trace. */
|
#define WSF_TRACE_ALLOC2(msg, var1, var2)
|
/*! \brief 3 argument WSF buffer allocation trace. */
|
#define WSF_TRACE_ALLOC3(msg, var1, var2, var3)
|
/*! \brief 0 argument WSF buffer free trace. */
|
#define WSF_TRACE_FREE0(msg)
|
/*! \brief 1 argument WSF buffer free trace. */
|
#define WSF_TRACE_FREE1(msg, var1)
|
/*! \brief 2 argument WSF buffer free trace. */
|
#define WSF_TRACE_FREE2(msg, var1, var2)
|
/*! \brief 3 argument WSF buffer free trace. */
|
#define WSF_TRACE_FREE3(msg, var1, var2, var3)
|
/*! \brief 0 argument WSF message trace. */
|
#define WSF_TRACE_MSG0(msg)
|
/*! \brief 1 argument WSF message trace. */
|
#define WSF_TRACE_MSG1(msg, var1)
|
/*! \brief 2 argument WSF message trace. */
|
#define WSF_TRACE_MSG2(msg, var1, var2)
|
/*! \brief 3 argument WSF message trace. */
|
#define WSF_TRACE_MSG3(msg, var1, var2, var3)
|
|
/*! \brief 0 argument App info trace. */
|
#define APP_TRACE_INFO0(msg) WSF_TRACE0("APP", "INFO", msg)
|
/*! \brief 1 argument App info trace. */
|
#define APP_TRACE_INFO1(msg, var1) WSF_TRACE1("APP", "INFO", msg, var1)
|
/*! \brief 2 argument App info trace. */
|
#define APP_TRACE_INFO2(msg, var1, var2) WSF_TRACE2("APP", "INFO", msg, var1, var2)
|
/*! \brief 3 argument App info trace. */
|
#define APP_TRACE_INFO3(msg, var1, var2, var3) WSF_TRACE3("APP", "INFO", msg, var1, var2, var3)
|
/*! \brief 4 argument App info trace. */
|
#define APP_TRACE_INFO4(msg, var1, var2, var3, var4) WSF_TRACE4(INFO, APP, msg, var1, var2, var3, var4)
|
/*! \brief 5 argument App info trace. */
|
#define APP_TRACE_INFO5(msg, var1, var2, var3, var4, var5) WSF_TRACE5(INFO, APP, msg, var1, var2, var3, var4, var5)
|
/*! \brief 6 argument App info trace. */
|
#define APP_TRACE_INFO6(msg, var1, var2, var3, var4, var5, var6) \
|
WSF_TRACE6(INFO, APP, msg, var1, var2, var3, var4, var5, var6)
|
/*! \brief 7 argument App info trace. */
|
#define APP_TRACE_INFO7(msg, var1, var2, var3, var4, var5, var6, var7) \
|
WSF_TRACE7(INFO, APP, msg, var1, var2, var3, var4, var5, var6, var7)
|
/*! \brief 8 argument App info trace. */
|
#define APP_TRACE_INFO8(msg, var1, var2, var3, var4, var5, var6, var7, var8) \
|
WSF_TRACE8(INFO, APP, msg, var1, var2, var3, var4, var5, var6, var7, var8)
|
/*! \brief 9 argument App info trace. */
|
#define APP_TRACE_INFO9(msg, var1, var2, var3, var4, var5, var6, var7, var8, var9) \
|
WSF_TRACE9(INFO, APP, msg, var1, var2, var3, var4, var5, var6, var7, var8, var9)
|
/*! \brief 12 argument App info trace. */
|
#define APP_TRACE_INFO12(msg, var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12) \
|
WSF_TRACE12(INFO, APP, msg, var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12)
|
/*! \brief 0 argument App warning trace. */
|
#define APP_TRACE_WARN0(msg) WSF_TRACE0("APP", "WARN", msg)
|
/*! \brief 1 argument App warning trace. */
|
#define APP_TRACE_WARN1(msg, var1) WSF_TRACE1("APP", "WARN", msg, var1)
|
/*! \brief 2 argument App warning trace. */
|
#define APP_TRACE_WARN2(msg, var1, var2) WSF_TRACE2("APP", "WARN", msg, var1, var2)
|
/*! \brief 3 argument App warning trace. */
|
#define APP_TRACE_WARN3(msg, var1, var2, var3) WSF_TRACE3("APP", "WARN", msg, var1, var2, var3)
|
/*! \brief 0 argument App error trace. */
|
#define APP_TRACE_ERR0(msg) WSF_TRACE0("APP", "ERR", msg)
|
/*! \brief 1 argument App error trace. */
|
#define APP_TRACE_ERR1(msg, var1) WSF_TRACE1("APP", "ERR", msg, var1)
|
/*! \brief 2 argument App error trace. */
|
#define APP_TRACE_ERR2(msg, var1, var2) WSF_TRACE2("APP", "ERR", msg, var1, var2)
|
/*! \brief 3 argument App error trace. */
|
#define APP_TRACE_ERR3(msg, var1, var2, var3) WSF_TRACE3("APP", "ERR", msg, var1, var2, var3)
|
|
/*! \} */ /* WSF_TRACE_API */
|
|
#ifdef __cplusplus
|
};
|
#endif
|
|
#endif /* WSF_TRACE_H */
|