Project

General

Profile

Statistics
| Revision:

root / branches / wireless / code / projects / unit_tests / test_wireless2.c @ 1658

History | View | Annotate | Download (10.9 KB)

1
#include <wl_defs.h>
2
#include <string.h>
3
#include <wireless.h>
4
#include <lights.h>
5
#include <dragonfly_lib.h>
6
#include <xbee.h>
7

    
8

    
9
void group_1_function(uint8_t* data,uint8_t length,uint8_t source);
10
void group_2_function(uint8_t* data,uint8_t length,uint8_t source);
11
void group_3_function(uint8_t* data,uint8_t length,uint8_t source);
12
void group_4_function(uint8_t* data,uint8_t length,uint8_t source);
13
void test_function_1(void);
14
void test_sending();
15
void test_receiving();
16

    
17
uint16_t friendAddress = 0;
18

    
19
/* This function tests out the full functionality of the new wireless library.
20
 * It must be run on two colony bots simultaneously to properly test all funtions.
21
*/
22
void testwireless2(void)
23
{
24
        orb_init();
25
        usb_init();
26
        int status = 0;
27

    
28
        WL_DEBUG_PRINT_P("New Wireless Library Test Suite\r\n");
29
                
30
        /*Initialize the wirelss library*/
31
        WL_DEBUG_PRINT_P("Initializing library...\r\n");
32
        orb1_set_color(BLUE);
33
        status = wl_init();
34
        switch(status){
35
                case 0:
36
                        WL_DEBUG_PRINT_P("Library initialization successful\r\n\r\n");
37
                        orb1_set_color(GREEN);
38
                        break;
39
                case -1:
40
                        WL_DEBUG_PRINT_P("Initialization failed: already initialized\r\n\r\n");
41
                        orb1_set_color(GREEN);
42
                        break;
43
                case -2:
44
                        WL_DEBUG_PRINT_P("Initialization failed: XBEE initialization failed\r\n\r\n");
45
                        orb1_set_color(RED);
46
                        break;
47
                default:
48
                        WL_DEBUG_PRINT_P("Error: Unreconnized status code: ");
49
                        usb_puti(status);
50
                        WL_DEBUG_PRINT_P("\r\n\r\n");
51
                        orb1_set_color(RED);
52
                        break;
53
        }
54
        while((status!=0) && 1);
55

    
56
        /*Test all constants defined correctly*/
57
        status = 0;
58
        WL_DEBUG_PRINT_P("Testing constants...");
59
        orb2_set_color(GREEN);
60
        if(GLOBAL!=0){
61
                WL_DEBUG_PRINT_P("\r\nGLOBAL defined as ");
62
                usb_puti(GLOBAL);
63
                status++;
64
        }
65
        WL_DEBUG_PRINT_P(".");
66
        if(PAN!=1){
67
                WL_DEBUG_PRINT_P("\r\nPAN defined as ");
68
                usb_puti(PAN);
69
                status++;
70
        }
71
        WL_DEBUG_PRINT_P(".");
72
        if(BROADCAST!=0xFFFF){
73
                WL_DEBUG_PRINT_P("\r\nBROADCAST defined as ");
74
                usb_puti(BROADCAST);
75
                status++;
76
        }
77
        WL_DEBUG_PRINT_P(".");
78
        if(RELIABLE!=0){
79
                WL_DEBUG_PRINT_P("\r\nRELIABLE defined as ");
80
                usb_puti(RELIABLE);
81
                status++;
82
        }
83
        WL_DEBUG_PRINT_P(".");
84
        if(FAST!=1){
85
                WL_DEBUG_PRINT_P("\r\nFAST defined as ");
86
                usb_puti(FAST);
87
                status++;
88
        }
89
        WL_DEBUG_PRINT_P(".");
90
        if(NORMAL_PRIORITY!=0){
91
                WL_DEBUG_PRINT_P("\r\nNORMAL_PRIORITY defined as ");
92
                usb_puti(NORMAL_PRIORITY);
93
                status++;
94
        }
95
        WL_DEBUG_PRINT_P(".");
96
        if(HIGH_PRIORITY!=1){
97
                WL_DEBUG_PRINT_P("\r\nHIGH_PRIORITY defined as ");
98
                usb_puti(HIGH_PRIORITY);
99
                status++;
100
        }
101
        WL_DEBUG_PRINT_P(".\r\nConstant test complete. There were ");
102
        usb_puti(status);
103
        WL_DEBUG_PRINT_P(" errors\r\n");
104
        if(status!=0){
105
                orb2_set_color(ORANGE);
106
                delay_ms(500);
107
        }
108
        /*Tests function registration*/
109
        WL_DEBUG_PRINT_P("\r\nTesting function registration");
110
        int registers[8], count;
111
        status = 0;
112
        orb2_set_color(GREEN);
113
        registers[0] = wl_register_handler(1, group_1_function, 0);
114
        registers[1] = wl_register_handler(2, group_2_function, 1);
115
        registers[2] = wl_register_handler(3, group_3_function, 0);
116
        registers[3] = wl_register_handler(4, group_4_function, 1);
117
        registers[4] = wl_register_handler(0, group_1_function, 0);
118
        registers[5] = wl_register_handler(6, NULL, 0);
119
        registers[6] = wl_register_handler(30, group_3_function, 0);
120
        registers[7] = wl_register_handler(-1, group_4_function, 0);
121
        for(count=0; count<=3; count++){
122
                if(registers[count] != 0){
123
                        WL_DEBUG_PRINT_P("\r\nFunction registration error: attempt ");
124
                        usb_puti(count);
125
                        WL_DEBUG_PRINT_P(" returned ");
126
                        usb_puti(registers[count]);
127
                        WL_DEBUG_PRINT_P(" instead of success\r\n");
128
                        orb2_set_color(ORANGE);
129
                        status++;
130
                }
131
        }
132
        for(count=4; count<=6; count++){
133
                if(registers[count] == 0){
134
                        WL_DEBUG_PRINT_P("\r\nFunction registration error: attempt ");
135
                        usb_puti(count);
136
                        WL_DEBUG_PRINT_P(" succeeded instead of failing\r\n");
137
                        orb2_set_color(ORANGE);
138
                        status++;
139
                }
140
                if(registers[count] != 0 && registers[count] != -5){
141
                        WL_DEBUG_PRINT_P("\r\nFunction registration error: attempt ");
142
                        usb_puti(count);
143
                        WL_DEBUG_PRINT_P(" returned ");
144
                        usb_puti(registers[count]);
145
                        WL_DEBUG_PRINT_P(" instead of -5\r\n");
146
                        orb2_set_color(ORANGE);
147
                        status++;
148
                }
149
        }
150
        if(registers[7] == 0){
151
                WL_DEBUG_PRINT_P("\r\nCongrats, you let an array write to index -1\r\n");
152
                orb2_set_color(RED);
153
                status++;
154
        }
155
        WL_DEBUG_PRINT_P("Registration test completed. There were ");
156
        usb_puti(status);
157
        WL_DEBUG_PRINT_P(" errors\r\n");
158
        delay_ms(500);
159
        
160
        /*Tests XBee functions*/
161
        WL_DEBUG_PRINT_P("\r\nTesting XBee fuctions...\r\n");
162
        status = 0;
163
        orb2_set_color(GREEN);
164
        unsigned int pan = xbee_get_pan();
165
        if(pan != 0){
166
                WL_DEBUG_PRINT_P("Pan error: defaulted to non-default Pan id :");
167
                usb_puti(pan);
168
                orb2_set_color(ORANGE);
169
                status++;
170
        }
171
        pan = xbee_set_pan(1);
172
        if(pan != 0){
173
                WL_DEBUG_PRINT_P("\r\nPan error: error setting Pan id: ");
174
                usb_puti(pan);
175
                orb2_set_color(ORANGE);
176
                status++;
177
        }
178
        pan = xbee_get_pan();
179
        if(pan != 0){
180
                WL_DEBUG_PRINT_P("\r\nPan error: Pan id reads different than set value 1: ");
181
                usb_puti(pan);
182
                orb2_set_color(ORANGE);
183
                status++;
184
        }
185
        
186
        WL_DEBUG_PRINT_P("\r\nXBee tests completed. There were ");
187
        usb_puti(status);
188
        WL_DEBUG_PRINT_P(" errors.\r\n");
189

    
190
        /*Tests sending in fast mode*/
191
        WL_DEBUG_PRINT_P("\r\nTests sending basic packets in fast mode...\r\n");
192
        status = 0;
193
        uint16_t data = xbee_get_address();
194
        status = wl_send((uint8_t*)&data, 2, 0, GLOBAL, BROADCAST, FAST);
195
        WL_DEBUG_PRINT_P("Global fast broadcast basic send exit code ");
196
        usb_puti(status);
197
        status = wl_send((uint8_t*)&data, 2, 0, GLOBAL, PAN, FAST);
198
        WL_DEBUG_PRINT_P("\r\nGlobal fast pan send basic exit code ");
199
        usb_puti(status);
200
        status = wl_send((uint8_t*)&data, 2, 0, GLOBAL, BROADCAST, FAST);
201
        WL_DEBUG_PRINT_P("\r\nGlobal fast broadcast basic send exit code ");
202
        usb_puti(status);
203
        status = wl_send((uint8_t*)&data, 2, 0, GLOBAL, PAN, FAST);
204
        WL_DEBUG_PRINT_P("\r\nGlobal fast pan send basic exit code ");
205
        usb_puti(status);
206
        status = wl_send((uint8_t*)&data, 2, 1, GLOBAL, BROADCAST, FAST);
207
        WL_DEBUG_PRINT_P("\r\nGlobal fast broadcast group 1 send exit code ");
208
        usb_puti(status);
209
        status = wl_send((uint8_t*)&data, 2, 2, GLOBAL, PAN, FAST);
210
        WL_DEBUG_PRINT_P("\r\nGlobal fast pan send group 2 exit code ");
211
        usb_puti(status);
212
        status = wl_send((uint8_t*)&data, 2, 1, GLOBAL, BROADCAST, FAST);
213
        WL_DEBUG_PRINT_P("\r\nGlobal fast broadcast group 3 send exit code ");
214
        usb_puti(status);
215
        status = wl_send((uint8_t*)&data, 2, 2, GLOBAL, PAN, FAST);
216
        WL_DEBUG_PRINT_P("\r\nGlobal fast pan send group 4 exit code ");
217
        usb_puti(status);
218
        WL_DEBUG_PRINT_P("\r\nFast send tests successful\r\n");
219

    
220
        /*Sends packets in fast mode until other robot responds*/
221
        status = 0;
222
        char address[2]; /*will contain a 16 bit address, so length always 2*/
223
        *address = 0;
224
        orb2_set_color(BLUE);
225
        while(status <= 0){
226
                wl_send((uint8_t*)&data, 2, 0, GLOBAL, BROADCAST, FAST);
227
                wl_get_basic(address, 2);
228
                if(address != 0){
229
                        orb2_set_color(GREEN);
230
                        WL_DEBUG_PRINT_P("\r\nFriend address: ");
231
                        usb_puti((uint16_t)address);
232
                        friendAddress = *address;
233
                }
234
                if(button1_read){
235
                        test_sending();
236
                        break;
237
                }
238
                if(button2_read){
239
                        test_receiving();
240
                        break;
241
                }
242
        }
243
        
244

    
245
        /*Terminates wireless functions*/
246
        WL_DEBUG_PRINT_P("\r\n\r\nTerminating wireless...\r\n");
247
        status = wl_init();
248
        switch(status){
249
                case 0:
250
                        WL_DEBUG_PRINT_P("Wireless termination successful\r\n\r\n");
251
                        orb1_set_color(BLUE);
252
                        break;
253
                case -3:
254
                        WL_DEBUG_PRINT_P("Termination failed: library not initialized\r\n\r\n");
255
                        orb1_set_color(BLUE);
256
                        break;
257
                case -5:
258
                        WL_DEBUG_PRINT_P("Termination failed\r\n\r\n");
259
                        orb1_set_color(RED);
260
                        break;
261
                case -6:
262
                        WL_DEBUG_PRINT_P("Termination failed: function unregistration failed\r\n\r\n");
263
                        orb1_set_color(ORANGE);
264
                        break;
265
                default:
266
                        WL_DEBUG_PRINT_P("Error: Unreconnized status code: ");
267
                        usb_puti(status);
268
                        orb1_set_color(RED);
269
                        break;
270
        }
271

    
272
        WL_DEBUG_PRINT_P("\r\n\r\nWireless Library tests completed");
273
        while(1){}
274
}
275

    
276
void test_sending(){
277
        uint8_t count;
278
        //Testing all wrappers for FAST mode
279
        for(count = 0; count < 5; count++){
280
                usb_puti(count);
281
                usb_puti(wl_send_basic(&count, 1));
282
                delay_ms(count * 10);
283
        }
284
        for(count = 5; count < 10; count++){
285
                usb_puti(count);
286
                usb_puti(wl_send_global(&count, 1, 0));
287
                delay_ms(count * 10);
288
        }        
289
        for(count = 10; count < 15; count++){
290
                usb_puti(count);
291
                usb_puti(wl_send_pan(&count, 1, xbee_get_pan()));
292
                delay_ms(count * 10);
293
        }
294
        for(count = 15; count < 20; count++){
295
                usb_puti(count);
296
                usb_puti(wl_send_robot(&count, 1, 0, friendAddress, FAST));
297
                delay_ms(count * 10);
298
        }
299
        for(count = 20; count < 25; count++){
300
                usb_puti(count);
301
                usb_puti(wl_send_global(&count, 1, 1));
302
                delay_ms(count * 10);
303
        }
304
        for(count = 25; count < 30; count++){
305
                usb_puti(count);
306
                usb_puti(wl_send_global(&count, 1, 2));
307
                delay_ms(count * 10);
308
        }
309
        for(count = 30; count < 35; count++){
310
                usb_puti(count);
311
                usb_puti(wl_send_global(&count, 1, 3));
312
                delay_ms(count * 10);
313
        }
314
        for(count = 35; count < 40; count++){
315
                usb_puti(count);
316
                usb_puti(wl_send_global(&count, 1, 4));
317
                delay_ms(count * 10);
318
        }
319
        //FAST mode tests completed. Now testing ACK system
320
        for(count = 40; count < 45; count++){
321
                usb_puti(count);
322
                usb_puti(wl_send_robot(&count, 1, 0, friendAddress, RELIABLE));
323
                delay_ms(count * 10);
324
        }
325
        for(count = 45; count < 50; count++){
326
                usb_puti(count);
327
                usb_puti(wl_send_robot(&count, 1, 1, friendAddress, RELIABLE));
328
                delay_ms(count * 10);
329
        }
330
        for(count = 50; count < 55; count++){
331
                usb_puti(count);
332
                usb_puti(wl_send_robot(&count, 1, 2, friendAddress, RELIABLE));
333
                delay_ms(count * 10);
334
        }
335
        for(count = 55; count < 60; count++){
336
                usb_puti(count);
337
                usb_puti(wl_send_robot(&count, 1, 3, friendAddress, RELIABLE));
338
                delay_ms(count * 10);
339
        }
340
        for(count = 60; count < 65; count++){
341
                usb_puti(count);
342
                usb_puti(wl_send_robot(&count, 1, 4, friendAddress, RELIABLE));
343
                delay_ms(count * 10);
344
        }
345
        WL_DEBUG_PRINT_P("ACK Errors: ");
346
        usb_puti(wl_ack_error());
347
        wl_ack_reset();
348
        usb_puti(wl_ack_error());
349
        for(count = 40; count < 45; count++){//changed friendAddress, all should fail
350
                usb_puti(count);
351
                usb_puti(wl_send_robot(&count, 1, 0, friendAddress + 1, RELIABLE));
352
                delay_ms(count * 10);
353
        }
354
        WL_DEBUG_PRINT_P("ACK Errors: ");
355
        usb_puti(wl_ack_error());
356
}
357

    
358
void test_receiving(){
359
        int8_t result, length;
360
        char* data[8];
361
        while(1){
362
                result = wl_get(data, length);
363
                if(result){
364
                        usb_puti(*data);
365
                }
366
        }
367
}
368

    
369
void group_1_function(uint8_t* data,uint8_t length,uint8_t source){
370
        WL_DEBUG_PRINT_P("\r\nFunction 1 called");
371
        return 0;
372
}
373
void group_2_function(uint8_t* data,uint8_t length,uint8_t source){
374
        WL_DEBUG_PRINT_P("\r\nFunction 2 called");
375
        return 0;
376
}
377
void group_3_function(uint8_t* data,uint8_t length,uint8_t source){
378
        WL_DEBUG_PRINT_P("\r\nFunction 3 called");
379
        return 0;
380
}
381
void group_4_function(uint8_t* data,uint8_t length,uint8_t source){
382
        WL_DEBUG_PRINT_P("\r\nFunction 4 called");
383
        return 0;
384
}
385
//The first robot to receive the address of another robot will trigger this function.
386
void test_function_1(void){
387
        uint16_t myAddress = xbee_get_address();
388
        usb_puti(myAddress);
389
        
390
        return 0;
391
}
392

    
393
//Cheat Functions
394
//These will run instead of the real functions while David fixes the library
395