Project

General

Profile

Statistics
| Revision:

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

History | View | Annotate | Download (14 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
  wl_send((uint8_t*)&sendBuffer, 2, 0, GLOBAL, BROADCAST, FAST);
211
  while (wl_get_basic(sendBuffer,2) <= 0) {
212
    WL_DEBUG_PRINT_P("error receiving data");
213
  }
214
  address = sendBuffer[0]<<8+sendBuffer[1];
215
  WL_DEBUG_PRINT_P("Friend address=");
216
  usb_puth16(address);
217
  
218
        
219
        WL_DEBUG_PRINT_P("\r\n\r\nXBee tests completed. There were ");
220
        usb_puti(status);
221
        WL_DEBUG_PRINT_P(" errors.\r\n");
222

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

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

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

    
389
        WL_DEBUG_PRINT_P("\r\n\r\nWireless Library tests completed");
390
        while(1){}
391
}
392

    
393
void test_sending(){
394
        uint8_t count;
395
        //Testing all wrappers for FAST mode
396
        for(count = 0; count < 5; count++){
397
                usb_puti(count);
398
                usb_puti(wl_send_basic(&count, 1));
399
                delay_ms(500);
400
        }
401
        for(count = 5; count < 10; count++){
402
                usb_puti(count);
403
                usb_puti(wl_send_global(&count, 1, 0));
404
                delay_ms(1000);
405
        }        
406
        for(count = 10; count < 15; count++){
407
                usb_puti(count);
408
                usb_puti(wl_send_pan(&count, 1, xbee_get_pan()));
409
                delay_ms(1000);
410
        }
411
/*        for(count = 15; count < 20; count++){
412
                usb_puti(count);
413
                usb_puti(wl_send_robot(&count, 1, 0, friendAddress, FAST));
414
                delay_ms(1000);
415
        }
416
*/        for(count = 20; count < 25; count++){
417
                usb_puti(count);
418
                usb_puti(wl_send_global(&count, 1, 1));
419
                delay_ms(1000);
420
        }
421
        for(count = 25; count < 30; count++){
422
                usb_puti(count);
423
                usb_puti(wl_send_global(&count, 1, 2));
424
                delay_ms(1000);
425
        }
426
        for(count = 30; count < 35; count++){
427
                usb_puti(count);
428
                usb_puti(wl_send_global(&count, 1, 3));
429
                delay_ms(1000);
430
        }
431
        for(count = 35; count < 40; count++){
432
                usb_puti(count);
433
                usb_puti(wl_send_global(&count, 1, 4));
434
                delay_ms(1000);
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;
477
        char* data[8];
478
        while(1){
479
                result = wl_get_basic(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");
501
        return 0;
502
}
503
void group_4_function(uint8_t* data,uint8_t length,uint8_t source){
504
        WL_DEBUG_PRINT_P("\r\nFunction 4 called");
505
        return 0;
506
}
507
//The first robot to receive the address of another robot will trigger this function.
508
void test_function_1(void){
509
        uint16_t myAddress = xbee_get_address();
510
        usb_puti(myAddress);
511
        
512
        return 0;
513
}
514