1 |
|
#include <stdlib.h>
|
2 |
|
#include <stdio.h>
|
|
1 |
#include <wl_defs.h>
|
3 |
2 |
#include <string.h>
|
4 |
3 |
#include <wireless.h>
|
5 |
4 |
#include <lights.h>
|
6 |
5 |
#include <dragonfly_lib.h>
|
7 |
6 |
#include <xbee.h>
|
8 |
|
#include <avr/pgmspace.h>
|
9 |
7 |
|
|
8 |
|
10 |
9 |
void group_1_function(uint8_t* data,uint8_t length,uint8_t source);
|
11 |
10 |
void group_2_function(uint8_t* data,uint8_t length,uint8_t source);
|
12 |
11 |
void group_3_function(uint8_t* data,uint8_t length,uint8_t source);
|
... | ... | |
26 |
25 |
usb_init();
|
27 |
26 |
int status = 0;
|
28 |
27 |
|
29 |
|
usb_puts("New Wireless Library Test Suite\r\n");
|
|
28 |
WL_DEBUG_PRINT_P("New Wireless Library Test Suite\r\n");
|
30 |
29 |
|
31 |
30 |
/*Initialize the wirelss library*/
|
32 |
|
usb_puts("Initializing library...\r\n");
|
|
31 |
WL_DEBUG_PRINT_P("Initializing library...\r\n");
|
33 |
32 |
orb1_set_color(BLUE);
|
34 |
33 |
status = wl_init();
|
35 |
34 |
switch(status){
|
36 |
35 |
case 0:
|
37 |
|
usb_puts("Library initialization successful\r\n\r\n");
|
|
36 |
WL_DEBUG_PRINT_P("Library initialization successful\r\n\r\n");
|
38 |
37 |
orb1_set_color(GREEN);
|
39 |
38 |
break;
|
40 |
39 |
case -1:
|
41 |
|
usb_puts("Initialization failed: already initialized\r\n\r\n");
|
|
40 |
WL_DEBUG_PRINT_P("Initialization failed: already initialized\r\n\r\n");
|
42 |
41 |
orb1_set_color(GREEN);
|
43 |
42 |
break;
|
44 |
43 |
case -2:
|
45 |
|
usb_puts("Initialization failed: XBEE initialization failed\r\n\r\n");
|
|
44 |
WL_DEBUG_PRINT_P("Initialization failed: XBEE initialization failed\r\n\r\n");
|
46 |
45 |
orb1_set_color(RED);
|
47 |
46 |
break;
|
48 |
47 |
default:
|
49 |
|
usb_puts("Error: Unreconnized status code: ");
|
|
48 |
WL_DEBUG_PRINT_P("Error: Unreconnized status code: ");
|
50 |
49 |
usb_puti(status);
|
51 |
|
usb_puts("\r\n\r\n");
|
|
50 |
WL_DEBUG_PRINT_P("\r\n\r\n");
|
52 |
51 |
orb1_set_color(RED);
|
53 |
52 |
break;
|
54 |
53 |
}
|
... | ... | |
56 |
55 |
|
57 |
56 |
/*Test all constants defined correctly*/
|
58 |
57 |
status = 0;
|
59 |
|
usb_puts("Testing constants...");
|
|
58 |
WL_DEBUG_PRINT_P("Testing constants...");
|
60 |
59 |
orb2_set_color(GREEN);
|
61 |
60 |
if(GLOBAL!=0){
|
62 |
|
usb_puts("\r\nGLOBAL defined as ");
|
|
61 |
WL_DEBUG_PRINT_P("\r\nGLOBAL defined as ");
|
63 |
62 |
usb_puti(GLOBAL);
|
64 |
63 |
status++;
|
65 |
64 |
}
|
66 |
|
usb_puts(".");
|
|
65 |
WL_DEBUG_PRINT_P(".");
|
67 |
66 |
if(PAN!=1){
|
68 |
|
usb_puts("\r\nPAN defined as ");
|
|
67 |
WL_DEBUG_PRINT_P("\r\nPAN defined as ");
|
69 |
68 |
usb_puti(PAN);
|
70 |
69 |
status++;
|
71 |
70 |
}
|
72 |
|
usb_puts(".");
|
|
71 |
WL_DEBUG_PRINT_P(".");
|
73 |
72 |
if(BROADCAST!=0xFFFF){
|
74 |
|
usb_puts("\r\nBROADCAST defined as ");
|
|
73 |
WL_DEBUG_PRINT_P("\r\nBROADCAST defined as ");
|
75 |
74 |
usb_puti(BROADCAST);
|
76 |
75 |
status++;
|
77 |
76 |
}
|
78 |
|
usb_puts(".");
|
|
77 |
WL_DEBUG_PRINT_P(".");
|
79 |
78 |
if(RELIABLE!=0){
|
80 |
|
usb_puts("\r\nRELIABLE defined as ");
|
|
79 |
WL_DEBUG_PRINT_P("\r\nRELIABLE defined as ");
|
81 |
80 |
usb_puti(RELIABLE);
|
82 |
81 |
status++;
|
83 |
82 |
}
|
84 |
|
usb_puts(".");
|
|
83 |
WL_DEBUG_PRINT_P(".");
|
85 |
84 |
if(FAST!=1){
|
86 |
|
usb_puts("\r\nFAST defined as ");
|
|
85 |
WL_DEBUG_PRINT_P("\r\nFAST defined as ");
|
87 |
86 |
usb_puti(FAST);
|
88 |
87 |
status++;
|
89 |
88 |
}
|
90 |
|
usb_puts(".");
|
|
89 |
WL_DEBUG_PRINT_P(".");
|
91 |
90 |
if(NORMAL_PRIORITY!=0){
|
92 |
|
usb_puts("\r\nNORMAL_PRIORITY defined as ");
|
|
91 |
WL_DEBUG_PRINT_P("\r\nNORMAL_PRIORITY defined as ");
|
93 |
92 |
usb_puti(NORMAL_PRIORITY);
|
94 |
93 |
status++;
|
95 |
94 |
}
|
96 |
|
usb_puts(".");
|
|
95 |
WL_DEBUG_PRINT_P(".");
|
97 |
96 |
if(HIGH_PRIORITY!=1){
|
98 |
|
usb_puts("\r\nHIGH_PRIORITY defined as ");
|
|
97 |
WL_DEBUG_PRINT_P("\r\nHIGH_PRIORITY defined as ");
|
99 |
98 |
usb_puti(HIGH_PRIORITY);
|
100 |
99 |
status++;
|
101 |
100 |
}
|
102 |
|
usb_puts(".\r\nConstant test complete. There were ");
|
|
101 |
WL_DEBUG_PRINT_P(".\r\nConstant test complete. There were ");
|
103 |
102 |
usb_puti(status);
|
104 |
|
usb_puts(" errors\r\n");
|
|
103 |
WL_DEBUG_PRINT_P(" errors\r\n");
|
105 |
104 |
if(status!=0){
|
106 |
105 |
orb2_set_color(ORANGE);
|
107 |
106 |
delay_ms(500);
|
108 |
107 |
}
|
109 |
108 |
/*Tests function registration*/
|
110 |
|
usb_puts("\r\nTesting function registration");
|
|
109 |
WL_DEBUG_PRINT_P("\r\nTesting function registration");
|
111 |
110 |
int registers[8], count;
|
112 |
111 |
status = 0;
|
113 |
112 |
orb2_set_color(GREEN);
|
... | ... | |
121 |
120 |
registers[7] = wl_register_handler(-1, group_4_function, 0);
|
122 |
121 |
for(count=0; count<=3; count++){
|
123 |
122 |
if(registers[count] != 0){
|
124 |
|
usb_puts("\r\nFunction registration error: attempt ");
|
|
123 |
WL_DEBUG_PRINT_P("\r\nFunction registration error: attempt ");
|
125 |
124 |
usb_puti(count);
|
126 |
|
usb_puts(" returned ");
|
|
125 |
WL_DEBUG_PRINT_P(" returned ");
|
127 |
126 |
usb_puti(registers[count]);
|
128 |
|
usb_puts(" instead of success\r\n");
|
|
127 |
WL_DEBUG_PRINT_P(" instead of success\r\n");
|
129 |
128 |
orb2_set_color(ORANGE);
|
130 |
129 |
status++;
|
131 |
130 |
}
|
132 |
131 |
}
|
133 |
132 |
for(count=4; count<=6; count++){
|
134 |
133 |
if(registers[count] == 0){
|
135 |
|
usb_puts("\r\nFunction registration error: attempt ");
|
|
134 |
WL_DEBUG_PRINT_P("\r\nFunction registration error: attempt ");
|
136 |
135 |
usb_puti(count);
|
137 |
|
usb_puts(" succeeded instead of failing\r\n");
|
|
136 |
WL_DEBUG_PRINT_P(" succeeded instead of failing\r\n");
|
138 |
137 |
orb2_set_color(ORANGE);
|
139 |
138 |
status++;
|
140 |
139 |
}
|
141 |
140 |
if(registers[count] != 0 && registers[count] != -5){
|
142 |
|
usb_puts("\r\nFunction registration error: attempt ");
|
|
141 |
WL_DEBUG_PRINT_P("\r\nFunction registration error: attempt ");
|
143 |
142 |
usb_puti(count);
|
144 |
|
usb_puts(" returned ");
|
|
143 |
WL_DEBUG_PRINT_P(" returned ");
|
145 |
144 |
usb_puti(registers[count]);
|
146 |
|
usb_puts(" instead of -5\r\n");
|
|
145 |
WL_DEBUG_PRINT_P(" instead of -5\r\n");
|
147 |
146 |
orb2_set_color(ORANGE);
|
148 |
147 |
status++;
|
149 |
148 |
}
|
150 |
149 |
}
|
151 |
150 |
if(registers[7] == 0){
|
152 |
|
usb_puts("\r\nCongrats, you let an array write to index -1\r\n");
|
|
151 |
WL_DEBUG_PRINT_P("\r\nCongrats, you let an array write to index -1\r\n");
|
153 |
152 |
orb2_set_color(RED);
|
154 |
153 |
status++;
|
155 |
154 |
}
|
156 |
|
usb_puts("Registration test completed. There were ");
|
|
155 |
WL_DEBUG_PRINT_P("Registration test completed. There were ");
|
157 |
156 |
usb_puti(status);
|
158 |
|
usb_puts(" errors\r\n");
|
|
157 |
WL_DEBUG_PRINT_P(" errors\r\n");
|
159 |
158 |
delay_ms(500);
|
160 |
159 |
|
161 |
160 |
/*Tests XBee functions*/
|
162 |
|
usb_puts("\r\nTesting XBee fuctions...\r\n");
|
|
161 |
WL_DEBUG_PRINT_P("\r\nTesting XBee fuctions...\r\n");
|
163 |
162 |
status = 0;
|
164 |
163 |
orb2_set_color(GREEN);
|
165 |
164 |
unsigned int pan = xbee_get_pan();
|
166 |
165 |
if(pan != 0){
|
167 |
|
usb_puts("Pan error: defaulted to non-default Pan id :");
|
|
166 |
WL_DEBUG_PRINT_P("Pan error: defaulted to non-default Pan id :");
|
168 |
167 |
usb_puti(pan);
|
169 |
168 |
orb2_set_color(ORANGE);
|
170 |
169 |
status++;
|
171 |
170 |
}
|
172 |
171 |
pan = xbee_set_pan(1);
|
173 |
172 |
if(pan != 0){
|
174 |
|
usb_puts("\r\nPan error: error setting Pan id: ");
|
|
173 |
WL_DEBUG_PRINT_P("\r\nPan error: error setting Pan id: ");
|
175 |
174 |
usb_puti(pan);
|
176 |
175 |
orb2_set_color(ORANGE);
|
177 |
176 |
status++;
|
178 |
177 |
}
|
179 |
178 |
pan = xbee_get_pan();
|
180 |
179 |
if(pan != 0){
|
181 |
|
usb_puts("\r\nPan error: Pan id reads different than set value 1: ");
|
|
180 |
WL_DEBUG_PRINT_P("\r\nPan error: Pan id reads different than set value 1: ");
|
182 |
181 |
usb_puti(pan);
|
183 |
182 |
orb2_set_color(ORANGE);
|
184 |
183 |
status++;
|
185 |
184 |
}
|
186 |
185 |
|
187 |
|
usb_puts("\r\nXBee tests completed. There were ");
|
|
186 |
WL_DEBUG_PRINT_P("\r\nXBee tests completed. There were ");
|
188 |
187 |
usb_puti(status);
|
189 |
|
usb_puts(" errors.\r\n");
|
|
188 |
WL_DEBUG_PRINT_P(" errors.\r\n");
|
190 |
189 |
|
191 |
190 |
/*Tests sending in fast mode*/
|
192 |
|
usb_puts("\r\nTests sending basic packets in fast mode...\r\n");
|
|
191 |
WL_DEBUG_PRINT_P("\r\nTests sending basic packets in fast mode...\r\n");
|
193 |
192 |
status = 0;
|
194 |
193 |
uint16_t data = xbee_get_address();
|
195 |
194 |
status = wl_send((uint8_t*)&data, 2, 0, GLOBAL, BROADCAST, FAST);
|
196 |
|
usb_puts("Global fast broadcast basic send exit code ");
|
|
195 |
WL_DEBUG_PRINT_P("Global fast broadcast basic send exit code ");
|
197 |
196 |
usb_puti(status);
|
198 |
197 |
status = wl_send((uint8_t*)&data, 2, 0, GLOBAL, PAN, FAST);
|
199 |
|
usb_puts("\r\nGlobal fast pan send basic exit code ");
|
|
198 |
WL_DEBUG_PRINT_P("\r\nGlobal fast pan send basic exit code ");
|
200 |
199 |
usb_puti(status);
|
201 |
200 |
status = wl_send((uint8_t*)&data, 2, 0, GLOBAL, BROADCAST, FAST);
|
202 |
|
usb_puts("\r\nGlobal fast broadcast basic send exit code ");
|
|
201 |
WL_DEBUG_PRINT_P("\r\nGlobal fast broadcast basic send exit code ");
|
203 |
202 |
usb_puti(status);
|
204 |
203 |
status = wl_send((uint8_t*)&data, 2, 0, GLOBAL, PAN, FAST);
|
205 |
|
usb_puts("\r\nGlobal fast pan send basic exit code ");
|
|
204 |
WL_DEBUG_PRINT_P("\r\nGlobal fast pan send basic exit code ");
|
206 |
205 |
usb_puti(status);
|
207 |
206 |
status = wl_send((uint8_t*)&data, 2, 1, GLOBAL, BROADCAST, FAST);
|
208 |
|
usb_puts("\r\nGlobal fast broadcast group 1 send exit code ");
|
|
207 |
WL_DEBUG_PRINT_P("\r\nGlobal fast broadcast group 1 send exit code ");
|
209 |
208 |
usb_puti(status);
|
210 |
209 |
status = wl_send((uint8_t*)&data, 2, 2, GLOBAL, PAN, FAST);
|
211 |
|
usb_puts("\r\nGlobal fast pan send group 2 exit code ");
|
|
210 |
WL_DEBUG_PRINT_P("\r\nGlobal fast pan send group 2 exit code ");
|
212 |
211 |
usb_puti(status);
|
213 |
212 |
status = wl_send((uint8_t*)&data, 2, 1, GLOBAL, BROADCAST, FAST);
|
214 |
|
usb_puts("\r\nGlobal fast broadcast group 3 send exit code ");
|
|
213 |
WL_DEBUG_PRINT_P("\r\nGlobal fast broadcast group 3 send exit code ");
|
215 |
214 |
usb_puti(status);
|
216 |
215 |
status = wl_send((uint8_t*)&data, 2, 2, GLOBAL, PAN, FAST);
|
217 |
|
usb_puts("\r\nGlobal fast pan send group 4 exit code ");
|
|
216 |
WL_DEBUG_PRINT_P("\r\nGlobal fast pan send group 4 exit code ");
|
218 |
217 |
usb_puti(status);
|
219 |
|
usb_puts("\r\nFast send tests successful\r\n");
|
|
218 |
WL_DEBUG_PRINT_P("\r\nFast send tests successful\r\n");
|
220 |
219 |
|
221 |
220 |
/*Sends packets in fast mode until other robot responds*/
|
222 |
221 |
status = 0;
|
... | ... | |
228 |
227 |
wl_get_basic(address, 2);
|
229 |
228 |
if(address != 0){
|
230 |
229 |
orb2_set_color(GREEN);
|
231 |
|
usb_puts("\r\nFriend address: ");
|
|
230 |
WL_DEBUG_PRINT_P("\r\nFriend address: ");
|
232 |
231 |
usb_puti((uint16_t)address);
|
233 |
232 |
friendAddress = *address;
|
234 |
233 |
}
|
... | ... | |
244 |
243 |
|
245 |
244 |
|
246 |
245 |
/*Terminates wireless functions*/
|
247 |
|
usb_puts("\r\n\r\nTerminating wireless...\r\n");
|
|
246 |
WL_DEBUG_PRINT_P("\r\n\r\nTerminating wireless...\r\n");
|
248 |
247 |
status = wl_init();
|
249 |
248 |
switch(status){
|
250 |
249 |
case 0:
|
251 |
|
usb_puts("Wireless termination successful\r\n\r\n");
|
|
250 |
WL_DEBUG_PRINT_P("Wireless termination successful\r\n\r\n");
|
252 |
251 |
orb1_set_color(BLUE);
|
253 |
252 |
break;
|
254 |
253 |
case -3:
|
255 |
|
usb_puts("Termination failed: library not initialized\r\n\r\n");
|
|
254 |
WL_DEBUG_PRINT_P("Termination failed: library not initialized\r\n\r\n");
|
256 |
255 |
orb1_set_color(BLUE);
|
257 |
256 |
break;
|
258 |
257 |
case -5:
|
259 |
|
usb_puts("Termination failed\r\n\r\n");
|
|
258 |
WL_DEBUG_PRINT_P("Termination failed\r\n\r\n");
|
260 |
259 |
orb1_set_color(RED);
|
261 |
260 |
break;
|
262 |
261 |
case -6:
|
263 |
|
usb_puts("Termination failed: function unregistration failed\r\n\r\n");
|
|
262 |
WL_DEBUG_PRINT_P("Termination failed: function unregistration failed\r\n\r\n");
|
264 |
263 |
orb1_set_color(ORANGE);
|
265 |
264 |
break;
|
266 |
265 |
default:
|
267 |
|
usb_puts("Error: Unreconnized status code: ");
|
|
266 |
WL_DEBUG_PRINT_P("Error: Unreconnized status code: ");
|
268 |
267 |
usb_puti(status);
|
269 |
268 |
orb1_set_color(RED);
|
270 |
269 |
break;
|
271 |
270 |
}
|
272 |
271 |
|
273 |
|
usb_puts("\r\n\r\nWireless Library tests completed");
|
|
272 |
WL_DEBUG_PRINT_P("\r\n\r\nWireless Library tests completed");
|
274 |
273 |
while(1){}
|
275 |
274 |
}
|
276 |
275 |
|
... | ... | |
343 |
342 |
usb_puti(wl_send_robot(&count, 1, 4, friendAddress, RELIABLE));
|
344 |
343 |
delay_ms(count * 10);
|
345 |
344 |
}
|
346 |
|
usb_puts("ACK Errors: ");
|
|
345 |
WL_DEBUG_PRINT_P("ACK Errors: ");
|
347 |
346 |
usb_puti(wl_ack_error());
|
348 |
347 |
wl_ack_reset();
|
349 |
348 |
usb_puti(wl_ack_error());
|
... | ... | |
352 |
351 |
usb_puti(wl_send_robot(&count, 1, 0, friendAddress + 1, RELIABLE));
|
353 |
352 |
delay_ms(count * 10);
|
354 |
353 |
}
|
355 |
|
usb_puts("ACK Errors: ");
|
|
354 |
WL_DEBUG_PRINT_P("ACK Errors: ");
|
356 |
355 |
usb_puti(wl_ack_error());
|
357 |
356 |
}
|
358 |
357 |
|
... | ... | |
368 |
367 |
}
|
369 |
368 |
|
370 |
369 |
void group_1_function(uint8_t* data,uint8_t length,uint8_t source){
|
371 |
|
usb_puts("\r\nFunction 1 called");
|
|
370 |
WL_DEBUG_PRINT_P("\r\nFunction 1 called");
|
372 |
371 |
return 0;
|
373 |
372 |
}
|
374 |
373 |
void group_2_function(uint8_t* data,uint8_t length,uint8_t source){
|
375 |
|
usb_puts("\r\nFunction 2 called");
|
|
374 |
WL_DEBUG_PRINT_P("\r\nFunction 2 called");
|
376 |
375 |
return 0;
|
377 |
376 |
}
|
378 |
377 |
void group_3_function(uint8_t* data,uint8_t length,uint8_t source){
|
379 |
|
usb_puts("\r\nFunction 3 called");
|
|
378 |
WL_DEBUG_PRINT_P("\r\nFunction 3 called");
|
380 |
379 |
return 0;
|
381 |
380 |
}
|
382 |
381 |
void group_4_function(uint8_t* data,uint8_t length,uint8_t source){
|
383 |
|
usb_puts("\r\nFunction 4 called");
|
|
382 |
WL_DEBUG_PRINT_P("\r\nFunction 4 called");
|
384 |
383 |
return 0;
|
385 |
384 |
}
|
386 |
385 |
//The first robot to receive the address of another robot will trigger this function.
|