1311 lines
62 KiB
C

/*
* Copyright (c) 2012-2022 DSR Corporation, Denver CO, USA
* Copyright (c) 2021-2022 Espressif Systems (Shanghai) PTE LTD
* All rights reserved.
*
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form, except as embedded into a Espressif Systems
* integrated circuit in a product or a software update for such product,
* must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors
* may be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* 4. Any software provided in binary form under this license must not be reverse
* engineered, decompiled, modified and/or disassembled.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/* PURPOSE: ZigBee trace. Application should include it.
*/
#ifndef ZB_LOGGER_H
#define ZB_LOGGER_H 1
#ifdef ZB_TRACE_USE_VA_LIST
#include <stdarg.h>
#endif
/** @cond DOXYGEN_DEBUG_SECTION */
/**
* @addtogroup ZB_TRACE Debug trace
* @{
*/
/** @cond DSR_TRACE */
/**
* @addtogroup ZB_TRACE_CONFIG Trace configuration
* @{
*/
/** @endcond */ /* DSR_TRACE */
#if defined(ZB_TRACE_LEVEL)
/** @cond DOXYGEN_INTERNAL_DOC */
extern zb_uint8_t g_trace_level, g_o_trace_level;
extern zb_uint32_t g_trace_mask;
extern zb_uint_t g_trace_inside_intr;
/** @endcond */ /* DOXYGEN_INTERNAL_DOC */
/**
Set trace level at runtime
That macro can switch trace level on and off. Trace level must be included
into build at compile time by setting ZB_TRACE_LEVEL compiler time define.
@param l - new trace level.
@par Example
@snippet thermostat/thermostat_zr/thermostat_zr.c set_trace
@par
*/
#define ZB_SET_TRACE_LEVEL(l) g_trace_level = (l)
/**
Switch off all trace at runtime
*/
#define ZB_SET_TRACE_OFF() g_o_trace_level = g_trace_level, g_trace_level = 0U
/**
Switch on trace at runtime
That macro enables trace which was active before call to ZB_SET_TRACE_OFF().
@snippet light_sample/dimmable_light/bulb.c switch_trace_on
*/
#define ZB_SET_TRACE_ON() g_trace_level = g_o_trace_level
/**
Set trace mask at runtime
That macro can switch trace mask on and off. Trace mask must be included
into build at compile time by setting ZB_TRACE_MASK compiler time define.
@param m - new trace mask.
@par Example
@snippet thermostat/thermostat_zr/thermostat_zr.c set_trace
@par
*/
#define ZB_SET_TRACE_MASK(m) g_trace_mask = (m)
#else
#define ZB_SET_TRACE_OFF()
#define ZB_SET_TRACE_LEVEL(l)
#define ZB_SET_TRACE_ON()
#define ZB_SET_TRACE_MASK(m)
#endif /* defined(ZB_TRACE_LEVEL) */
/** @cond DSR_TRACE */
/** @} */ /* ZB_TRACE_CONFIG */
/** @endcond */ /* DSR_TRACE */
/** @cond DSR_TRACE */
/**
* @addtogroup TRACE_SUBSYSTEMS
* @{
*/
#define TRACE_SUBSYSTEM_COMMON 0x0001U /**< Common subsystem. */
#define TRACE_SUBSYSTEM_MEM 0x0002U /**< MEM subsystem (buffers pool). */
#define TRACE_SUBSYSTEM_MAC 0x0004U /**< MAC subsystem. */
#define TRACE_SUBSYSTEM_NWK 0x0008U /**< NWK subsystem. */
#define TRACE_SUBSYSTEM_APS 0x0010U /**< APS subsystem. */
#define TRACE_SUBSYSTEM_ZSE 0x0020U /**< ZSE subsystem. */
#define TRACE_SUBSYSTEM_ZDO 0x0040U /**< ZDO subsystem. */
#define TRACE_SUBSYSTEM_SECUR 0x0080U /**< Security subsystem. */
#define TRACE_SUBSYSTEM_ZCL 0x0100U /**< ZCL subsystem. */
/** @cond DOXYGEN_TOUCHLINK_FEATURE */
#define TRACE_SUBSYSTEM_ZLL 0x0200U /**< ZLL/Touchlink subsystem. */
/** @endcond */ /* DOXYGEN_TOUCHLINK_FEATURE */
/** @cond DOXYGEN_INTERNAL_DOC */
#define TRACE_SUBSYSTEM_SSL 0x0400U /**< SSL subsystem - not really used */
#define TRACE_SUBSYSTEM_NCP_TRANSPORT TRACE_SUBSYSTEM_SSL
#define TRACE_SUBSYSTEM_MACSPLIT TRACE_SUBSYSTEM_NCP_TRANSPORT
/** @endcond */ /* DOXYGEN_INTERNAL_DOC */
/** @endcond */ /* DSR_TRACE */
#define TRACE_SUBSYSTEM_APP 0x0800U /**< User Application */
/** @cond DOXYGEN_INTERNAL_DOC */
#define TRACE_SUBSYSTEM_LWIP 0x1000U /* LWIP is used, else free */
#define TRACE_SUBSYSTEM_ALIEN 0x2000U /* Some special debug */
/** @endcond */ /* DOXYGEN_INTERNAL_DOC */
#define TRACE_SUBSYSTEM_ZGP 0x4000U /**< ZGP subsystem */
/** @cond DOXYGEN_INTERNAL_DOC */
#define TRACE_SUBSYSTEM_MAC_API 0x8000U /**< MAC API subsystem */
#define TRACE_SUBSYSTEM_MACLL 0x10000U /**< MAC LL subsystem */
#define TRACE_SUBSYSTEM_SPECIAL1 0x20000U /**< Special subsystem */
#define TRACE_SUBSYSTEM_BATTERY 0x40000U /**< Battery subsystem */
#define TRACE_SUBSYSTEM_OTA 0x80000U /**< OTA subsystem */
#define TRACE_SUBSYSTEM_TRANSPORT 0x100000U /**< Transport subsystem */
#define TRACE_SUBSYSTEM_USB 0x200000U /**< USB subsystem */
#define TRACE_SUBSYSTEM_SPI 0x400000U /**< SPI subsystem */
#define TRACE_SUBSYSTEM_UART 0x800000U /**< UART subsystem */
#define TRACE_SUBSYSTEM_JSON 0x1000000U /**< JSON subsystem */
#define TRACE_SUBSYSTEM_HTTP 0x2000000U /**< HTTP subsystem */
#define TRACE_SUBSYSTEM_CLOUD 0x4000000U /**< Interface to the Cloud */
#define TRACE_SUBSYSTEM_ZBDIRECT 0x8000000U /**< Zigbee Direct subsystem */
#define TRACE_SUBSYSTEM_DIAGNOSTIC 0x10000000U /**< Diagnostic subsystem */
#define TRACE_SUBSYSTEM_NS 0x20000000U /**< Network simulator subsystem */
#define TRACE_SUBSYSTEM_TEST 0x40000000U /**< Subsystem for tests and CI */
/** @endcond */ /* DOXYGEN_INTERNAL_DOC */
#define TRACE_SUBSYSTEM_INFO ((zb_uint_t)-1) /**< Common subsystem */
/* to be continued... */
/** @cond DSR_TRACE */
/** @} */ /* TRACE_SUBSYSTEMS */
/** @endcond */ /* DSR_TRACE */
/** @} */ /* ZB_TRACE */
/**
* @addtogroup ZB_TRACE Debug trace
* @{
*/
#if defined ZB_TRACE_LEVEL || defined DOXYGEN
/**
* @addtogroup ZB_TRACE_CONFIG Trace configuration
* @{
*/
#ifndef DOXYGEN
#define TRACE_ENABLED_(mask,lev) ((lev) <= ZB_TRACE_LEVEL && ((mask) & ZB_TRACE_MASK))
#endif /* DOXYGEN */
/**
* @brief Check that trace is enabled for provided level.
* To be used in constructions like:
* @code
* if (TRACE_ENABLED(TRACE_APS3))
* {
* call_some_complex_trace();
* }
* @endcode
* @param m - trace level macro.
* @return 1 if enabled, 0 if disabled.
*/
#ifndef TRACE_ENABLED
#define TRACE_ENABLED(m) TRACE_ENABLED_(m)
#endif /* TRACE_ENABLED */
#ifndef DOXYGEN
zb_uint32_t zb_trace_get_counter(void);
#endif /* DOXYGEN */
#ifdef DOXYGEN
/**
Trace file ID used by win_com_dump to identify source file.
Must be first define in the .c file, just before first include directive.
@par Example
@snippet light_sample/dimmable_light/bulb.c trace_file_id
@par
*/
#define ZB_TRACE_FILE_ID 12345U
#endif
/** @} */ /* ZB_TRACE_CONFIG */
/** @cond DOXYGEN_INTERNAL_DOC */
#ifdef ZB_INTERRUPT_SAFE_CALLBACKS
/* If HW can detect that we are inside ISR, let's use it and do not trace from ISR. */
zb_bool_t zb_osif_is_inside_isr(void);
#define ZB_HW_IS_INSIDE_ISR() zb_osif_is_inside_isr()
#else
#define ZB_HW_IS_INSIDE_ISR() 0
#endif
#define TRACE_ENTER_INT() g_trace_inside_intr = 1U
#define TRACE_LEAVE_INT() g_trace_inside_intr = 0U
#define ZB_TRACE_INSIDE_INTR() (g_trace_inside_intr || ZB_HW_IS_INSIDE_ISR())
#ifndef ZB_TRACE_FROM_INTR
#define ZB_TRACE_INSIDE_INTR_BLOCK() ZB_TRACE_INSIDE_INTR()
#else
#define ZB_TRACE_INSIDE_INTR_BLOCK() 0
#endif
/** @endcond */ /* DOXYGEN_INTERNAL_DOC */
/**
* @brief A universal way to print raw string as trace message.
*/
void zb_trace_str(const zb_char_t *str);
#if defined ZB_TRACE_TO_FILE || defined ZB_TRACE_TO_SYSLOG || defined DOXYGEN
/** @cond DOXYGEN_INTERNAL_DOC */
/**
\par Trace to file means trace to disk file using printf() or its analog.
Tricks to decrease code size by excluding format strings are not used.
*/
void zb_trace_init_file(zb_char_t *name);
void zb_trace_deinit_file(void);
void zb_trace_file_commit(void);
void zb_trace_disable_deinit(void);
zb_bool_t zb_trace_is_disable_deinit(void);
void zb_trace_file_flush(void);
#ifdef ZB_USE_LOGFILE_ROTATE
void zb_trace_check_rotate(void);
#endif
/**
Initialize trace subsystem
@param name - trace file name component
*/
#define TRACE_INIT(name) zb_trace_init_file(name)
/** @endcond */ /* DOXYGEN_INTERNAL_DOC */
/**
Deinitialize trace subsystem
*/
#define TRACE_DEINIT zb_trace_deinit_file
/** @cond DOXYGEN_INTERNAL_DOC */
#define ZB_T0_TRACE(...) __VA_ARGS__
#if defined ZB_TRACE_USE_VA_LIST && (defined ZB_BINARY_AND_TEXT_TRACE_MODE || defined ZB_TRACE_TO_SYSLOG || !defined ZB_BINARY_TRACE)
/**
* @brief Print trace message. Option with va_list
*/
void zb_trace_msg_txt_file_vl(
zb_uint_t mask,
zb_uint_t level,
const zb_char_t *format,
const zb_char_t *file_name,
zb_int_t line_number,
zb_int_t args_size,
va_list arglist);
#endif
#if defined ZB_BINARY_TRACE && !defined ZB_TRACE_TO_SYSLOG
/**
* @brief Print binary trace message.
*/
void zb_trace_msg_bin_file(
zb_uint_t mask,
zb_uint_t level,
#if defined ZB_BINARY_AND_TEXT_TRACE_MODE
zb_char_t *file_name,
#endif
zb_uint16_t file_id,
zb_int_t line_number,
zb_int_t args_size, ...);
#ifdef ZB_TRACE_USE_VA_LIST
/**
* @brief Print binary trace message. Option with va_list
*/
void zb_trace_msg_bin_file_vl(
zb_uint_t mask,
zb_uint_t level,
zb_uint16_t file_id,
zb_int_t line_number,
zb_int_t args_size,
va_list arglist);
#endif
#if defined ZB_BINARY_AND_TEXT_TRACE_MODE
#define ZB_TRACE_MODE_BINARY 0U
#define ZB_TRACE_MODE_TEXT 1U
extern zb_uint8_t g_trace_text_mode;
void zb_trace_set_mode(zb_uint8_t mode);
/**
* @brief Print trace message.
*/
void zb_trace_msg_txt_file(
zb_uint_t mask,
zb_uint_t level,
const zb_char_t *format,
const zb_char_t *file_name,
zb_uint16_t file_id,
zb_int_t line_number,
zb_int_t args_size, ...);
#define ZB_T1_TRACE(s, l, fmts, args) \
if ((zb_int_t)ZB_TRACE_LEVEL>=(zb_int_t)l && \
((s) & ZB_TRACE_MASK)) \
{ \
if (g_trace_text_mode == 0U) \
{ \
zb_trace_msg_bin_file(s, l, ZB_T0_TRACE args); \
} \
else \
{ \
zb_trace_msg_txt_file(s, l, fmts, ZB_T0_TRACE args); \
} \
}
#else
#define ZB_T1_TRACE(s, l, fmts, args) if ((zb_int_t)ZB_TRACE_LEVEL>=(zb_int_t)l && ((s) & ZB_TRACE_MASK)) zb_trace_msg_bin_file(s, l, ZB_T0_TRACE args)
#endif
#else
/**
* @brief Print trace message.
*/
void zb_trace_msg_txt_file(
zb_uint_t mask,
zb_uint_t level,
const zb_char_t *format,
const zb_char_t *file_name,
zb_int_t line_number,
zb_int_t args_size, ...);
#define ZB_T1_TRACE(s, l, fmts, args) if ((zb_int_t)ZB_TRACE_LEVEL>=(zb_int_t)l && ((s) & ZB_TRACE_MASK)) zb_trace_msg_txt_file(s, l, fmts, ZB_T0_TRACE args)
#endif
/** @endcond */ /* DOXYGEN_INTERNAL_DOC */
/**
* @brief Put trace output.
* @param lm - trace subsystem and level marker.
* @param fmts - printf()-like format string.
* @param args - format string substitution parameters with a size marker.
*
* @par Example
* @snippet light_sample/dimmable_light/bulb.c trace_msg
* @par
*/
#define TRACE_MSG(lm, fmts, args) \
do { \
ZB_T1_TRACE(lm, fmts, args); \
} while (0)
/** @cond DOXYGEN_INTERNAL_DOC */
#elif (defined ZB_TRACE_TO_PORT || defined ZB_TRACE_OVER_SIF)
/*
8051 trace does not use format string in the code to save code space.
- will modify trace at device only, Linux will work as before
- trace implementation will hex dump all arguments as set of bytes
- external utility will parse dump, divide trace arguments dump into separate arguments and
convert hex-int, unsigned etc.
- utility will get argument strings from the source files (trace macros) and find it
by file:line
- Add one more parameter to the trace macro: sum of the trace argument sizes.
Define readable constants like
#define FMT_D_HD_X 5
- create script/program to modify existing trace calls
- combine dump parse utility functionality with win_com_dump, so it will produce human-readable trace
*/
#if defined ZB_TRACE_OVER_SIF
#define TRACE_INIT(name) zb_osif_sif_init()
#elif ! defined ZB_SERIAL_FOR_TRACE || defined ZB_TRACE_OVER_JTAG
#define TRACE_INIT(name)
#else
#define TRACE_INIT(name) zb_serial_trace_init(name)
#endif /* defined ZB_TRACE_OVER_SIF */
/* No trace deinit */
#define TRACE_DEINIT()
#ifndef ZB_BINARY_TRACE
void zb_trace_msg_port(
const zb_char_t ZB_IAR_CODE *file_name,
zb_int_t line_number,
zb_uint8_t args_size, ...);
#else
#ifndef ZB_TRACE_FILE_ID
#ifndef ZB_DONT_NEED_TRACE_FILE_ID
#warning ZB_TRACE_FILE_ID undefined! Insert #define ZB_TRACE_FILE_ID NNN before 1-st #include
#endif
#define ZB_TRACE_FILE_ID 0
#else
ZB_ASSERT_COMPILE_DECL(ZB_TRACE_FILE_ID < ZB_UINT16_MAX);
#endif
void zb_trace_msg_port(
zb_uint_t mask,
zb_uint_t level,
zb_uint16_t file_id,
zb_uint16_t line_number,
zb_uint_t args_size, ...);
#ifdef ZB_TRACE_USE_VA_LIST
/* Option with va_list */
void zb_trace_msg_port_vl(
zb_uint_t mask,
zb_uint_t level,
zb_uint16_t file_id,
zb_uint16_t line_number,
zb_uint_t args_size,
va_list arglist);
#endif
#endif
#ifdef ZB_BINARY_TRACE
#define ZB_T0_TRACE(...) __VA_ARGS__
#ifndef ZB_T1_TRACE
#define ZB_T1_TRACE(s, l, args) if ((zb_int_t)ZB_TRACE_LEVEL>=(zb_int_t)l && ((s) == (zb_uint_t)-1 || (s) & ZB_TRACE_MASK) && !ZB_TRACE_INSIDE_INTR_BLOCK()) zb_trace_msg_port(s, l, ZB_T0_TRACE args)
#endif /* ZB_T1_TRACE */
#else
#define ZB_T1_TRACE(s, l, args) \
if ((zb_int_t)ZB_TRACE_LEVEL>=(zb_int_t)l && ((s) == -1 || ((s) & ZB_TRACE_MASK)) && !ZB_TRACE_INSIDE_INTR_BLOCK()) zb_trace_msg_port args
#endif
#define TRACE_MSG(lm, fmt, args) \
do { \
ZB_T1_TRACE(lm, fmt, args); \
} while (0)
#else
#error Must define either ZB_TRACE_TO_FILE or ZB_TRACE_TO_PORT || ZB_TRACE_OVER_SIF
#endif /* trace type */
#else /* if trace off */
#ifndef KEIL
#define TRACE_MSG(...) ((void)0)
#else
/* Keil does not support vararg macros */
#define TRACE_MSG(a,b,c) ((void)0)
#endif
#define TRACE_INIT(name)
#define TRACE_DEINIT(c)
#define TRACE_ENABLED(m) ZB_FALSE
#define TRACE_ENTER_INT()
#define TRACE_LEAVE_INT()
#endif /* trace on/off */
/** @endcond */ /* DOXYGEN_INTERNAL_DOC */
/** @cond DSR_TRACE */
/**
* @addtogroup TRACE_DATA_FORMAT_ADDITIONAL Trace data format for keys
* @{
*/
#if defined ZB_TRACE_TO_FILE || defined ZB_TRACE_TO_SYSLOG || defined ZB_TRACE_TO_PORT || defined DOXYGEN
/**
Trace format for 64-bit address.
@snippet light_sample/dimmable_light/bulb.c trace_64_example_variable
@snippet light_sample/dimmable_light/bulb.c trace_64_example
*/
#define TRACE_FORMAT_64 "%02hx:%02hx:%02hx:%02hx:%02hx:%02hx:%02hx:%02hx"
/**
Trace format for 128-bit number (key etc).
@snippet se/energy_service_interface/se_esi_zc.c TRACE_128
*/
#define TRACE_FORMAT_128 "%02hx:%02hx:%02hx:%02hx:%02hx:%02hx:%02hx:%02hx:%02hx:%02hx:%02hx:%02hx:%02hx:%02hx:%02hx:%02hx"
/**
Trace format arguments for 64-bit address.
@snippet light_sample/dimmable_light/bulb.c trace_64_example_variable
@snippet light_sample/dimmable_light/bulb.c trace_64_example
*/
#define TRACE_ARG_64(a) (zb_uint8_t)((a)[7]),(zb_uint8_t)((a)[6]),(zb_uint8_t)((a)[5]),(zb_uint8_t)((a)[4]),(zb_uint8_t)((a)[3]),(zb_uint8_t)((a)[2]),(zb_uint8_t)((a)[1]),(zb_uint8_t)((a)[0])
/**
Trace format arguments for 128-bit number.
@snippet se/energy_service_interface/se_esi_zc.c TRACE_128
*/
#define TRACE_ARG_128(a) (zb_uint8_t)((a)[0]),(zb_uint8_t)((a)[1]),(zb_uint8_t)((a)[2]),(zb_uint8_t)((a)[3]),(zb_uint8_t)((a)[4]),(zb_uint8_t)((a)[5]),(zb_uint8_t)((a)[6]),(zb_uint8_t)((a)[7]),(zb_uint8_t)((a)[8]),(zb_uint8_t)((a)[9]),(zb_uint8_t)((a)[10]),(zb_uint8_t)((a)[11]),(zb_uint8_t)((a)[12]),(zb_uint8_t)((a)[13]),(zb_uint8_t)((a)[14]),(zb_uint8_t)((a)[15])
#else
/** @brief Trace format for 64-bit address - single argument for 8051. */
#define TRACE_FORMAT_64 "%A"
#define TRACE_FORMAT_128 "%A:%A"
/** @endcond */ /* DSR_TRACE */
/** @cond internals_doc */
typedef struct zb_addr64_struct_s
{
zb_64bit_addr_t addr;
} ZB_PACKED_STRUCT zb_addr64_struct_t;
typedef struct zb_byte128_struct_s
{
zb_uint8_t d[16];
} ZB_PACKED_STRUCT zb_byte128_struct_t;
/* Pass 8-bytes address as structure by value */
#define TRACE_ARG_64(a) *((zb_addr64_struct_t *)a)
/* Pass 16-bytes key as structure by value */
#define TRACE_ARG_128(a) *((zb_byte128_struct_t *)a)
/** @endcond */ /* internals_doc */
/** @cond DSR_TRACE */
#endif /* ti file / !to file */
/** @} */ /* TRACE_DATA_FORMAT_ADDITIONAL */
/** @endcond */ /* DSR_TRACE */
/** @cond DSR_TRACE */
/**
* @addtogroup TRACE_GENERAL_MESSAGES
* @{
*/
/** @brief Error message. */
#define TRACE_ERROR TRACE_SUBSYSTEM_INFO, 0U
/** @brief Information message level 1. */
#define TRACE_INFO1 TRACE_SUBSYSTEM_INFO, 1U
/** @brief Information message level 2. */
#define TRACE_INFO2 TRACE_SUBSYSTEM_INFO, 2U
/** @brief Information message level 3. */
#define TRACE_INFO3 TRACE_SUBSYSTEM_INFO, 3U
/** @} */ /* TRACE_GENERAL_MESSAGES */
#ifdef ZB_TRACE_LEVEL
#ifndef ZB_TRACE_MASK
#define ZB_TRACE_MASK ((zb_uint_t)-1)
#endif /* if not defined trace_mask */
#endif /* if defined trace level */
/**
* @addtogroup TRACE_DATA_FORMAT
* @{
*/
/*
Trace format constants for serial trace
*/
/* Keil and sdcc put byte values to the stack as is, but IAR/8051 casts it to 16-bit
* integers, so constant lengths differs */
/**
* @brief Calculates trace argument size.
* @param n_h - number of Hs/Cs.
* @param n_d - number of Ds.
* @param n_l - number of Ls.
* @param n_p - number of Ps.
* @param n_a - number of As.
* @hideinitializer
*/
#ifdef KEIL
/* Keil pass 1-byte to varargs as is, pointer is 3-bytes, short is 2-bytes */
#ifndef ZB_BINARY_TRACE
#define TRACE_ARG_SIZE(n_h, n_d, n_l, n_p, n_a) __FILE__,__LINE__, (n_h + n_d*2 + n_l*4 + n_p*3 + n_a*8)
#else
#define TRACE_ARG_SIZE(n_h, n_d, n_l, n_p, n_a) ZB_TRACE_FILE_ID,__LINE__, (n_h + n_d*2 + n_l*4 + n_p*3 + n_a*8)
#endif
#elif defined ZB_PLATFORM_XAP5
#ifndef __XAP5_NEAR__
/* XAP5 passes bytes as shorts */
#ifndef ZB_BINARY_TRACE
#define TRACE_ARG_SIZE(n_h, n_d, n_l, n_p, n_a) __FILE__,__LINE__, (n_h*2 + n_d*2 + n_l*4 + n_p*4 + n_a*8)
#else
#define TRACE_ARG_SIZE(n_h, n_d, n_l, n_p, n_a) ZB_TRACE_FILE_ID,__LINE__, (n_h*2 + n_d*2 + n_l*4 + n_p*4 + n_a*8)
#endif
#else
#ifndef ZB_BINARY_TRACE
#define TRACE_ARG_SIZE(n_h, n_d, n_l, n_p, n_a) __FILE__,__LINE__, (n_h*2 + n_d*2 + n_l*4 + n_p*2 + n_a*8)
#else
#define TRACE_ARG_SIZE(n_h, n_d, n_l, n_p, n_a) ZB_TRACE_FILE_ID,__LINE__, (n_h*2 + n_d*2 + n_l*4 + n_p*2 + n_a*8)
#endif
#endif
#else /* IAR & GCC - 32-bit */
/* IAR for Cortex passes 1-byte abd 2-bytes arguments as 4-bytes to vararg functions.
* Pointers are 4-bytes. */
#if defined ZB_BINARY_TRACE && !defined ZB_TRACE_TO_SYSLOG
#if defined ZB_BINARY_AND_TEXT_TRACE_MODE
#define TRACE_ARG_SIZE(n_h, n_d, n_l, n_p, n_a) __FILE__,ZB_TRACE_FILE_ID,__LINE__, (n_h*4 + n_d*4 + n_l*4 + n_p*4 + n_a*8)
#else
#define TRACE_ARG_SIZE(n_h, n_d, n_l, n_p, n_a) ZB_TRACE_FILE_ID,__LINE__, (n_h*4 + n_d*4 + n_l*4 + n_p*4 + n_a*8)
#endif
#else
#define TRACE_ARG_SIZE(n_h, n_d, n_l, n_p, n_a) __FILE__,__LINE__, (n_h*4 + n_d*4 + n_l*4 + n_p*4 + n_a*8)
#endif
#endif
#define FMT__0 TRACE_ARG_SIZE(0,0,0,0,0)
#define FMT__A TRACE_ARG_SIZE(0,0,0,0,1)
#define FMT__A_A TRACE_ARG_SIZE(0,0,0,0,2)
#define FMT__A_A_A_A TRACE_ARG_SIZE(0,0,0,0,4)
#define FMT__A_D_A_P TRACE_ARG_SIZE(0,1,0,1,2)
#define FMT__A_D_D TRACE_ARG_SIZE(0,2,0,0,1)
#define FMT__A_D_D_D TRACE_ARG_SIZE(0,3,0,0,1)
#define FMT__A_D_D_P_H TRACE_ARG_SIZE(1,2,0,1,1)
#define FMT__A_D_H TRACE_ARG_SIZE(1,1,0,0,1)
#define FMT__A_D_H_H TRACE_ARG_SIZE(2,1,0,0,1)
#define FMT__A_D_P_H_H_H TRACE_ARG_SIZE(3,1,0,1,1)
#define FMT__A_H TRACE_ARG_SIZE(1,0,0,0,1)
#define FMT__A_H_H TRACE_ARG_SIZE(2,0,0,0,1)
#define FMT__A_H_H_H TRACE_ARG_SIZE(3,0,0,0,1)
#define FMT__A_D_H_H_H TRACE_ARG_SIZE(3,1,0,0,1)
#define FMT__A_P TRACE_ARG_SIZE(0,0,0,1,1)
#define FMT__AA TRACE_ARG_SIZE(0,0,0,0,2)
#define FMT__C TRACE_ARG_SIZE(1,0,0,0,0)
#define FMT__C_C TRACE_ARG_SIZE(2,0,0,0,0)
#define FMT__C_C_C TRACE_ARG_SIZE(3,0,0,0,0)
#define FMT__C_C_C_C TRACE_ARG_SIZE(4,0,0,0,0)
#define FMT__C_C_C_C_C TRACE_ARG_SIZE(5,0,0,0,0)
#define FMT__C_C_H_H TRACE_ARG_SIZE(4,0,0,0,0)
#define FMT__C_H TRACE_ARG_SIZE(2,0,0,0,0)
#define FMT__D TRACE_ARG_SIZE(0,1,0,0,0)
#define FMT__D_A TRACE_ARG_SIZE(0,1,0,0,1)
#define FMT__D_A_A_H TRACE_ARG_SIZE(1,1,0,0,2)
#define FMT__D_A_D_D_D_D_D_D_D_D TRACE_ARG_SIZE(0,9,0,0,1)
#define FMT__D_A_D_P_H_H_H TRACE_ARG_SIZE(3,2,0,1,1)
#define FMT__D_A_H_H TRACE_ARG_SIZE(2,1,0,0,1)
#define FMT__D_A_P TRACE_ARG_SIZE(0,1,0,1,1)
#define FMT__D_C TRACE_ARG_SIZE(1,1,0,0,0)
#define FMT__D_D TRACE_ARG_SIZE(0,2,0,0,0)
#define FMT__D_D_A TRACE_ARG_SIZE(0,2,0,0,1)
#define FMT__D_D_A_A TRACE_ARG_SIZE(0,2,0,0,2)
#define FMT__D_D_A_D TRACE_ARG_SIZE(0,3,0,0,1)
#define FMT__D_D_A_D_D_D_D TRACE_ARG_SIZE(0,6,0,0,1)
#define FMT__D_D_D TRACE_ARG_SIZE(0,3,0,0,0)
#define FMT__D_D_D_C TRACE_ARG_SIZE(1,3,0,0,0)
#define FMT__D_D_D_D TRACE_ARG_SIZE(0,4,0,0,0)
#define FMT__D_D_D_D_D TRACE_ARG_SIZE(0,5,0,0,0)
#define FMT__D_D_D_D_D_D TRACE_ARG_SIZE(0,6,0,0,0)
#define FMT__D_D_D_D_D_D_D TRACE_ARG_SIZE(0,7,0,0,0)
#define FMT__D_D_D_D_D_D_D_D TRACE_ARG_SIZE(0,8,0,0,0)
#define FMT__D_D_D_D_D_D_D_D_D_D_D TRACE_ARG_SIZE(0,11,0,0,0)
#define FMT__D_D_D_D_D_D_D_D_D_D_D_D_D_D TRACE_ARG_SIZE(0,14,0,0,0)
#define FMT__D_D_D_D_D_D_D_D_D_D_D_D_D_D_D TRACE_ARG_SIZE(0,15,0,0,0)
#define FMT__D_D_D_D_D_D_D_D_D_D_D_D_D_D_D_D_D TRACE_ARG_SIZE(0,17,0,0,0)
#define FMT__D_D_D_D_D_D_P TRACE_ARG_SIZE(0,6,0,1,0)
#define FMT__D_D_D_D_H TRACE_ARG_SIZE(1,4,0,0,0)
#define FMT__D_D_D_H TRACE_ARG_SIZE(1,3,0,0,0)
#define FMT__D_D_D_H_H TRACE_ARG_SIZE(2,3,0,0,0)
#define FMT__D_D_D_L TRACE_ARG_SIZE(0,3,1,0,0)
#define FMT__D_D_D_L_L TRACE_ARG_SIZE(0,3,2,0,0)
#define FMT__D_D_D_P TRACE_ARG_SIZE(0,3,0,1,0)
#define FMT__D_D_H TRACE_ARG_SIZE(1,2,0,0,0)
#define FMT__D_D_H_D_H TRACE_ARG_SIZE(2,3,0,0,0)
#define FMT__D_D_H_H TRACE_ARG_SIZE(2,2,0,0,0)
#define FMT__D_D_H_P_D TRACE_ARG_SIZE(1,3,0,1,0)
#define FMT__D_D_L TRACE_ARG_SIZE(0,2,1,0,0)
#define FMT__D_D_L_P TRACE_ARG_SIZE(0,2,1,1,0)
#define FMT__D_D_P TRACE_ARG_SIZE(0,2,0,1,0)
#define FMT__D_D_P_D TRACE_ARG_SIZE(0,3,0,1,0)
#define FMT__D_P_P_D TRACE_ARG_SIZE(0,2,0,2,0)
#define FMT__D_P_P_P TRACE_ARG_SIZE(0,1,0,3,0)
#define FMT__D_D_P_D_D TRACE_ARG_SIZE(0,4,0,1,0)
#define FMT__D_D_P_D_L TRACE_ARG_SIZE(0,3,1,1,0)
#define FMT__D_D_P_H TRACE_ARG_SIZE(1,2,0,1,0)
#define FMT__D_D_P_H_H_H TRACE_ARG_SIZE(3,2,0,1,0)
#define FMT__D_D_P_P_P TRACE_ARG_SIZE(0,2,0,3,0)
#define FMT__D_H TRACE_ARG_SIZE(1,1,0,0,0)
#define FMT__D_H_A_D_D_D_H TRACE_ARG_SIZE(2,4,0,0,1)
#define FMT__D_H_D TRACE_ARG_SIZE(1,2,0,0,0)
#define FMT__D_H_D_D TRACE_ARG_SIZE(1,3,0,0,0)
#define FMT__D_H_D_D_H TRACE_ARG_SIZE(2,3,0,0,0)
#define FMT__D_H_D_D_H_D TRACE_ARG_SIZE(2,4,0,0,0)
#define FMT__D_H_D_H TRACE_ARG_SIZE(2,2,0,0,0)
#define FMT__D_H_D_H_H TRACE_ARG_SIZE(3,2,0,0,0)
#define FMT__D_H_D_P TRACE_ARG_SIZE(1,2,0,1,0)
#define FMT__D_H_D_P_D TRACE_ARG_SIZE(1,3,0,1,0)
#define FMT__D_H_H TRACE_ARG_SIZE(2,1,0,0,0)
#define FMT__D_H_H_D TRACE_ARG_SIZE(2,2,0,0,0)
#define FMT__D_H_H_D_H TRACE_ARG_SIZE(3,2,0,0,0)
#define FMT__D_H_H_D_H_D TRACE_ARG_SIZE(3,3,0,0,0)
#define FMT__D_H_H_D_D_D_D TRACE_ARG_SIZE(2,5,0,0,0)
#define FMT__D_H_H_H TRACE_ARG_SIZE(3,1,0,0,0)
#define FMT__D_H_H_H_H TRACE_ARG_SIZE(4,1,0,0,0)
#define FMT__D_H_H_H_H_H TRACE_ARG_SIZE(5,1,0,0,0)
#define FMT__D_H_H_H_H_H_H_D_D_D_D TRACE_ARG_SIZE(6,5,0,0,0)
#define FMT__D_H_L TRACE_ARG_SIZE(1,1,1,0,0)
#define FMT__D_H_P TRACE_ARG_SIZE(1,1,0,1,0)
#define FMT__D_L TRACE_ARG_SIZE(0,1,1,0,0)
#define FMT__D_L_L TRACE_ARG_SIZE(0,1,2,0,0)
#define FMT__D_L_L_D TRACE_ARG_SIZE(0,2,2,0,0)
#define FMT__D_L_L_H TRACE_ARG_SIZE(1,1,2,0,0)
#define FMT__D_L_L_L TRACE_ARG_SIZE(0,1,3,0,0)
#define FMT__D_P TRACE_ARG_SIZE(0,1,0,1,0)
#define FMT__D_P_D TRACE_ARG_SIZE(0,2,0,1,0)
#define FMT__D_P_D_D TRACE_ARG_SIZE(0,3,0,1,0)
#define FMT__D_P_H_H_D_D TRACE_ARG_SIZE(2,3,0,1,0)
#define FMT__D_P_H_H_D_H_H TRACE_ARG_SIZE(4,2,0,1,0)
#define FMT__D_P_H_H_H_H TRACE_ARG_SIZE(4,1,0,1,0)
#define FMT__D_P_H_H_H_H_H TRACE_ARG_SIZE(5,1,0,1,0)
#define FMT__D_P_H_H_H_H_H_H TRACE_ARG_SIZE(6,1,0,1,0)
#define FMT__D_P_H_P TRACE_ARG_SIZE(1,1,0,1,0)
#define FMT__D_P_P TRACE_ARG_SIZE(0,1,0,2,0)
#define FMT__D_P_P_D_D TRACE_ARG_SIZE(0,3,0,2,0)
#define FMT__D_P_P_D_D_P TRACE_ARG_SIZE(0,3,0,3,0)
#define FMT__D_P_P_D_D_H_H TRACE_ARG_SIZE(2,3,0,2,0)
#define FMT__D_P_P_H TRACE_ARG_SIZE(1,1,0,2,0)
#define FMT__H TRACE_ARG_SIZE(1,0,0,0,0)
#define FMT__H_A TRACE_ARG_SIZE(1,0,0,0,1)
#define FMT__H_A_A TRACE_ARG_SIZE(1,0,0,0,2)
#define FMT__H_A_A_H_H TRACE_ARG_SIZE(3,0,0,0,2)
#define FMT__H_A_H TRACE_ARG_SIZE(2,0,0,0,1)
#define FMT__H_A_H_H_H TRACE_ARG_SIZE(4,0,0,0,1)
#define FMT__H_A_H_H_H_H_H_H_H_H TRACE_ARG_SIZE(9,0,0,0,1)
#define FMT__H_C_D_C TRACE_ARG_SIZE(3,1,0,0,0)
#define FMT__H_C_H_C TRACE_ARG_SIZE(4,0,0,0,0)
#define FMT__H_D TRACE_ARG_SIZE(1,1,0,0,0)
#define FMT__H_D_L TRACE_ARG_SIZE(1,1,1,0,0)
#define FMT__H_D_A TRACE_ARG_SIZE(1,1,0,0,1)
#define FMT__H_D_A_H_D TRACE_ARG_SIZE(2,2,0,0,1)
#define FMT__H_D_A_H_H TRACE_ARG_SIZE(3,1,0,0,1)
#define FMT__H_D_A_H_H_H_H TRACE_ARG_SIZE(5,1,0,0,1)
#define FMT__H_D_D TRACE_ARG_SIZE(1,2,0,0,0)
#define FMT__H_D_D_D TRACE_ARG_SIZE(1,3,0,0,0)
#define FMT__H_D_D_D_D TRACE_ARG_SIZE(1,4,0,0,0)
#define FMT__H_D_D_D_D_H TRACE_ARG_SIZE(2,4,0,0,0)
#define FMT__H_D_D_D_H_H_D TRACE_ARG_SIZE(3,4,0,0,0)
#define FMT__H_D_D_H TRACE_ARG_SIZE(2,2,0,0,0)
#define FMT__H_D_D_H_D TRACE_ARG_SIZE(2,3,0,0,0)
#define FMT__H_D_D_H_D_H TRACE_ARG_SIZE(3,3,0,0,0)
#define FMT__H_D_D_H_H TRACE_ARG_SIZE(3,2,0,0,0)
#define FMT__H_D_D_H_H_H TRACE_ARG_SIZE(4,2,0,0,0)
#define FMT__H_D_D_H_H_H_H TRACE_ARG_SIZE(5,2,0,0,0)
#define FMT__H_D_D_H_P TRACE_ARG_SIZE(2,2,0,1,0)
#define FMT__H_D_D_P TRACE_ARG_SIZE(1,2,0,1,0)
#define FMT__H_D_H TRACE_ARG_SIZE(2,1,0,0,0)
#define FMT__H_D_H_D TRACE_ARG_SIZE(2,2,0,0,0)
#define FMT__H_D_H_D_D TRACE_ARG_SIZE(2,3,0,0,0)
#define FMT__H_D_H_D_H TRACE_ARG_SIZE(3,2,0,0,0)
#define FMT__H_D_H_D_H_H TRACE_ARG_SIZE(4,2,0,0,0)
#define FMT__H_D_H_A TRACE_ARG_SIZE(2,1,0,0,1)
#define FMT__H_D_H_H TRACE_ARG_SIZE(3,1,0,0,0)
#define FMT__H_D_H_P_D TRACE_ARG_SIZE(2,2,0,1,0)
#define FMT__H_D_H_H_H TRACE_ARG_SIZE(4,1,0,0,0)
#define FMT__H_D_H_H_H_H TRACE_ARG_SIZE(5,1,0,0,0)
#define FMT__H_D_H_H_H_H_H_H TRACE_ARG_SIZE(7,1,0,0,0)
#define FMT__H_D_P_H_H_H_H_H TRACE_ARG_SIZE(6,1,0,1,0)
#define FMT__H_D_P_H_H_H_H_H_H_H TRACE_ARG_SIZE(8,1,0,1,0)
#define FMT__H_D_P_P_P TRACE_ARG_SIZE(1,1,0,3,0)
#define FMT__H_H TRACE_ARG_SIZE(2,0,0,0,0)
#define FMT__H_H_A TRACE_ARG_SIZE(2,0,0,0,1)
#define FMT__H_H_A_A TRACE_ARG_SIZE(2,0,0,0,2)
#define FMT__H_H_D TRACE_ARG_SIZE(2,1,0,0,0)
#define FMT__H_H_D_A TRACE_ARG_SIZE(2,1,0,0,1)
#define FMT__H_H_D_D TRACE_ARG_SIZE(2,2,0,0,0)
#define FMT__H_H_D_D_D TRACE_ARG_SIZE(2,3,0,0,0)
#define FMT__H_H_D_H TRACE_ARG_SIZE(3,1,0,0,0)
#define FMT__H_H_D_H_H_H_H_H_H_H_H TRACE_ARG_SIZE(10,1,0,0,0)
#define FMT__D_H_H_H_H_H_H_H_H TRACE_ARG_SIZE(8,1,0,0,0)
#define FMT__H_H_D_H_P TRACE_ARG_SIZE(3,1,0,1,0)
#define FMT__H_D_P TRACE_ARG_SIZE(1,1,0,1,0)
#define FMT__H_H_D_P TRACE_ARG_SIZE(2,1,0,1,0)
#define FMT__H_H_H TRACE_ARG_SIZE(3,0,0,0,0)
#define FMT__H_H_H_D TRACE_ARG_SIZE(3,1,0,0,0)
#define FMT__H_H_H_D_D TRACE_ARG_SIZE(3,2,0,0,0)
#define FMT__H_H_H_D_D_H_A_H_A TRACE_ARG_SIZE(5,2,0,0,2)
#define FMT__H_D_H_H_H_D_D_H_A_H_A TRACE_ARG_SIZE(6,3,0,0,2)
#define FMT__D_H_H_H_D_D_H_A_H_A TRACE_ARG_SIZE(5,3,0,0,2)
#define FMT__H_H_H_D_D_D TRACE_ARG_SIZE(3,3,0,0,0)
#define FMT__H_H_H_D_H TRACE_ARG_SIZE(4,1,0,0,0)
#define FMT__H_H_H_D_H_P TRACE_ARG_SIZE(4,1,0,1,0)
#define FMT__H_H_H_H TRACE_ARG_SIZE(4,0,0,0,0)
#define FMT__H_H_H_H_D TRACE_ARG_SIZE(4,1,0,0,0)
#define FMT__H_H_H_H_D_H TRACE_ARG_SIZE(5,1,0,0,0)
#define FMT__H_H_H_H_H TRACE_ARG_SIZE(5,0,0,0,0)
#define FMT__H_H_H_H_H_H TRACE_ARG_SIZE(6,0,0,0,0)
#define FMT__H_H_H_H_H_H_H TRACE_ARG_SIZE(7,0,0,0,0)
#define FMT__H_H_H_H_H_H_H_H TRACE_ARG_SIZE(8,0,0,0,0)
#define FMT__H_H_H_H_H_H_H_H_H TRACE_ARG_SIZE(9,0,0,0,0)
#define FMT__H_H_H_H_H_H_H_H_P_P TRACE_ARG_SIZE(8,0,0,2,0)
#define FMT__H_H_H_H_H_H_P_P TRACE_ARG_SIZE(6,0,0,2,0)
#define FMT__H_H_H_H_H_H_P_P_P_P TRACE_ARG_SIZE(6,2,0,4,0)
#define FMT__H_H_H_H_P_P_P TRACE_ARG_SIZE(4,0,0,3,0)
#define FMT__H_H_H_P TRACE_ARG_SIZE(3,0,0,1,0)
#define FMT__H_D_H_P TRACE_ARG_SIZE(2,1,0,1,0)
#define FMT__H_H_L TRACE_ARG_SIZE(2,0,1,0,0)
#define FMT__H_H_L_H TRACE_ARG_SIZE(3,0,1,0,0)
#define FMT__H_H_H_L TRACE_ARG_SIZE(3,0,1,0,0)
#define FMT__H_H_H_H_L TRACE_ARG_SIZE(4,0,1,0,0)
#define FMT__H_H_L_H_P TRACE_ARG_SIZE(3,0,1,4,0)
#define FMT__H_H_P TRACE_ARG_SIZE(2,0,0,1,0)
#define FMT__H_H_P_D TRACE_ARG_SIZE(2,1,0,1,0)
#define FMT__H_H_P_P_P TRACE_ARG_SIZE(2,0,0,3,0)
#define FMT__H_L TRACE_ARG_SIZE(1,0,1,0,0)
#define FMT__H_L_A TRACE_ARG_SIZE(1,0,1,0,1)
#define FMT__H_L_D TRACE_ARG_SIZE(1,1,1,0,0)
#define FMT__H_L_L TRACE_ARG_SIZE(1,0,2,0,0)
#define FMT__H_L_H TRACE_ARG_SIZE(2,0,1,0,0)
#define FMT__H_L_D_D TRACE_ARG_SIZE(1,2,1,0,0)
#define FMT__H_L_D_D_D TRACE_ARG_SIZE(1,3,1,0,0)
#define FMT__H_L_D_P TRACE_ARG_SIZE(1,1,1,1,0)
#define FMT__H_L_H_D TRACE_ARG_SIZE(2,1,1,0,0)
#define FMT__H_L_H_D_D TRACE_ARG_SIZE(2,2,1,0,0)
#define FMT__H_L_H_H_H_H_H_H_H_H_H_H_H_H TRACE_ARG_SIZE(13,0,1,0,0)
#define FMT__H_D_H_H_H_H_H_H_H_H_H_H_H_H TRACE_ARG_SIZE(13,1,0,0,0)
#define FMT__H_L_H_H_P TRACE_ARG_SIZE(3,0,1,4,0)
#define FMT__H_L_L_H_A TRACE_ARG_SIZE(2,0,2,0,1)
#define FMT__H_L_D_D_H TRACE_ARG_SIZE(2,2,1,0,0)
#define FMT__H_P_D_P TRACE_ARG_SIZE(1,1,0,2,0)
#define FMT__H_P_P_D_P TRACE_ARG_SIZE(1,1,0,3,0)
#define FMT__H_P_D_D_H TRACE_ARG_SIZE(2,2,0,1,0)
#define FMT__H_P TRACE_ARG_SIZE(1,0,0,1,0)
#define FMT__H_P_D TRACE_ARG_SIZE(1,1,0,1,0)
#define FMT__H_P_D_D_H_P TRACE_ARG_SIZE(2,2,0,2,0)
#define FMT__H_P_D_D_P TRACE_ARG_SIZE(1,2,0,2,0)
#define FMT__H_P_H TRACE_ARG_SIZE(2,0,0,1,0)
#define FMT__H_P_H_D TRACE_ARG_SIZE(2,1,0,1,0)
#define FMT__H_P_H_D_H TRACE_ARG_SIZE(3,1,0,1,0)
#define FMT__H_P_H_H TRACE_ARG_SIZE(3,0,0,1,0)
#define FMT__H_P_H_H_H TRACE_ARG_SIZE(4,0,0,1,0)
#define FMT__H_P_H_H_D TRACE_ARG_SIZE(3,1,0,1,0)
#define FMT__H_P_H_H_H_H TRACE_ARG_SIZE(5,0,0,1,0)
#define FMT__H_P_H_P TRACE_ARG_SIZE(2,0,0,2,0)
#define FMT__H_P_H_P_H TRACE_ARG_SIZE(3,0,0,2,0)
#define FMT__H_P_H_P_H_H TRACE_ARG_SIZE(4,0,0,2,0)
#define FMT__H_P_H_P_H_H_P TRACE_ARG_SIZE(4,0,0,3,0)
#define FMT__H_P_L_H TRACE_ARG_SIZE(2,0,1,1,0)
#define FMT__H_P_P_P TRACE_ARG_SIZE(1,0,0,3,0)
#define FMT__H_P_P_P_D_P_P TRACE_ARG_SIZE(1,1,0,5,0)
#define FMT__H_P_P_P_P TRACE_ARG_SIZE(1,0,0,4,0)
#define FMT__H_P_P_P_P_P TRACE_ARG_SIZE(1,0,0,5,0)
#define FMT__L TRACE_ARG_SIZE(0,0,1,0,0)
#define FMT__L_A TRACE_ARG_SIZE(0,0,1,0,1)
#define FMT__L_D TRACE_ARG_SIZE(0,1,1,0,0)
#define FMT__L_D_D TRACE_ARG_SIZE(0,2,1,0,0)
#define FMT__L_D_D_D TRACE_ARG_SIZE(0,3,1,0,0)
#define FMT__L_H TRACE_ARG_SIZE(1,0,1,0,0)
#define FMT__L_H_H TRACE_ARG_SIZE(2,0,1,0,0)
#define FMT__L_H_H_H TRACE_ARG_SIZE(3,0,1,0,0)
#define FMT__L_L TRACE_ARG_SIZE(0,0,2,0,0)
#define FMT__L_L_L TRACE_ARG_SIZE(0,0,3,0,0)
#define FMT__L_L_L_H TRACE_ARG_SIZE(1,0,3,0,0)
#define FMT__L_L_A_A TRACE_ARG_SIZE(0,0,2,0,2)
#define FMT__L_D_A TRACE_ARG_SIZE(0,1,1,0,1)
#define FMT__L_D_A_A TRACE_ARG_SIZE(0,1,1,0,2)
#define FMT__L_L_A_A_H_L_H_H_H_H_H_H_H_H_H_H_H_H TRACE_ARG_SIZE(13,0,3,0,2)
#define FMT__L_L_D_D TRACE_ARG_SIZE(0,2,2,0,0)
#define FMT__L_L_H_L_H_H_H_H_H_H_H_H_H_H_H_H TRACE_ARG_SIZE(13,0,3,0,0)
#define FMT__L_L_L_D TRACE_ARG_SIZE(0,1,3,0,0)
#define FMT__L_L_L_D_L_D TRACE_ARG_SIZE(0,2,4,0,0)
#define FMT__L_L_L_L TRACE_ARG_SIZE(0,0,4,0,0)
#define FMT__L_L_L_L_L TRACE_ARG_SIZE(0,0,5,0,0)
#define FMT__L_L_L_L_L_L TRACE_ARG_SIZE(0,0,6,0,0)
#define FMT__L_L_L_L_L_L_L TRACE_ARG_SIZE(0,0,7,0,0)
#define FMT__L_P TRACE_ARG_SIZE(0,0,1,1,0)
#define FMT__L_P_L TRACE_ARG_SIZE(0,0,2,1,0)
#define FMT__P TRACE_ARG_SIZE(0,0,0,1,0)
#define FMT__P_A TRACE_ARG_SIZE(0,0,0,1,1)
#define FMT__P_D TRACE_ARG_SIZE(0,1,0,1,0)
#define FMT__P_D_D TRACE_ARG_SIZE(0,2,0,1,0)
#define FMT__P_D_D_D TRACE_ARG_SIZE(0,3,0,1,0)
#define FMT__P_D_D_D_D TRACE_ARG_SIZE(0,4,0,1,0)
#define FMT__P_D_D_H_D TRACE_ARG_SIZE(1,3,0,1,0)
#define FMT__P_D_D_D_D_D TRACE_ARG_SIZE(0,5,0,1,0)
#define FMT__P_D_D_D_D_D_D TRACE_ARG_SIZE(0,6,0,1,0)
#define FMT__P_D_D_D_D_D_D_D TRACE_ARG_SIZE(0,7,0,1,0)
#define FMT__P_D_D_D_H_D TRACE_ARG_SIZE(1,4,0,1,0)
#define FMT__P_D_D_H TRACE_ARG_SIZE(1,2,0,1,0)
#define FMT__P_D_D_L_L_P TRACE_ARG_SIZE(0,2,2,2,0)
#define FMT__P_D_H TRACE_ARG_SIZE(1,1,0,1,0)
#define FMT__P_D_P TRACE_ARG_SIZE(0,1,0,2,0)
#define FMT__P_D_L TRACE_ARG_SIZE(0,1,1,1,0)
#define FMT__P_D_P_D TRACE_ARG_SIZE(0,2,0,2,0)
#define FMT__P_D_P_P TRACE_ARG_SIZE(0,1,0,3,0)
#define FMT__P_H TRACE_ARG_SIZE(1,0,0,1,0)
#define FMT__P_H_D TRACE_ARG_SIZE(1,1,0,1,0)
#define FMT__P_H_D_D TRACE_ARG_SIZE(1,2,0,1,0)
#define FMT__P_H_D_D_H TRACE_ARG_SIZE(2,2,0,1,0)
#define FMT__P_H_D_P TRACE_ARG_SIZE(1,1,0,2,0)
#define FMT__P_H_D_H TRACE_ARG_SIZE(2,1,0,1,0)
#define FMT__P_H_D_L TRACE_ARG_SIZE(1,1,1,1,0)
#define FMT__P_H_H TRACE_ARG_SIZE(2,0,0,1,0)
#define FMT__P_H_H_D_D TRACE_ARG_SIZE(2,2,0,1,0)
#define FMT__P_H_H_H TRACE_ARG_SIZE(3,0,0,1,0)
#define FMT__P_H_H_H_A TRACE_ARG_SIZE(3,0,0,1,1)
#define FMT__P_H_H_H_D TRACE_ARG_SIZE(3,1,0,1,0)
#define FMT__P_H_H_H_H TRACE_ARG_SIZE(4,0,0,1,0)
#define FMT__P_H_H_H_H_D TRACE_ARG_SIZE(4,1,0,1,0)
#define FMT__P_H_H_H_H_H_H TRACE_ARG_SIZE(6,0,0,1,0)
#define FMT__P_H_H_H_H_H_H_H TRACE_ARG_SIZE(7,0,0,1,0)
#define FMT__P_H_H_H_L TRACE_ARG_SIZE(3,0,1,1,0)
#define FMT__P_H_H_L TRACE_ARG_SIZE(2,0,1,1,0)
#define FMT__P_H_L TRACE_ARG_SIZE(1,0,1,1,0)
#define FMT__P_H_L_H_L TRACE_ARG_SIZE(2,0,2,1,0)
#define FMT__P_H_P TRACE_ARG_SIZE(1,0,0,2,0)
#define FMT__P_H_P_D TRACE_ARG_SIZE(1,1,0,2,0)
#define FMT__P_H_P_D_D TRACE_ARG_SIZE(1,2,0,2,0)
#define FMT__P_H_P_D_D_D TRACE_ARG_SIZE(1,3,0,2,0)
#define FMT__P_H_P_H TRACE_ARG_SIZE(2,0,0,2,0)
#define FMT__P_H_P_H_L TRACE_ARG_SIZE(2,0,1,2,0)
#define FMT__P_H_P_P TRACE_ARG_SIZE(1,0,0,3,0)
#define FMT__P_H_P_L TRACE_ARG_SIZE(1,0,1,2,0)
#define FMT__P_H_P_P_H TRACE_ARG_SIZE(2,0,0,3,0)
#define FMT__P_H_P_P_P TRACE_ARG_SIZE(1,0,0,4,0)
#define FMT__P_L TRACE_ARG_SIZE(0,0,1,1,0)
#define FMT__P_L_D TRACE_ARG_SIZE(0,1,1,1,0)
#define FMT__P_L_H TRACE_ARG_SIZE(1,0,1,1,0)
#define FMT__P_L_P TRACE_ARG_SIZE(0,0,1,2,0)
#define FMT__P_L_L_D TRACE_ARG_SIZE(0,1,2,1,0)
#define FMT__P_L_L_L TRACE_ARG_SIZE(0,0,3,1,0)
#define FMT__P_L_P_L TRACE_ARG_SIZE(0,0,2,2,0)
#define FMT__P_L_P_P_P TRACE_ARG_SIZE(0,0,1,4,0)
#define FMT__P_P TRACE_ARG_SIZE(0,0,0,2,0)
#define FMT__P_P_L TRACE_ARG_SIZE(0,0,1,2,0)
#define FMT__P_P_D TRACE_ARG_SIZE(0,1,0,2,0)
#define FMT__P_P_D_D TRACE_ARG_SIZE(0,2,0,2,0)
#define FMT__P_P_D_D_H TRACE_ARG_SIZE(1,2,0,2,0)
#define FMT__P_P_D_D_P TRACE_ARG_SIZE(0,2,0,3,0)
#define FMT__P_P_D_H_H TRACE_ARG_SIZE(2,1,0,2,0)
#define FMT__P_P_D_H_P TRACE_ARG_SIZE(1,1,0,3,0)
#define FMT__P_P_D_P TRACE_ARG_SIZE(0,1,0,3,0)
#define FMT__P_P_D_P_D TRACE_ARG_SIZE(0,2,0,3,0)
#define FMT__P_P_D_P_H TRACE_ARG_SIZE(1,1,0,3,0)
#define FMT__P_P_H TRACE_ARG_SIZE(1,0,0,2,0)
#define FMT__P_P_H_D TRACE_ARG_SIZE(1,1,0,2,0)
#define FMT__P_P_H_H TRACE_ARG_SIZE(2,0,0,2,0)
#define FMT__P_P_H_H_P TRACE_ARG_SIZE(2,0,0,3,0)
#define FMT__P_P_H_H_H TRACE_ARG_SIZE(3,0,0,2,0)
#define FMT__P_P_H_P TRACE_ARG_SIZE(1,0,0,3,0)
#define FMT__P_P_H_P_D_P TRACE_ARG_SIZE(1,2,0,4,0)
#define FMT__P_P_H_P_H TRACE_ARG_SIZE(2,0,0,3,0)
#define FMT__P_P_L_D TRACE_ARG_SIZE(0,1,1,2,0)
#define FMT__P_P_L_L_H TRACE_ARG_SIZE(1,0,2,2,0)
#define FMT__P_P_P TRACE_ARG_SIZE(0,0,0,3,0)
#define FMT__P_P_P_H TRACE_ARG_SIZE(1,0,0,3,0)
#define FMT__P_P_P_D TRACE_ARG_SIZE(0,1,0,3,0)
#define FMT__P_P_P_D_P TRACE_ARG_SIZE(0,1,0,4,0)
#define FMT__P_P_P_H_H TRACE_ARG_SIZE(2,0,0,3,0)
#define FMT__P_P_P_L_H TRACE_ARG_SIZE(1,0,1,3,0)
#define FMT__P_P_P_L_D_H TRACE_ARG_SIZE(1,1,1,3,0)
#define FMT__P_P_P_P TRACE_ARG_SIZE(0,0,0,4,0)
#define FMT__P_L_H_H TRACE_ARG_SIZE(2,0,1,1,0)
#define FMT__P_P_P_P_P TRACE_ARG_SIZE(0,0,0,5,0)
#define FMT__D_D_L_D TRACE_ARG_SIZE(0,3,1,0,0)
#define FMT__D_D_L_L TRACE_ARG_SIZE(0,2,2,0,0)
#define FMT__D_D_D_D_L_L TRACE_ARG_SIZE(0,4,2,0,0)
#define FMT__L_D_D_D_D_L_L TRACE_ARG_SIZE(0,4,3,0,0)
#define FMT__L_L_L_D_D TRACE_ARG_SIZE(0,2,3,0,0)
#define FMT__D_H_P_H TRACE_ARG_SIZE(2,1,0,1,0)
#define FMT__H_D_H_H_D TRACE_ARG_SIZE(3,2,0,0,0)
#define FMT__D_A_B_H_H TRACE_ARG_SIZE(2,1,0,0,3)
#define FMT__A_A_P TRACE_ARG_SIZE(0,0,0,1,2)
#define FMT__B TRACE_ARG_SIZE(0,0,0,0,2)
#define FMT__B_H_B TRACE_ARG_SIZE(1,0,0,0,4)
#define FMT__B_B_B TRACE_ARG_SIZE(0,0,0,0,6)
#define FMT__D_H_D_B TRACE_ARG_SIZE(1,2,0,0,2)
#define FMT__D_H_H_B TRACE_ARG_SIZE(2,1,0,0,2)
#define FMT__H_H_A_B TRACE_ARG_SIZE(2,0,0,0,3)
#define FMT__A_D TRACE_ARG_SIZE(0,1,0,0,1)
#define FMT__L_D_P_H TRACE_ARG_SIZE(1,1,1,1,0)
#define FMT__D_D_H_H_H TRACE_ARG_SIZE(3,2,0,0,0)
#define FMT__P_B_D_D TRACE_ARG_SIZE(0,2,0,1,2)
#define FMT__H_B_H_B TRACE_ARG_SIZE(2,0,0,0,4)
#define FMT__B_A TRACE_ARG_SIZE(0,0,0,0,3)
#define FMT__D_H_A TRACE_ARG_SIZE(1,1,0,0,1)
#define FMT__D_H_A_H TRACE_ARG_SIZE(2,1,0,0,1)
#define FMT__D_A_H TRACE_ARG_SIZE(1,1,0,0,1)
#define FMT__D_D_D_A_B TRACE_ARG_SIZE(0,3,0,0,3)
#define FMT__D_B_A TRACE_ARG_SIZE(0,1,0,0,3)
#define FMT__H_B_A TRACE_ARG_SIZE(1,0,0,0,3)
#define FMT__D_D_H_H_D_D_D_D TRACE_ARG_SIZE(2,6,0,0,0)
#define FMT__P_D_H_H_H_A TRACE_ARG_SIZE(3,1,0,1,1)
#define FMT__H_A_H_H_H_H_H TRACE_ARG_SIZE(6,0,0,0,1)
#define FMT__H_D_A_H TRACE_ARG_SIZE(2,1,0,0,1)
#define FMT__D_A_H_D TRACE_ARG_SIZE(1,2,0,0,1)
#define FMT__D_D_A_H TRACE_ARG_SIZE(1,2,0,0,1)
#define FMT__P_H_H_H_H_H_H_H_H TRACE_ARG_SIZE(8,0,0,1,0)
#define FMT__D_D_H_L_H_H TRACE_ARG_SIZE(3,2,1,0,0)
#define FMT__D_H_L_H_H TRACE_ARG_SIZE(3,1,1,0,0)
#define FMT__D_H_L_L_D_D_D TRACE_ARG_SIZE(1,4,2,0,0)
#define FMT__H_D_H_L_H_H TRACE_ARG_SIZE(4,1,1,0,0)
#define FMT__D_H_D_H_L_H_H TRACE_ARG_SIZE(4,2,1,0,0)
#define FMT__D_D_H_H_H_D_D_D_D TRACE_ARG_SIZE(3,6,0,0,0)
#define FMT__H_D_H_L TRACE_ARG_SIZE(2,1,1,0,0)
#define FMT__H_H_L_L TRACE_ARG_SIZE(2,0,2,0,0)
#define FMT__D_D_H_H_D_H_D_D_D_D TRACE_ARG_SIZE(3,7,0,0,0)
#define FMT__D_A_D_A TRACE_ARG_SIZE(0,2,0,0,2)
#define FMT__H_H_H_L_H_H_H TRACE_ARG_SIZE(6,0,1,0,0)
#define FMT__H_D_D_D_D_D TRACE_ARG_SIZE(1,5,0,0,0)
#define FMT__P_P_D_D_L TRACE_ARG_SIZE(0,2,1,2,0)
#define FMT__P_L_L TRACE_ARG_SIZE(0,0,2,1,0)
#define FMT__P_P_L_L TRACE_ARG_SIZE(0,0,2,2,0)
#define FMT__D_D_H_D_D_H TRACE_ARG_SIZE(2,4,0,0,0)
#define FMT__NC(N) TRACE_ARG_SIZE(N,0,0,0,0)
#define FMT__H_L_H_H TRACE_ARG_SIZE(3,0,1,0,0)
#define FMT__A_B TRACE_ARG_SIZE(0,0,0,1,1)
#define FMT__D_H_H_L_D_D_D TRACE_ARG_SIZE(2,4,1,0,0)
#define FMT__H_H_D_D_H TRACE_ARG_SIZE(3,3,0,0,0)
#define FMT__L_D_H_H_H_H TRACE_ARG_SIZE(4,1,1,0,0)
#define FMT__P_A_A TRACE_ARG_SIZE(0,0,0,1,2)
#define FMT__D_D_P_H_H_H_H TRACE_ARG_SIZE(4,2,1,0,0)
#define FMT__P_P_D_D_D TRACE_ARG_SIZE(0,3,0,2,0)
#define FMT__P_P_D_D_D_P TRACE_ARG_SIZE(0,3,0,3,0)
#define FMT__P_P_P_D_D_D_P TRACE_ARG_SIZE(0,3,0,4,0)
#define FMT__D_D_H_H_H_H TRACE_ARG_SIZE(2,4,0,0,0)
#define FMT__P_D_P_D_P_P TRACE_ARG_SIZE(4,2,0,0,0)
#define FMT__D_A_D TRACE_ARG_SIZE(0,2,0,0,1)
#define FMT__D_H_D_D_D_D TRACE_ARG_SIZE(1,5,0,0,0)
#define FMT__H_D_D_D_H_H TRACE_ARG_SIZE(3,3,0,0,0)
#define FMT__P_H_D_D_D_H_H TRACE_ARG_SIZE(3,3,1,0,0)
#define FMT__H_H_H_D_H_L_H_H TRACE_ARG_SIZE(6,1,1,0,0)
#define FMT__D_D_P_P TRACE_ARG_SIZE(0,2,0,2,0)
#define FMT__D_D_P_P_D_D TRACE_ARG_SIZE(0,4,0,2,0)
#define FMT__H_P_P_H_H TRACE_ARG_SIZE(3,0,0,2,0)
#define FMT__H_P_H_H_P TRACE_ARG_SIZE(3,0,0,2,0)
#define FMT__H_P_P TRACE_ARG_SIZE(1,0,0,2,0)
#define FMT__H_P_P_H TRACE_ARG_SIZE(2,0,0,2,0)
#define FMT__D_P_D_D_P TRACE_ARG_SIZE(0,3,0,2,0)
#define FMT__D_D_D_A_A TRACE_ARG_SIZE(0,3,0,0,2)
#define FMT__H_D_A_D_D_D TRACE_ARG_SIZE(1,4,0,0,1)
#define FMT__H_D_A_P TRACE_ARG_SIZE(1,1,0,1,1)
#define FMT__H_H_H_H_H_H_H_H_H_H TRACE_ARG_SIZE(10,0,0,0,0)
/** @} */ /* TRACE_DATA_FORMAT */
/**
* @addtogroup TRACE_FIRST_ARG
* @{
*/
#define TRACE_COMMON1 TRACE_SUBSYSTEM_COMMON, 1U
#define TRACE_COMMON2 TRACE_SUBSYSTEM_COMMON, 2U
#define TRACE_COMMON3 TRACE_SUBSYSTEM_COMMON, 3U
#define TRACE_COMMON4 TRACE_SUBSYSTEM_COMMON, 4U
/* osif subsystem is nearly not used. Place it to the same with common and free
* 1 bit for buffers. */
#define TRACE_OSIF1 TRACE_SUBSYSTEM_COMMON, 1U
#define TRACE_OSIF2 TRACE_SUBSYSTEM_COMMON, 2U
#define TRACE_OSIF3 TRACE_SUBSYSTEM_COMMON, 3U
#define TRACE_OSIF4 TRACE_SUBSYSTEM_COMMON, 4U
#define TRACE_MAC1 TRACE_SUBSYSTEM_MAC, 1U
#define TRACE_MAC2 TRACE_SUBSYSTEM_MAC, 2U
#define TRACE_MAC3 TRACE_SUBSYSTEM_MAC, 3U
#define TRACE_MAC4 TRACE_SUBSYSTEM_MAC, 4U
#define TRACE_MACSPLIT1 TRACE_SUBSYSTEM_MACSPLIT, 1U
#define TRACE_MACSPLIT2 TRACE_SUBSYSTEM_MACSPLIT, 2U
#define TRACE_MACSPLIT3 TRACE_SUBSYSTEM_MACSPLIT, 3U
#define TRACE_MACSPLIT4 TRACE_SUBSYSTEM_MACSPLIT, 4U
#define TRACE_MACLL1 TRACE_SUBSYSTEM_MACLL, 1U
#define TRACE_MACLL2 TRACE_SUBSYSTEM_MACLL, 2U
#define TRACE_MACLL3 TRACE_SUBSYSTEM_MACLL, 3U
#define TRACE_MACLL4 TRACE_SUBSYSTEM_MACLL, 4U
#define TRACE_NWK1 TRACE_SUBSYSTEM_NWK, 1U
#define TRACE_NWK2 TRACE_SUBSYSTEM_NWK, 2U
#define TRACE_NWK3 TRACE_SUBSYSTEM_NWK, 3U
#define TRACE_NWK4 TRACE_SUBSYSTEM_NWK, 4U
#define TRACE_APS1 TRACE_SUBSYSTEM_APS, 1U
#define TRACE_APS2 TRACE_SUBSYSTEM_APS, 2U
#define TRACE_APS3 TRACE_SUBSYSTEM_APS, 3U
#define TRACE_APS4 TRACE_SUBSYSTEM_APS, 4U
#define TRACE_AF1 TRACE_SUBSYSTEM_AF, 1U
#define TRACE_AF2 TRACE_SUBSYSTEM_AF, 2U
#define TRACE_AF3 TRACE_SUBSYSTEM_AF, 3U
#define TRACE_AF4 TRACE_SUBSYSTEM_AF, 4U
#define TRACE_ZDO1 TRACE_SUBSYSTEM_ZDO, 1U
#define TRACE_ZDO2 TRACE_SUBSYSTEM_ZDO, 2U
#define TRACE_ZDO3 TRACE_SUBSYSTEM_ZDO, 3U
#define TRACE_ZDO4 TRACE_SUBSYSTEM_ZDO, 4U
#define TRACE_SECUR1 TRACE_SUBSYSTEM_SECUR, 1U
#define TRACE_SECUR2 TRACE_SUBSYSTEM_SECUR, 2U
#define TRACE_SECUR3 TRACE_SUBSYSTEM_SECUR, 3U
#define TRACE_SECUR4 TRACE_SUBSYSTEM_SECUR, 4U
#define TRACE_ZCL1 TRACE_SUBSYSTEM_ZCL, 1U
#define TRACE_ZCL2 TRACE_SUBSYSTEM_ZCL, 2U
#define TRACE_ZCL3 TRACE_SUBSYSTEM_ZCL, 3U
#define TRACE_ZCL4 TRACE_SUBSYSTEM_ZCL, 4U
#define TRACE_ZLL1 TRACE_SUBSYSTEM_ZLL, 1U
#define TRACE_ZLL2 TRACE_SUBSYSTEM_ZLL, 2U
#define TRACE_ZLL3 TRACE_SUBSYSTEM_ZLL, 3U
#define TRACE_ZLL4 TRACE_SUBSYSTEM_ZLL, 4U
#define TRACE_ZGP1 TRACE_SUBSYSTEM_ZGP, 1U
#define TRACE_ZGP2 TRACE_SUBSYSTEM_ZGP, 2U
#define TRACE_ZGP3 TRACE_SUBSYSTEM_ZGP, 3U
#define TRACE_ZGP4 TRACE_SUBSYSTEM_ZGP, 4U
#define TRACE_ZSE1 TRACE_SUBSYSTEM_ZSE, 1U
#define TRACE_ZSE2 TRACE_SUBSYSTEM_ZSE, 2U
#define TRACE_ZSE3 TRACE_SUBSYSTEM_ZSE, 3U
#define TRACE_ZSE4 TRACE_SUBSYSTEM_ZSE, 4U
#ifndef DOXYGEN
#define TRACE_SPI1 TRACE_SUBSYSTEM_SPI, 1U
#define TRACE_SPI2 TRACE_SUBSYSTEM_SPI, 2U
#define TRACE_SPI3 TRACE_SUBSYSTEM_SPI, 3U
#define TRACE_SPI4 TRACE_SUBSYSTEM_SPI, 4U
#define TRACE_SSL1 TRACE_SUBSYSTEM_SSL, 1U
#define TRACE_SSL2 TRACE_SUBSYSTEM_SSL, 2U
#define TRACE_SSL3 TRACE_SUBSYSTEM_SSL, 3U
#define TRACE_SSL4 TRACE_SUBSYSTEM_SSL, 4U
#endif /* DOXYGEN */
#define TRACE_APP1 TRACE_SUBSYSTEM_APP, 1U
#define TRACE_APP2 TRACE_SUBSYSTEM_APP, 2U
#define TRACE_APP3 TRACE_SUBSYSTEM_APP, 3U
#define TRACE_APP4 TRACE_SUBSYSTEM_APP, 4U
#ifndef DOXYGEN
#define TRACE_SPECIAL1 TRACE_SUBSYSTEM_SPECIAL1, 1U
#define TRACE_SPECIAL2 TRACE_SUBSYSTEM_SPECIAL1, 2U
#define TRACE_SPECIAL3 TRACE_SUBSYSTEM_SPECIAL1, 3U
#define TRACE_SPECIAL4 TRACE_SUBSYSTEM_SPECIAL1, 4U
#define TRACE_USB1 TRACE_SUBSYSTEM_USB, 1U
#define TRACE_USB2 TRACE_SUBSYSTEM_USB, 2U
#define TRACE_USB3 TRACE_SUBSYSTEM_USB, 3U
#define TRACE_USB4 TRACE_SUBSYSTEM_USB, 4U
#define TRACE_MEMDBG1 TRACE_SUBSYSTEM_MEM, 1U
#define TRACE_MEMDBG2 TRACE_SUBSYSTEM_MEM, 2U
#define TRACE_MEMDBG3 TRACE_SUBSYSTEM_MEM, 3U
#define TRACE_MEMDBG4 TRACE_SUBSYSTEM_MEM, 4U
#define TRACE_CLOUD1 TRACE_SUBSYSTEM_CLOUD, 1U
#define TRACE_CLOUD2 TRACE_SUBSYSTEM_CLOUD, 2U
#define TRACE_CLOUD3 TRACE_SUBSYSTEM_CLOUD, 3U
#define TRACE_CLOUD4 TRACE_SUBSYSTEM_CLOUD, 4U
#define TRACE_HTTP1 TRACE_SUBSYSTEM_HTTP, 1U
#define TRACE_HTTP2 TRACE_SUBSYSTEM_HTTP, 2U
#define TRACE_HTTP3 TRACE_SUBSYSTEM_HTTP, 3U
#define TRACE_HTTP4 TRACE_SUBSYSTEM_HTTP, 4U
#define TRACE_JSON1 TRACE_SUBSYSTEM_JSON, 1U
#define TRACE_JSON2 TRACE_SUBSYSTEM_JSON, 2U
#define TRACE_JSON3 TRACE_SUBSYSTEM_JSON, 3U
#define TRACE_JSON4 TRACE_SUBSYSTEM_JSON, 4U
#define TRACE_LWIP1 TRACE_SUBSYSTEM_LWIP, 1U
#define TRACE_LWIP2 TRACE_SUBSYSTEM_LWIP, 2U
#define TRACE_LWIP3 TRACE_SUBSYSTEM_LWIP, 3U
#define TRACE_LWIP4 TRACE_SUBSYSTEM_LWIP, 4U
#define TRACE_VENSTAR1 TRACE_SUBSYSTEM_VENSTAR, 1U
#define TRACE_VENSTAR2 TRACE_SUBSYSTEM_VENSTAR, 2U
#define TRACE_VENSTAR3 TRACE_SUBSYSTEM_VENSTAR, 3U
#define TRACE_VENSTAR4 TRACE_SUBSYSTEM_VENSTAR, 4U
#define TRACE_TRANSPORT1 TRACE_SUBSYSTEM_TRANSPORT, 1U
#define TRACE_TRANSPORT2 TRACE_SUBSYSTEM_TRANSPORT, 2U
#define TRACE_TRANSPORT3 TRACE_SUBSYSTEM_TRANSPORT, 3U
#define TRACE_TRANSPORT4 TRACE_SUBSYSTEM_TRANSPORT, 4U
#define TRACE_UART1 TRACE_SUBSYSTEM_UART, 1U
#define TRACE_UART2 TRACE_SUBSYSTEM_UART, 2U
#define TRACE_UART3 TRACE_SUBSYSTEM_UART, 3U
#define TRACE_UART4 TRACE_SUBSYSTEM_UART, 4U
#define TRACE_BATTERY1 TRACE_SUBSYSTEM_BATTERY, 1U
#define TRACE_BATTERY2 TRACE_SUBSYSTEM_BATTERY, 2U
#define TRACE_BATTERY3 TRACE_SUBSYSTEM_BATTERY, 3U
#define TRACE_BATTERY4 TRACE_SUBSYSTEM_BATTERY, 4U
#define TRACE_OTA1 TRACE_SUBSYSTEM_OTA, 1U
#define TRACE_OTA2 TRACE_SUBSYSTEM_OTA, 2U
#define TRACE_OTA3 TRACE_SUBSYSTEM_OTA, 3U
#define TRACE_OTA4 TRACE_SUBSYSTEM_OTA, 4U
#define TRACE_MAC_API1 TRACE_SUBSYSTEM_MAC_API, 1U
#define TRACE_MAC_API2 TRACE_SUBSYSTEM_MAC_API, 2U
#define TRACE_MAC_API3 TRACE_SUBSYSTEM_MAC_API, 3U
#define TRACE_MAC_API4 TRACE_SUBSYSTEM_MAC_API, 4U
#define TRACE_ZBDIRECT1 TRACE_SUBSYSTEM_ZBDIRECT, 1U
#define TRACE_ZBDIRECT2 TRACE_SUBSYSTEM_ZBDIRECT, 2U
#define TRACE_ZBDIRECT3 TRACE_SUBSYSTEM_ZBDIRECT, 3U
#define TRACE_ZBDIRECT4 TRACE_SUBSYSTEM_ZBDIRECT, 4U
#define TRACE_DIAG1 TRACE_SUBSYSTEM_DIAGNOSTIC, 1U
#define TRACE_DIAG2 TRACE_SUBSYSTEM_DIAGNOSTIC, 2U
#define TRACE_DIAG3 TRACE_SUBSYSTEM_DIAGNOSTIC, 3U
#define TRACE_DIAG4 TRACE_SUBSYSTEM_DIAGNOSTIC, 4U
#define TRACE_NS1 TRACE_SUBSYSTEM_NS, 1U
#define TRACE_NS2 TRACE_SUBSYSTEM_NS, 2U
#define TRACE_NS3 TRACE_SUBSYSTEM_NS, 3U
#define TRACE_NS4 TRACE_SUBSYSTEM_NS, 4U
#define TRACE_TEST1 TRACE_SUBSYSTEM_TEST, 1U
#define TRACE_TEST2 TRACE_SUBSYSTEM_TEST, 2U
#define TRACE_TEST3 TRACE_SUBSYSTEM_TEST, 3U
#define TRACE_TEST4 TRACE_SUBSYSTEM_TEST, 4U
#endif /* DOXYGEN */
#ifndef ZB_SET_TRACE_LEVEL
/* empty definitions if not implemented */
#define ZB_SET_TRACE_LEVEL(l)
#define ZB_SET_TRACE_MASK(m)
#define ZB_SET_TRACE_OFF()
#define ZB_SET_TRACE_ON()
#endif
/** @} */ /* TRACE_FIRST_ARG */
/** @endcond */ /* DSR_TRACE */
/** @} */ /* Debug trace */
#if defined ZB_TRAFFIC_DUMP_ON || defined DOXYGEN
/**
@addtogroup DUMP_ON_OFF
@{
*/
/** @cond DOXYGEN_INTERNAL_DOC */
extern zb_uint8_t g_traf_dump;
/** @endcond */ /* DOXYGEN_INTERNAL_DOC */
static ZB_INLINE zb_uint8_t zb_get_traf_dump_state(void)
{
return g_traf_dump;
}
/**
* Switch Zigbee traffic dump OFF
*/
#define ZB_SET_TRAF_DUMP_OFF() g_traf_dump = 0U
/**
* Switch Zigbee traffic dump ON
*
* That function works only if traffic dump is enabled at compile time.
*/
#define ZB_SET_TRAF_DUMP_ON() g_traf_dump = 1U
#define ZB_GET_TRAF_DUMP_STATE() zb_get_traf_dump_state()
/** @} */ /* DUMP_ON_OFF */
#else
#define ZB_SET_TRAF_DUMP_OFF()
#define ZB_SET_TRAF_DUMP_ON()
#define ZB_GET_TRAF_DUMP_STATE() 0U
#endif
/** @endcond */ /* DOXYGEN_DEBUG_SECTION */
#endif /* ZB_LOGGER_H */