Project

General

Profile

Statistics
| Revision:

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

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

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

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

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

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

    
475
void test_receiving(){
476
        int8_t result, length = 8;
477
        char* data[8];
478
        while(1){
479
                result = wl_get(data, length);
480
                if(result){
481
                        WL_DEBUG_PRINT_P("\r\nData length: ");
482
                        WL_DEBUG_PRINT_INT(result);
483
                        WL_DEBUG_PRINT_P("\r\nData: ");
484
                        WL_DEBUG_PRINT_HEX(*data);
485
                }else{
486
                        delay_ms(100);
487
                }
488
        }
489
}
490

    
491
void group_1_function(uint8_t* data,uint8_t length,uint8_t source){
492
        WL_DEBUG_PRINT_P("\r\nFunction 1 called");
493
        return 0;
494
}
495
void group_2_function(uint8_t* data,uint8_t length,uint8_t source){
496
        WL_DEBUG_PRINT_P("\r\nFunction 2 called");
497
        return 0;
498
}
499
void group_3_function(uint8_t* data,uint8_t length,uint8_t source){
500
        WL_DEBUG_PRINT_P("\r\nFunction 3 called. Length: ");
501
        WL_DEBUG_PRINT_INT(length);
502
        WL_DEBUG_PRINT_P(" Soucre: ");
503
        WL_DEBUG_PRINT_HEX(source);
504
        return 0;
505
}
506
void group_4_function(uint8_t* data,uint8_t length,uint8_t source){
507
        WL_DEBUG_PRINT_P("\r\nFunction 4 called");
508
        return 0;
509
}
510
//The first robot to receive the address of another robot will trigger this function.
511
void test_function_1(void){
512
        uint16_t myAddress = xbee_get_address();
513
        usb_puti(myAddress);
514
        
515
        return 0;
516
}
517