Subversion Repositories dashGPS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 1
#ifndef _JTEST_FW_H_
2
#define _JTEST_FW_H_
3
 
4
/*--------------------------------------------------------------------------------*/
5
/* Includes */
6
/*--------------------------------------------------------------------------------*/
7
 
8
#include <stdint.h>             /* int32_t */
9
#include <string.h>             /* strcpy() */
10
#include <stdio.h>              /* sprintf() */
11
#include "jtest_pf.h"           /* Extend JTEST_FW_t with Pass/Fail data */
12
#include "jtest_group.h"
13
 
14
/*--------------------------------------------------------------------------------*/
15
/* Type Definitions */
16
/*--------------------------------------------------------------------------------*/
17
 
18
/**
19
 *  A struct used to interface with the Keil Debugger.
20
 */
21
typedef struct JTEST_FW_struct
22
{
23
    /* Action Triggers: The Keil debugger monitors these values for changes.  In
24
     * response to a change, the debugger executes code on the host. */
25
    volatile int32_t test_start;
26
    volatile int32_t test_end;
27
    volatile int32_t group_start;
28
    volatile int32_t group_end;
29
    volatile int32_t dump_str;
30
    volatile int32_t dump_data;
31
    volatile int32_t exit_fw;
32
 
33
    JTEST_GROUP_t * current_group_ptr;
34
 
35
    /* Buffers: The C-code cannot send strings and data directly to the
36
     * debugging framework. Instead, the debugger can be told to read 128 byte
37
     * (by default) chunks of memory.  Data received in this manner requires
38
     * post-processing to be legible.*/
39
    char * str_buffer;
40
    char * data_buffer;
41
 
42
    /* Pass/Fail Data */
43
    JTEST_PF_MEMBERS;
44
 
45
} JTEST_FW_t;
46
 
47
/*--------------------------------------------------------------------------------*/
48
/* Macros and Defines */
49
/*--------------------------------------------------------------------------------*/
50
 
51
/**
52
 *  Default name for the JTEST_FW struct.
53
 *
54
 *  Define your own if you want the variable containing the #JTEST_FW_t to have
55
 *  a different name.
56
 */
57
#ifndef JTEST_FW
58
#define JTEST_FW JTEST_FW
59
#endif
60
 
61
/**
62
 *  Default name for the JTEST_FW_STR_BUFFER.
63
 *
64
 *  Define your own if you want the variable containing the char buffer to have
65
 *  a different name.
66
 */
67
#ifndef JTEST_FW_STR_BUFFER
68
#define JTEST_FW_STR_BUFFER JTEST_FW_STR_BUFFER
69
#endif
70
 
71
/**
72
 *  Size of the #JTEST_FW_t, output string-buffer.
73
 *
74
 *  If you change this value, make sure the "dump_str_fn" and "dump_data_fn"
75
 *  functions in jtest_fns.ini uses the same size. If you aren't sure, read the
76
 *  documentation Keil Debugger Command 'DISPLAY'.
77
 */
78
#define JTEST_BUF_SIZE 256
79
 
80
 
81
/**
82
 *  The maximum number of bytes output at once using #JTEST_DUMP_STRF().
83
 */
84
#define JTEST_STR_MAX_OUTPUT_SIZE 128
85
 
86
/**
87
 *  The maximum number of block transimissions needed to send a string from a
88
 *  buffer with JTEST_BUF_SIZE.
89
 */
90
#define JTEST_STR_MAX_OUTPUT_SEGMENTS           \
91
    (JTEST_BUF_SIZE / JTEST_STR_MAX_OUTPUT_SIZE)
92
 
93
/**
94
 *  Initialize the JTEST framework.
95
 */
96
#define JTEST_INIT()                                                    \
97
    do                                                                  \
98
    {                                                                   \
99
        JTEST_FW.str_buffer = JTEST_FW_STR_BUFFER;                      \
100
    } while (0)
101
 
102
/* Debugger Action-triggering Macros */
103
/*--------------------------------------------------------------------------------*/
104
 
105
/**
106
 *  Dispatch macro to trigger various actions in the Keil Debugger.
107
 */
108
#define JTEST_TRIGGER_ACTION(action_name)       \
109
    do                                          \
110
    {                                           \
111
        action_name();                          \
112
    } while (0)
113
 
114
/**
115
 *  Trigger the "Test Start" action in the Keil Debugger.
116
 */
117
#define JTEST_ACT_TEST_START()                  \
118
    JTEST_TRIGGER_ACTION(test_start)
119
 
120
/**
121
 *  Trigger the "Test End" action in the Keil Debugger.
122
 */
123
#define JTEST_ACT_TEST_END()                    \
124
    JTEST_TRIGGER_ACTION(test_end)
125
 
126
 
127
/**
128
 *  Trigger the "Group Start" action in the Keil Debugger.
129
 */
130
#define JTEST_ACT_GROUP_START()                 \
131
    JTEST_TRIGGER_ACTION(group_start)
132
 
133
/**
134
 *  Trigger the "Group End" action in the Keil Debugger.
135
 */
136
#define JTEST_ACT_GROUP_END()                   \
137
    JTEST_TRIGGER_ACTION(group_end)
138
 
139
 
140
/**
141
 *  Fill the buffer named buf_name with value and dump it to the Keil debugger
142
 *  using action.
143
 */
144
#define JTEST_ACT_DUMP(action, buf_name, value) \
145
    do                                          \
146
    {                                           \
147
        JTEST_CLEAR_BUFFER(buf_name);           \
148
        strcpy(JTEST_FW.buf_name, (value));     \
149
        JTEST_TRIGGER_ACTION(action);           \
150
    } while (0)
151
 
152
/**
153
 *  Trigger the "Exit Framework" action in the Keil Debugger.
154
 */
155
#define JTEST_ACT_EXIT_FW()                     \
156
    do                                          \
157
    {                                           \
158
        JTEST_TRIGGER_ACTION(exit_fw);          \
159
    } while (0)
160
 
161
 
162
/* Buffer Manipulation Macros */
163
/*--------------------------------------------------------------------------------*/
164
 
165
/**
166
 *  Clear the JTEST_FW buffer with name buf_name.
167
 */
168
#define JTEST_CLEAR_BUFFER(buf_name)                    \
169
    do                                                  \
170
    {                                                   \
171
        memset(JTEST_FW.buf_name, 0, JTEST_BUF_SIZE);   \
172
    } while (0)
173
 
174
/**
175
 *  Clear the memory needed for the JTEST_FW's string buffer.
176
 */
177
#define JTEST_CLEAR_STR_BUFFER()                \
178
        JTEST_CLEAR_BUFFER(str_buffer)
179
 
180
/**
181
 *  Clear the memory needed for the JTEST_FW's data buffer.
182
 */
183
#define JTEST_CLEAR_DATA_BUFFER()               \
184
        JTEST_CLEAR_BUFFER(data_buffer)
185
 
186
/**
187
 *  Dump the given string to the Keil Debugger.
188
 */
189
#define JTEST_DUMP_STR(string)                          \
190
        JTEST_ACT_DUMP(dump_str, str_buffer, string)
191
 
192
/**
193
 *  Dump a formatted string to the Keil Debugger.
194
 */
195
#define JTEST_DUMP_STRF(format_str, ... )                               \
196
    do                                                                  \
197
    {                                                                   \
198
        JTEST_CLEAR_STR_BUFFER();                                       \
199
        sprintf(JTEST_FW.str_buffer,format_str, __VA_ARGS__);           \
200
        jtest_dump_str_segments();                                      \
201
    } while (0)
202
 
203
/* Pass/Fail Macros */
204
/*--------------------------------------------------------------------------------*/
205
 
206
/**
207
 *  Increment the number of passed tests in #JTEST_FW.
208
 */
209
#define JTEST_FW_INC_PASSED(amount)             \
210
        JTEST_PF_INC_PASSED(&JTEST_FW, amount)
211
 
212
/**
213
 *  Increment the number of passed tests in #JTEST_FW.
214
 */
215
#define JTEST_FW_INC_FAILED(amount)             \
216
        JTEST_PF_INC_FAILED(&JTEST_FW, amount)
217
 
218
/* Manipulating the Current Group */
219
/*--------------------------------------------------------------------------------*/
220
 
221
/**
222
 *  Evaluate to the current_group_ptr in #JTEST_FW.
223
 */
224
#define JTEST_CURRENT_GROUP_PTR()               \
225
    (JTEST_FW.current_group_ptr)
226
 
227
#define JTEST_SET_CURRENT_GROUP(group_ptr)      \
228
    do                                          \
229
    {                                           \
230
        JTEST_CURRENT_GROUP_PTR() = group_ptr;  \
231
    } while (0)
232
 
233
/*--------------------------------------------------------------------------------*/
234
/* Declare Global Variables */
235
/*--------------------------------------------------------------------------------*/
236
extern char JTEST_FW_STR_BUFFER[JTEST_BUF_SIZE];
237
extern volatile JTEST_FW_t JTEST_FW;
238
 
239
/*--------------------------------------------------------------------------------*/
240
/* Function Prototypes */
241
/*--------------------------------------------------------------------------------*/
242
void jtest_dump_str_segments(void);
243
 
244
void test_start  (void);
245
void test_end    (void);
246
void group_start (void);
247
void group_end   (void);
248
void dump_str    (void);
249
void dump_data   (void);
250
void exit_fw     (void);
251
 
252
 
253
#endif /* _JTEST_FW_H_ */