1/******************************************************************************
2 *
3 *  Copyright (C) 2011-2012 Broadcom Corporation
4 *
5 *  Licensed under the Apache License, Version 2.0 (the "License");
6 *  you may not use this file except in compliance with the License.
7 *  You may obtain a copy of the License at:
8 *
9 *  http://www.apache.org/licenses/LICENSE-2.0
10 *
11 *  Unless required by applicable law or agreed to in writing, software
12 *  distributed under the License is distributed on an "AS IS" BASIS,
13 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 *  See the License for the specific language governing permissions and
15 *  limitations under the License.
16 *
17 ******************************************************************************/
18#include <stdio.h>
19#include <string.h>
20#include <stdarg.h>
21#include <time.h>
22#include <sys/time.h>
23#include "bt_target.h"
24#include "gki.h"
25
26#define BT_USE_TRACES   TRUE
27
28#if MMI_INCLUDED == TRUE
29#include "mmi.h"
30#endif
31
32volatile UINT8 bte_target_mode;
33
34#if BT_USE_TRACES == TRUE
35
36#ifdef __CYGWIN__
37#undef RPC_INCLUDED
38#define RPC_INCLUDED TRUE
39
40/*******************************************************************************
41**
42** Function:    LogMsg
43**
44** Description: log a message
45**
46** Returns:     none
47**
48*******************************************************************************/
49void
50LogMsg(UINT32 maskTraceSet, const char *strFormat, ...)
51{
52    va_list ap;
53    char buffer[256];
54    struct timeval tv;
55    struct timezone tz;
56    struct tm *tm;
57    time_t t;
58
59
60    gettimeofday(&tv, &tz);
61    time(&t);
62    tm = localtime(&t);
63
64    sprintf(buffer, "%02d:%02d:%02d.%03d ", tm->tm_hour, tm->tm_min, tm->tm_sec,
65        tv.tv_usec / 1000);
66    pth_write(2, buffer, strlen(buffer));
67
68    va_start(ap, strFormat);
69    vsprintf(buffer, strFormat, ap);
70    pth_write(2, buffer, strlen(buffer));
71    pth_write(2, "\n", 1);
72    va_end(ap);
73}
74
75/*******************************************************************************
76**
77** Function:    ScrLog
78**
79** Description: log a message
80**
81** Returns:     none
82**
83*******************************************************************************/
84void
85ScrLog(UINT32 maskTraceSet, const char *strFormat, ...)
86{
87    va_list ap;
88    char buffer[256];
89    struct timeval tv;
90    struct timezone tz;
91    struct tm *tm;
92    time_t t;
93
94    gettimeofday(&tv, &tz);
95    time(&t);
96    tm = localtime(&t);
97
98    sprintf(buffer, "%02d:%02d:%02d.%03d ", tm->tm_hour, tm->tm_min, tm->tm_sec,
99        tv.tv_usec / 1000);
100    pth_write(2, buffer, strlen(buffer));
101
102    va_start(ap, strFormat);
103    vsprintf(buffer, strFormat, ap);
104    pth_write(2, buffer, strlen(buffer));
105    pth_write(2, "\n", 1);
106    va_end(ap);
107}
108#endif
109
110/********************************************************************************
111**
112**    Function Name:   LogMsg_0
113**
114**    Purpose:  Encodes a trace message that has no parameter arguments
115**
116**    Input Parameters:  maskTraceSet: tester trace type.
117**                       strFormat: displayable string.
118**    Returns:
119**                      Nothing.
120**
121*********************************************************************************/
122void LogMsg_0 (UINT32 maskTraceSet, const char *strFormat)
123{
124    if (bte_target_mode == BTE_MODE_APPL)
125    {
126#if RPC_INCLUDED == TRUE
127        LogMsg(maskTraceSet, strFormat);
128#else
129        return; /* No RPC */
130#endif
131    }
132    else if (bte_target_mode == BTE_MODE_SAMPLE_APPS)  /* Using demo sample apps */
133    {
134#if RPC_INCLUDED == TRUE
135        LogMsg(maskTraceSet, strFormat);
136#elif MMI_INCLUDED == TRUE
137        if (mmi_debug_traces)
138            MMI_Echo(strFormat);
139#endif
140    }
141
142#if (defined(TRACE_TASK_INCLUDED) && TRACE_TASK_INCLUDED == TRUE)
143    LogMsg(maskTraceSet, strFormat);
144#endif
145
146#if (defined(DONGLE_MODE_INCLUDED) && DONGLE_MODE_INCLUDED == TRUE)
147    else if (bte_target_mode == BTE_MODE_DONGLE)
148        bte_hcisl_send_traces(maskTraceSet, strFormat);
149#endif
150
151
152}
153
154/********************************************************************************
155**
156**    Function Name:   LogMsg_1
157**
158**    Purpose:  Encodes a trace message that has one parameter argument
159**
160**    Input Parameters:  maskTraceSet: tester trace type.
161**                       strFormat: displayable string.
162**    Returns:
163**                      Nothing.
164**
165*********************************************************************************/
166void LogMsg_1 (UINT32 maskTraceSet, const char *strFormat, UINT32 p1)
167{
168    if (bte_target_mode == BTE_MODE_APPL)
169    {
170#if RPC_INCLUDED == TRUE
171        LogMsg (maskTraceSet, strFormat, p1);
172#else
173        return; /* No RPC */
174#endif
175    }
176    else if (bte_target_mode == BTE_MODE_SAMPLE_APPS)  /* Using demo sample apps */
177    {
178#if RPC_INCLUDED == TRUE
179        LogMsg (maskTraceSet, strFormat, p1);
180#elif MMI_INCLUDED == TRUE
181        if (mmi_debug_traces)
182            MMI_Echo(strFormat, p1);
183#endif
184    }
185
186#if (defined(TRACE_TASK_INCLUDED) && TRACE_TASK_INCLUDED == TRUE)
187    LogMsg (maskTraceSet, strFormat, p1);
188#endif
189
190#if (defined(DONGLE_MODE_INCLUDED) && DONGLE_MODE_INCLUDED == TRUE)
191    else if (bte_target_mode == BTE_MODE_DONGLE)
192        bte_hcisl_send_traces(maskTraceSet, strFormat, p1);
193#endif
194}
195
196/********************************************************************************
197**
198**    Function Name:   LogMsg_2
199**
200**    Purpose:  Encodes a trace message that has two parameter arguments
201**
202**    Input Parameters:  maskTraceSet: tester trace type.
203**                       strFormat: displayable string.
204**    Returns:
205**                      Nothing.
206**
207*********************************************************************************/
208void LogMsg_2 (UINT32 maskTraceSet, const char *strFormat, UINT32 p1, UINT32 p2)
209{
210    if (bte_target_mode == BTE_MODE_APPL)
211    {
212#if RPC_INCLUDED == TRUE
213        LogMsg (maskTraceSet, strFormat, p1, p2);
214#else
215        return; /* No RPC */
216#endif
217    }
218    else if (bte_target_mode == BTE_MODE_SAMPLE_APPS)  /* Using demo sample apps */
219    {
220#if RPC_INCLUDED == TRUE
221        LogMsg (maskTraceSet, strFormat, p1, p2);
222#elif MMI_INCLUDED == TRUE
223        if (mmi_debug_traces)
224            MMI_Echo(strFormat, p1, p2);
225#endif
226    }
227
228#if (defined(TRACE_TASK_INCLUDED) && TRACE_TASK_INCLUDED == TRUE)
229    LogMsg (maskTraceSet, strFormat, p1, p2);
230#endif
231
232#if (defined(DONGLE_MODE_INCLUDED) && DONGLE_MODE_INCLUDED == TRUE)
233    else if (bte_target_mode == BTE_MODE_DONGLE)
234        bte_hcisl_send_traces(maskTraceSet, strFormat, p1, p2);
235#endif
236}
237
238/********************************************************************************
239**
240**    Function Name:   LogMsg_3
241**
242**    Purpose:  Encodes a trace message that has three parameter arguments
243**
244**    Input Parameters:  maskTraceSet: tester trace type.
245**                       strFormat: displayable string.
246**    Returns:
247**                      Nothing.
248**
249*********************************************************************************/
250void LogMsg_3 (UINT32 maskTraceSet, const char *strFormat, UINT32 p1, UINT32 p2, UINT32 p3)
251{
252    if (bte_target_mode == BTE_MODE_APPL)
253    {
254#if RPC_INCLUDED == TRUE
255        LogMsg (maskTraceSet, strFormat, p1, p2, p3);
256#else
257        return; /* No RPC */
258#endif
259    }
260    else if (bte_target_mode == BTE_MODE_SAMPLE_APPS)  /* Using demo sample apps */
261    {
262#if RPC_INCLUDED == TRUE
263        LogMsg (maskTraceSet, strFormat, p1, p2, p3);
264#elif MMI_INCLUDED == TRUE
265        if (mmi_debug_traces)
266            MMI_Echo(strFormat, p1, p2, p3);
267#endif
268    }
269
270#if (defined(TRACE_TASK_INCLUDED) && TRACE_TASK_INCLUDED == TRUE)
271    LogMsg (maskTraceSet, strFormat, p1, p2, p3);
272#endif
273
274#if (defined(DONGLE_MODE_INCLUDED) && DONGLE_MODE_INCLUDED == TRUE)
275    else if (bte_target_mode == BTE_MODE_DONGLE)
276        bte_hcisl_send_traces(maskTraceSet, strFormat, p1, p2, p3);
277#endif
278}
279
280/********************************************************************************
281**
282**    Function Name:   LogMsg_4
283**
284**    Purpose:  Encodes a trace message that has four parameter arguments
285**
286**    Input Parameters:  maskTraceSet: tester trace type.
287**                       strFormat: displayable string.
288**    Returns:
289**                      Nothing.
290**
291*********************************************************************************/
292void LogMsg_4 (UINT32 maskTraceSet, const char *strFormat, UINT32 p1, UINT32 p2,
293               UINT32 p3, UINT32 p4)
294{
295    if (bte_target_mode == BTE_MODE_APPL)
296    {
297#if RPC_INCLUDED == TRUE
298        LogMsg (maskTraceSet, strFormat, p1, p2, p3, p4);
299#else
300        return; /* No RPC */
301#endif
302    }
303    else if (bte_target_mode == BTE_MODE_SAMPLE_APPS)  /* Using demo sample apps */
304    {
305#if RPC_INCLUDED == TRUE
306        LogMsg (maskTraceSet, strFormat, p1, p2, p3, p4);
307#elif MMI_INCLUDED == TRUE
308        if (mmi_debug_traces)
309            MMI_Echo(strFormat, p1, p2, p3, p4);
310#endif
311    }
312
313#if (defined(TRACE_TASK_INCLUDED) && TRACE_TASK_INCLUDED == TRUE)
314    LogMsg (maskTraceSet, strFormat, p1, p2, p3, p4);
315#endif
316
317#if (defined(DONGLE_MODE_INCLUDED) && DONGLE_MODE_INCLUDED == TRUE)
318    else if (bte_target_mode == BTE_MODE_DONGLE)
319        bte_hcisl_send_traces(maskTraceSet, strFormat, p1, p2, p3, p4);
320#endif
321}
322
323/********************************************************************************
324**
325**    Function Name:   LogMsg_5
326**
327**    Purpose:  Encodes a trace message that has five parameter arguments
328**
329**    Input Parameters:  maskTraceSet: tester trace type.
330**                       strFormat: displayable string.
331**    Returns:
332**                      Nothing.
333**
334*********************************************************************************/
335void LogMsg_5 (UINT32 maskTraceSet, const char *strFormat, UINT32 p1, UINT32 p2,
336               UINT32 p3, UINT32 p4, UINT32 p5)
337{
338    if (bte_target_mode == BTE_MODE_APPL)
339    {
340#if RPC_INCLUDED == TRUE
341        LogMsg (maskTraceSet, strFormat, p1, p2, p3, p4, p5);
342#else
343        return; /* No RPC */
344#endif
345    }
346    else if (bte_target_mode == BTE_MODE_SAMPLE_APPS)  /* Using demo sample apps */
347    {
348#if RPC_INCLUDED == TRUE
349        LogMsg (maskTraceSet, strFormat, p1, p2, p3, p4, p5);
350#elif MMI_INCLUDED == TRUE
351        if (mmi_debug_traces)
352            MMI_Echo(strFormat, p1, p2, p3, p4, p5);
353#endif
354    }
355
356#if (defined(TRACE_TASK_INCLUDED) && TRACE_TASK_INCLUDED == TRUE)
357    LogMsg (maskTraceSet, strFormat, p1, p2, p3, p4, p5);
358#endif
359
360#if (defined(DONGLE_MODE_INCLUDED) && DONGLE_MODE_INCLUDED == TRUE)
361    else if (bte_target_mode == BTE_MODE_DONGLE)
362        bte_hcisl_send_traces(maskTraceSet, strFormat, p1, p2, p3, p4, p5);
363#endif
364}
365
366/********************************************************************************
367**
368**    Function Name:   LogMsg_6
369**
370**    Purpose:  Encodes a trace message that has six parameter arguments
371**
372**    Input Parameters:  maskTraceSet: tester trace type.
373**                       strFormat: displayable string.
374**    Returns:
375**                      Nothing.
376**
377*********************************************************************************/
378void LogMsg_6 (UINT32 maskTraceSet, const char *strFormat, UINT32 p1, UINT32 p2,
379               UINT32 p3, UINT32 p4, UINT32 p5, UINT32 p6)
380{
381    if (bte_target_mode == BTE_MODE_APPL)
382    {
383#if RPC_INCLUDED == TRUE
384        LogMsg (maskTraceSet, strFormat, p1, p2, p3, p4, p5, p6);
385#else
386        return; /* No RPC */
387#endif
388    }
389    else if (bte_target_mode == BTE_MODE_SAMPLE_APPS)  /* Using demo sample apps */
390    {
391#if RPC_INCLUDED == TRUE
392        LogMsg (maskTraceSet, strFormat, p1, p2, p3, p4, p5, p6);
393#elif MMI_INCLUDED == TRUE
394        if (mmi_debug_traces)
395            MMI_Echo(strFormat, p1, p2, p3, p4, p5, p6);
396#endif
397    }
398
399
400#if (defined(TRACE_TASK_INCLUDED) && TRACE_TASK_INCLUDED == TRUE)
401    LogMsg (maskTraceSet, strFormat, p1, p2, p3, p4, p5, p6);
402#endif
403
404#if (defined(DONGLE_MODE_INCLUDED) && DONGLE_MODE_INCLUDED == TRUE)
405    else if (bte_target_mode == BTE_MODE_DONGLE)
406        bte_hcisl_send_traces(maskTraceSet, strFormat, p1, p2, p3, p4, p5, p6);
407#endif
408
409}
410
411#endif /* BT_USE_TRACES */
412
413