Project

General

Profile

Statistics
| Revision:

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

History | View | Annotate | Download (13.8 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
  uint16_t pan = xbee_get_pan();
165
  if(pan != 0){
166
    WL_DEBUG_PRINT_P("Pan error: defaulted to non-default Pan id (0):");
167
    usb_puti(pan);
168
    orb2_set_color(ORANGE);
169
    status++;
170
  }
171
  status = xbee_set_pan(0x2B7D);
172
  if(status != 0){
173
    WL_DEBUG_PRINT_P("\r\nPan error: error setting Pan id: ");
174
    usb_puth16(pan);
175
    orb2_set_color(ORANGE);
176
    status++;
177
  }
178
  pan = xbee_get_pan();
179
  if(pan != 0x2B7D){
180
    WL_DEBUG_PRINT_P("\r\nPan error: Pan id reads different than set value 0x2B7D: ");
181
    usb_puth16(pan);
182
    orb2_set_color(ORANGE);
183
    status++;
184
  }
185
  status = xbee_set_pan(0);
186
  if(status != 0){
187
    WL_DEBUG_PRINT_P("\r\nPan error: error setting Pan id: ");
188
    usb_puti(pan);
189
    orb2_set_color(ORANGE);
190
    status++;
191
  }
192
  pan = xbee_get_pan();
193
  if(pan != 0){
194
    WL_DEBUG_PRINT_P("\r\nPan error: Pan id reads different than set value 0: ");
195
    usb_puti(pan);
196
    orb2_set_color(ORANGE);
197
    status++;
198
  }
199
  int chanCount;
200
  for(chanCount = 0x0B; chanCount <= 0x1A; chanCount++){
201
    xbee_set_channel(0x10);
202
    WL_DEBUG_PRINT_P("\r\nChannel: ");
203
    WL_DEBUG_PRINT_HEX(xbee_get_channel());
204
  }
205
  uint16_t data = xbee_get_address();
206
  uint8_t sendBuffer[2];
207
  uint16_t address = 0;
208
  sendBuffer[0] = (data& 0xFF00) >> 8;
209
  sendBuffer[1] = (data& 0x00FF);
210
   
211
        
212
        WL_DEBUG_PRINT_P("\r\n\r\nXBee tests completed. There were ");
213
        usb_puti(status);
214
        WL_DEBUG_PRINT_P(" errors.\r\n");
215

    
216
        /*Tests sending in fast mode*/
217
        WL_DEBUG_PRINT_P("\r\nTests sending basic packets in fast mode...\r\n");
218
        status = 0;
219
        data = xbee_get_address();
220
        status = wl_send((uint8_t*)&data, 2, 0, GLOBAL, BROADCAST, FAST);
221
        WL_DEBUG_PRINT_P("Global fast broadcast basic send exit code ");
222
        usb_puti(status);
223
  char bigbuf[10];
224
  int8_t ret = wl_get(bigbuf,10);
225
  if (ret < 0) {
226
    WL_DEBUG_PRINT_P("error in wl_get:");
227
    WL_DEBUG_PRINT_INT(ret);
228
    WL_DEBUG_PRINT_P("\r\n");
229
  } else {
230
    WL_DEBUG_PRINT_P("get returned:");
231
    usb_puth16((uint16_t)bigbuf);
232
  }
233
        status = wl_send((uint8_t*)&data, 2, 0, GLOBAL, PAN, FAST);
234
        WL_DEBUG_PRINT_P("\r\nGlobal fast pan send basic exit code ");
235
        usb_puti(status);
236
  ret = wl_get(bigbuf,10);
237
  if (ret < 0) {
238
    WL_DEBUG_PRINT_P("error in wl_get:");
239
    WL_DEBUG_PRINT_INT(ret);
240
    WL_DEBUG_PRINT_P("\r\n");
241
  } else {
242
    WL_DEBUG_PRINT_P("get returned:");
243
    usb_puth16((uint16_t)bigbuf);
244
  }
245
        status = wl_send((uint8_t*)&data, 2, 0, GLOBAL, BROADCAST, FAST);
246
        WL_DEBUG_PRINT_P("\r\nGlobal fast broadcast basic send exit code ");
247
        usb_puti(status);
248
  ret = wl_get(bigbuf,10);
249
  if (ret < 0) {
250
    WL_DEBUG_PRINT_P("error in wl_get:");
251
    WL_DEBUG_PRINT_INT(ret);
252
    WL_DEBUG_PRINT_P("\r\n");
253
  } else {
254
    WL_DEBUG_PRINT_P("get returned:");
255
    usb_puth16((uint16_t)bigbuf);
256
  }
257
        status = wl_send((uint8_t*)&data, 2, 0, GLOBAL, PAN, FAST);
258
        WL_DEBUG_PRINT_P("\r\nGlobal fast pan send basic exit code ");
259
        usb_puti(status);
260
  ret = wl_get(bigbuf,10);
261
  if (ret < 0) {
262
    WL_DEBUG_PRINT_P("error in wl_get:");
263
    WL_DEBUG_PRINT_INT(ret);
264
    WL_DEBUG_PRINT_P("\r\n");
265
  } else {
266
    WL_DEBUG_PRINT_P("get returned:");
267
    usb_puth16((uint16_t)bigbuf);
268
  }
269
        status = wl_send((uint8_t*)&data, 2, 1, GLOBAL, BROADCAST, FAST);
270
        WL_DEBUG_PRINT_P("\r\nGlobal fast broadcast group 1 send exit code ");
271
        usb_puti(status);
272
  ret = wl_get(bigbuf,10);
273
  if (ret < 0) {
274
    WL_DEBUG_PRINT_P("error in wl_get:");
275
    WL_DEBUG_PRINT_INT(ret);
276
    WL_DEBUG_PRINT_P("\r\n");
277
  } else {
278
    WL_DEBUG_PRINT_P("get returned:");
279
    usb_puth16((uint16_t)bigbuf);
280
  }
281
        status = wl_send((uint8_t*)&data, 2, 2, GLOBAL, PAN, FAST);
282
        WL_DEBUG_PRINT_P("\r\nGlobal fast pan send group 2 exit code ");
283
        usb_puti(status);
284
  ret = wl_get(bigbuf,10);
285
  if (ret < 0) {
286
    WL_DEBUG_PRINT_P("error in wl_get:");
287
    WL_DEBUG_PRINT_INT(ret);
288
    WL_DEBUG_PRINT_P("\r\n");
289
  } else {
290
    WL_DEBUG_PRINT_P("get returned:");
291
    usb_puth16((uint16_t)bigbuf);
292
  }
293
        status = wl_send((uint8_t*)&data, 2, 1, GLOBAL, BROADCAST, FAST);
294
        WL_DEBUG_PRINT_P("\r\nGlobal fast broadcast group 3 send exit code ");
295
        usb_puti(status);
296
  ret = wl_get(bigbuf,10);
297
  if (ret < 0) {
298
    WL_DEBUG_PRINT_P("error in wl_get:");
299
    WL_DEBUG_PRINT_INT(ret);
300
    WL_DEBUG_PRINT_P("\r\n");
301
  } else {
302
    WL_DEBUG_PRINT_P("get returned:");
303
    usb_puth16((uint16_t)bigbuf);
304
  }
305
        status = wl_send((uint8_t*)&data, 2, 2, GLOBAL, PAN, FAST);
306
        WL_DEBUG_PRINT_P("\r\nGlobal fast pan send group 4 exit code ");
307
        usb_puti(status);
308
  ret = wl_get(bigbuf,10);
309
  if (ret < 0) {
310
    WL_DEBUG_PRINT_P("error in wl_get:");
311
    WL_DEBUG_PRINT_INT(ret);
312
    WL_DEBUG_PRINT_P("\r\n");
313
  } else {
314
    WL_DEBUG_PRINT_P("get returned:");
315
    usb_puth16((uint16_t)bigbuf);
316
  }
317
        WL_DEBUG_PRINT_P("\r\nFast send tests successful\r\n");
318

    
319
        /*Sends packets in fast mode until other robot responds*/
320
        status = 0;
321
  int len = 0;
322
        uint8_t buffer[10];
323
//        uint8_t sendBuffer[2];
324
        //uint16_t address = 0;
325
        orb2_set_color(BLUE);
326
        while(1){
327
                WL_DEBUG_PRINT_P("\r\nMy address: ");
328
                usb_puti(data);
329
                usb_puti(xbee_get_address());
330
                sendBuffer[0] = (data& 0xFF00) >> 8;
331
                sendBuffer[1] = (data& 0x00FF);
332
                wl_send((uint8_t*)sendBuffer, 2, 0, GLOBAL, BROADCAST, FAST);
333
                delay_ms(1000);
334
                len = wl_get_basic(buffer, 10);
335
                if(len != 0){
336
      address = (buffer[0] << 8) + buffer[1];
337
                        orb2_set_color(GREEN);
338
                        WL_DEBUG_PRINT_P("\r\nLength: ");
339
                        WL_DEBUG_PRINT_INT(len);
340
                        WL_DEBUG_PRINT_P("\r\nFriend address: ");
341
                        usb_puth16(address);
342
                        friendAddress = address;
343
                }
344
/*                if(button1_read()){
345
                        test_sending();
346
                        break;
347
                }
348
                if(button2_read()){
349
                        test_receiving();
350
                        break;
351
                }*/
352
        }
353
        
354

    
355
        /*Terminates wireless functions*/
356
        WL_DEBUG_PRINT_P("\r\n\r\nTerminating wireless...\r\n");
357
        status = wl_init();
358
        switch(status){
359
                case 0:
360
                        WL_DEBUG_PRINT_P("Wireless termination successful\r\n\r\n");
361
                        orb1_set_color(BLUE);
362
                        break;
363
                case -3:
364
                        WL_DEBUG_PRINT_P("Termination failed: library not initialized\r\n\r\n");
365
                        orb1_set_color(BLUE);
366
                        break;
367
                case -5:
368
                        WL_DEBUG_PRINT_P("Termination failed\r\n\r\n");
369
                        orb1_set_color(RED);
370
                        break;
371
                case -6:
372
                        WL_DEBUG_PRINT_P("Termination failed: function unregistration failed\r\n\r\n");
373
                        orb1_set_color(ORANGE);
374
                        break;
375
                default:
376
                        WL_DEBUG_PRINT_P("Error: Unreconnized status code: ");
377
                        usb_puti(status);
378
                        orb1_set_color(RED);
379
                        break;
380
        }
381

    
382
        WL_DEBUG_PRINT_P("\r\n\r\nWireless Library tests completed");
383
        while(1){}
384
}
385

    
386
void test_sending(){
387
        uint8_t count;
388
        //Testing all wrappers for FAST mode
389
        for(count = 0; count < 5; count++){
390
                usb_puti(count);
391
                usb_puti(wl_send_basic(&count, 1));
392
                delay_ms(500);
393
        }
394
        for(count = 5; count < 10; count++){
395
                usb_puti(count);
396
                usb_puti(wl_send_global(&count, 1, 0));
397
                delay_ms(1000);
398
        }        
399
        for(count = 10; count < 15; count++){
400
                usb_puti(count);
401
                usb_puti(wl_send_pan(&count, 1, xbee_get_pan()));
402
                delay_ms(1000);
403
        }
404
/*        for(count = 15; count < 20; count++){
405
                usb_puti(count);
406
                usb_puti(wl_send_robot(&count, 1, 0, friendAddress, FAST));
407
                delay_ms(1000);
408
        }
409
*/        for(count = 20; count < 25; count++){
410
                usb_puti(count);
411
                usb_puti(wl_send_global(&count, 1, 1));
412
                delay_ms(1000);
413
        }
414
        for(count = 25; count < 30; count++){
415
                usb_puti(count);
416
                usb_puti(wl_send_global(&count, 1, 2));
417
                delay_ms(1000);
418
        }
419
        for(count = 30; count < 35; count++){
420
                usb_puti(count);
421
                usb_puti(wl_send_global(&count, 1, 3));
422
                delay_ms(1000);
423
        }
424
        for(count = 35; count < 40; count++){
425
                usb_puti(count);
426
                usb_puti(wl_send_global(&count, 1, 4));
427
                delay_ms(1000);
428
        }
429
        //FAST mode tests completed. Now testing ACK system
430
/*        for(count = 40; count < 45; count++){
431
                usb_puti(count);
432
                usb_puti(wl_send_robot(&count, 1, 0, friendAddress, RELIABLE));
433
                delay_ms(1000);
434
        }
435
        for(count = 45; count < 50; count++){
436
                usb_puti(count);
437
                usb_puti(wl_send_robot(&count, 1, 1, friendAddress, RELIABLE));
438
                delay_ms(1000);
439
        }
440
        for(count = 50; count < 55; count++){
441
                usb_puti(count);
442
                usb_puti(wl_send_robot(&count, 1, 2, friendAddress, RELIABLE));
443
                delay_ms(1000);
444
        }
445
        for(count = 55; count < 60; count++){
446
                usb_puti(count);
447
                usb_puti(wl_send_robot(&count, 1, 3, friendAddress, RELIABLE));
448
                delay_ms(1000);
449
        }
450
        for(count = 60; count < 65; count++){
451
                usb_puti(count);
452
                usb_puti(wl_send_robot(&count, 1, 4, friendAddress, RELIABLE));
453
                delay_ms(1000);
454
        }
455
        WL_DEBUG_PRINT_P("ACK Errors: ");
456
        usb_puti(wl_ack_error());
457
        wl_ack_reset();
458
        usb_puti(wl_ack_error());
459
        for(count = 65; count < 70; count++){//changed friendAddress, all should fail
460
                usb_puti(count);
461
                usb_puti(wl_send_robot(&count, 1, 0, friendAddress + 1, RELIABLE));
462
                delay_ms(count * 10);
463
        }
464
        WL_DEBUG_PRINT_P("ACK Errors: ");
465
        usb_puti(wl_ack_error());
466
*/}
467

    
468
void test_receiving(){
469
        int8_t result, length;
470
        char* data[8];
471
        while(1){
472
                result = wl_get_basic(data, length);
473
                if(result){
474
                        WL_DEBUG_PRINT_P("\r\nData length: ");
475
                        WL_DEBUG_PRINT_INT(result);
476
                        WL_DEBUG_PRINT_P("\r\nData: ");
477
                        WL_DEBUG_PRINT_HEX(*data);
478
                }else{
479
                        delay_ms(100);
480
                }
481
        }
482
}
483

    
484
void group_1_function(uint8_t* data,uint8_t length,uint8_t source){
485
        WL_DEBUG_PRINT_P("\r\nFunction 1 called");
486
        return 0;
487
}
488
void group_2_function(uint8_t* data,uint8_t length,uint8_t source){
489
        WL_DEBUG_PRINT_P("\r\nFunction 2 called");
490
        return 0;
491
}
492
void group_3_function(uint8_t* data,uint8_t length,uint8_t source){
493
        WL_DEBUG_PRINT_P("\r\nFunction 3 called");
494
        return 0;
495
}
496
void group_4_function(uint8_t* data,uint8_t length,uint8_t source){
497
        WL_DEBUG_PRINT_P("\r\nFunction 4 called");
498
        return 0;
499
}
500
//The first robot to receive the address of another robot will trigger this function.
501
void test_function_1(void){
502
        uint16_t myAddress = xbee_get_address();
503
        usb_puti(myAddress);
504
        
505
        return 0;
506
}
507