1 /*
2  * Copyright (c) 2015-2019, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * *  Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  *
12  * *  Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * *  Neither the name of Texas Instruments Incorporated nor the names of
17  *    its contributors may be used to endorse or promote products derived
18  *    from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 /** ============================================================================
33  *  @file       DebugP.h
34  *
35  *  @brief      Debug support
36  *
37  *  The DebugP module allows application to do logging and assert checking.
38  *
39  *  DebugP_assert calls can be added into code. If the code
40  *  is compiled with the compiler define DebugP_ASSERT_ENABLED set to a
41  *  non-zero value, the call is passed onto the underlying assert checking.
42  *  If DebugP_ASSERT_ENABLED is zero (or not defined), the calls are
43  *  resolved to nothing.
44  *
45  *  This module sits on top of the assert checking of the underlying
46  *  RTOS. Please refer to the underlying RTOS port implementation for
47  *  more details.
48  *
49  *  Similarly, DebugP_logN calls can be added into code. If the code
50  *  is compiled with the compiler define DebugP_LOG_ENABLED set to a
51  *  non-zero value, the call is passed onto the underlying assert checking.
52  *  If DebugP_LOG_ENABLED is zero (or not defined), the calls are
53  *  resolved to nothing.
54 
55  *  This module sits on top of the logging of the underlying
56  *  RTOS. Please refer to the underlying RTOS port implementation for
57  *  more details.
58  *
59  *  ============================================================================
60  */
61 
62 #ifndef ti_dpl_DebugP__include
63 #define ti_dpl_DebugP__include
64 
65 #include <stdint.h>
66 #include <stdbool.h>
67 #include <stddef.h>
68 
69 #ifdef __cplusplus
70 extern "C" {
71 #endif
72 
73 #ifndef DebugP_ASSERT_ENABLED
74 #define DebugP_ASSERT_ENABLED 0
75 #endif
76 
77 #ifndef DebugP_LOG_ENABLED
78 #define DebugP_LOG_ENABLED    0
79 #endif
80 
81 #if DebugP_ASSERT_ENABLED
82 extern void _DebugP_assert(int expression, const char *file, int line);
83 /*!
84  *  @brief  Assert checking function
85  *
86  *  If the expression is evaluated to true, the API does nothing.
87  *  If it is evaluated to false, the underlying RTOS port implementation
88  *  handles the assert via its mechanisms.
89  *
90  *  @param  expression Expression to evaluate
91  */
92 #define DebugP_assert(expression) (_DebugP_assert(expression,      \
93                                                   __FILE__, __LINE__))
94 #else
95 #define DebugP_assert(expression)
96 #endif
97 
98 #if DebugP_LOG_ENABLED
99 /*!
100  *  @brief  Debug log function with 0 parameters
101  *
102  *  The underlying RTOS port implementation handles the
103  *  logging via its mechanisms.
104  *
105  *  @param  format "printf" format string
106  */
107 extern void DebugP_log0(const char *format);
108 
109 /*!
110  *  @brief  Debug log function with 1 parameters
111  *
112  *  The underlying RTOS port implementation handles the
113  *  logging via its mechanisms.
114  *
115  *  @param  format "printf" format string
116  *  @param  p1 first parameter to format string
117  */
118 extern void DebugP_log1(const char *format, uintptr_t p1);
119 
120 /*!
121  *  @brief  Debug log function with 2 parameters
122  *
123  *  The underlying RTOS port implementation handles the
124  *  logging via its mechanisms.
125  *
126  *  @param  format "printf" format string
127  *  @param  p1 first parameter to format string
128  *  @param  p2 second parameter to format string
129  */
130 extern void DebugP_log2(const char *format, uintptr_t p1, uintptr_t p2);
131 
132 /*!
133  *  @brief  Debug log function with 3 parameters
134  *
135  *  The underlying RTOS port implementation handles the
136  *  logging via its mechanisms.
137  *
138  *  @param  format "printf" format string
139  *  @param  p1 first parameter to format string
140  *  @param  p2 second parameter to format string
141  *  @param  p3 third parameter to format string
142  */
143 extern void DebugP_log3(const char *format, uintptr_t p1, uintptr_t p2, uintptr_t p3);
144 
145 /*!
146  *  @brief  Debug log function with 4 parameters
147  *
148  *  The underlying RTOS port implementation handles the
149  *  logging via its mechanisms.
150  *
151  *  @param  format "printf" format string
152  *  @param  p1 first parameter to format string
153  *  @param  p2 second parameter to format string
154  *  @param  p3 third parameter to format string
155  *  @param  p4 fourth parameter to format string
156  */
157 extern void DebugP_log4(const char *format, uintptr_t p1, uintptr_t p2, uintptr_t p3, uintptr_t p4);
158 #else
159 #define DebugP_log0(format)
160 #define DebugP_log1(format, p1)
161 #define DebugP_log2(format, p1, p2)
162 #define DebugP_log3(format, p1, p2, p3)
163 #define DebugP_log4(format, p1, p2, p3, p4)
164 #endif
165 
166 #ifdef __cplusplus
167 }
168 #endif
169 
170 #endif /* ti_dpl_DebugP__include */
171