Project

General

Profile

Statistics
| Revision:

root / branches / wireless / code / behaviors / Wireless_Speed_test / main.c @ 1560

History | View | Annotate | Download (3.51 KB)

1

    
2
#include "dio.h"
3
#include "time.h"
4
#include "serial.h"
5
#include "xbee.h"
6
#include <string.h>
7

    
8

    
9
/*
10
 * This function tests the wireless speed, returning the results to teraterm
11
 *
12
 * 
13
 */
14
 
15
#define LARGETESTDATA "abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789"
16
#define SMALLTESTDATA "test"
17
 
18
unsigned char buf[100];
19
int len=0;
20

    
21
void sender(unsigned char options);
22
void receiver(void);
23
 
24
int main(void) {
25
  int i=0;  
26
  
27
  //dragonfly_init(ALL_ON);
28
  
29
  rtc_init(1,0);
30
        
31
        usb_init();
32
        usb_puts("usb turned on, test starting:\r\n");
33
  
34
  if (xbee_lib_init() != 0) {
35
    usb_puts("xbee_lib_init() failed\r\n");
36
    return -1;
37
  } else {
38
    usb_puts("xbee_lib__init successful\r\n");
39
  }
40
 
41
        usb_puts("\r\n\r\n");
42
        delay_ms(1000);
43
          
44
  while (1) {
45
    if (button1_read()) {
46
      usb_puts("I am sender\r\n");
47
      sender(XBEE_OPTIONS_BROADCAST_ALL_PANS);
48
      sender(XBEE_OPTIONS_BROADCAST_ALL_PANS|XBEE_OPTIONS_DISABLE_RESPONSE);      
49
      sender(XBEE_OPTIONS_DISABLE_RESPONSE);
50
      break;
51
    }
52
    if (button2_read()) {
53
      usb_puts("I am receiver\r\n");
54
      receiver();
55
      receiver();
56
      receiver();
57
      break;
58
    }  
59
  }
60
  
61
  
62
  // end of tests
63
  xbee_terminate();
64
  usb_puts("testxbee done\r\n\r\n");
65
    
66
        return 0;
67
}
68

    
69
void sender(unsigned char options) {
70
  unsigned int addr = 0;
71
  int i=0;  
72
  
73
        // try to link up with other robot
74
  while(i++ < 10000) {
75
    xbee_send_packet("GET",strlen("GET"),XBEE_BROADCAST,XBEE_OPTIONS_BROADCAST_ALL_PANS,1);
76
    if((len = xbee_get_packet(buf)) > 0 && buf[0] == XBEE_RX) {
77
      usb_puts("got response from xbee - |");
78
      usb_puts(&(buf[5]));
79
      usb_puts("|\r\n");      
80
      addr = (buf[1]<<8) + buf[2];
81
      if (strcmp("LINK",&buf[5]) == 0)
82
        break; // we have link
83
    }
84
  }
85
  
86
  // start sending data - large, MAC layer ack
87
  i=1;
88
  while (i++ < 256) {
89
    xbee_send_packet(LARGETESTDATA,strlen(LARGETESTDATA),addr,options,i);
90
    usb_puts("sent message to xbee - |");
91
    usb_puti(i);
92
    usb_puts("|\r\n");
93
  }
94
  xbee_send_packet("END",strlen("END"),addr,XBEE_OPTIONS_BROADCAST_ALL_PANS,1);
95
  
96
  // wait for response
97
  while(i++ < 10000) {
98
    if((len = xbee_get_packet(buf)) > 0 && buf[0] == XBEE_RX) {
99
      usb_puts("got response from xbee - |");
100
      usb_puts(&(buf[5]));
101
      usb_puts("|\r\n");      
102
      if (strcmp("END",&buf[5]) == 0)
103
        break; // we have link      
104
      memset(buf,0,100);
105
    }
106
  }
107
}
108

    
109
void receiver() {
110
  unsigned int addr = 0;
111
  int i=0,end=0,frames=0;
112
  
113
  // try to link up with other robot
114
  i=0;
115
  while(i++ < 10000) {
116
    if((len = xbee_get_packet(buf)) > 0 && buf[0] == XBEE_RX) {
117
      usb_puts("got response from xbee - |");
118
      usb_puts(&(buf[5]));
119
      usb_puts("|\r\n");
120
      addr = (buf[1]<<8) + buf[2];
121
      if (strcmp("GET",&buf[5]) == 0)
122
        break; // we have link
123
    }
124
  }
125
  // do link
126
  xbee_send_packet("LINK",strlen("LINK"),addr,XBEE_OPTIONS_NONE,2);
127
  
128
  // get data
129
  i=frames=0; 
130
  memset(buf,0,100);
131
  rtc_reset();
132
  while(1) {
133
    if((len = xbee_get_packet(buf)) > 0 && buf[0] == XBEE_RX) {
134
      usb_puts("got response from xbee - |");
135
      usb_puti(frames);
136
      usb_puts("|\r\n");
137
      if (strcmp("END",&buf[5]) == 0)
138
        break; // done with send
139
      frames++;
140
      memset(buf,0,100);
141
    }
142
  }  
143
  end = rtc_get();
144
  xbee_send_packet("END",strlen("END"),addr,XBEE_OPTIONS_NONE,2);
145
  
146
  usb_puts("\r\nFrames received: ");
147
  usb_puti(frames);
148
  usb_puts("\r\nTime taken: ");
149
  usb_puti(end);
150
  usb_puts("\r\nEstimated bandwidth: ");
151
  end = frames*72*32/end;
152
  usb_puti(end);
153
  usb_puts(" bps\r\n");
154
}