Library to use a wifly module: RN 131 C/G

Dependents:   RN-XV_simple_server

Committer:
samux
Date:
Fri Aug 12 11:20:42 2011 +0000
Revision:
0:2f38aaabc810
Child:
4:06ca04e2e279

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
samux 0:2f38aaabc810 1 #include "mbed.h"
samux 0:2f38aaabc810 2 #include "Wifly.h"
samux 0:2f38aaabc810 3 #include <string>
samux 0:2f38aaabc810 4
samux 0:2f38aaabc810 5
samux 0:2f38aaabc810 6
samux 0:2f38aaabc810 7
samux 0:2f38aaabc810 8
samux 0:2f38aaabc810 9
samux 0:2f38aaabc810 10 Wifly::Wifly( PinName tx, PinName rx, PinName _reset, char * ssid, char * phrase,
samux 0:2f38aaabc810 11 bool wpa, char * ip, char * netmask, bool dhcp, int baudrate, int bits,Serial::Parity parity,
samux 0:2f38aaabc810 12 int stop_bits): wifi(tx, rx), reset_pin(_reset)
samux 0:2f38aaabc810 13 {
samux 0:2f38aaabc810 14 wifi.baud(baudrate);
samux 0:2f38aaabc810 15 reset_pin = 1;
samux 0:2f38aaabc810 16 wifi.format(bits, parity, stop_bits);
samux 0:2f38aaabc810 17 this->wpa = wpa;
samux 0:2f38aaabc810 18 this->phrase = phrase;
samux 0:2f38aaabc810 19 this->ssid = ssid;
samux 0:2f38aaabc810 20 this->ip = ip;
samux 0:2f38aaabc810 21 this->netmask = netmask;
samux 0:2f38aaabc810 22 this->dhcp = dhcp;
samux 0:2f38aaabc810 23 adhoc = false;
samux 0:2f38aaabc810 24 }
samux 0:2f38aaabc810 25
samux 0:2f38aaabc810 26
samux 0:2f38aaabc810 27
samux 0:2f38aaabc810 28
samux 0:2f38aaabc810 29
samux 0:2f38aaabc810 30 Wifly::Wifly( PinName tx, PinName rx, PinName _reset, char * ssid, char * ip, char * netmask, int channel,
samux 0:2f38aaabc810 31 int baudrate, int bits,Serial::Parity parity,int stop_bits): wifi(tx, rx), reset_pin(_reset)
samux 0:2f38aaabc810 32 {
samux 0:2f38aaabc810 33 wifi.baud(baudrate);
samux 0:2f38aaabc810 34 reset_pin = 1;
samux 0:2f38aaabc810 35 wifi.format(bits, parity, stop_bits);
samux 0:2f38aaabc810 36 adhoc = true;
samux 0:2f38aaabc810 37 this->ssid = ssid;
samux 0:2f38aaabc810 38 this->ip = ip;
samux 0:2f38aaabc810 39 this->netmask = netmask;
samux 0:2f38aaabc810 40 this->channel = channel;
samux 0:2f38aaabc810 41 }
samux 0:2f38aaabc810 42
samux 0:2f38aaabc810 43
samux 0:2f38aaabc810 44
samux 0:2f38aaabc810 45
samux 0:2f38aaabc810 46
samux 0:2f38aaabc810 47
samux 0:2f38aaabc810 48 bool Wifly::Send(char * str, char * ACK) {
samux 0:2f38aaabc810 49
samux 0:2f38aaabc810 50 //We flush the buffer
samux 0:2f38aaabc810 51 while(wifi.readable())
samux 0:2f38aaabc810 52 //printf("%c",wifi.getc());
samux 0:2f38aaabc810 53 wifi.getc();
samux 0:2f38aaabc810 54
samux 0:2f38aaabc810 55 char read;
samux 0:2f38aaabc810 56
samux 0:2f38aaabc810 57 size_t found = string::npos;
samux 0:2f38aaabc810 58
samux 0:2f38aaabc810 59 if (!strcmp(ACK, "NO"))
samux 0:2f38aaabc810 60 wifi.printf("%s", str);
samux 0:2f38aaabc810 61 else
samux 0:2f38aaabc810 62 {
samux 0:2f38aaabc810 63 Timer tmr;
samux 0:2f38aaabc810 64 tmr.start();
samux 0:2f38aaabc810 65 wifi.printf("%s", str);
samux 0:2f38aaabc810 66 string checking;
samux 0:2f38aaabc810 67 while (1)
samux 0:2f38aaabc810 68 {
samux 0:2f38aaabc810 69 if(tmr.read() > 3)
samux 0:2f38aaabc810 70 {
samux 0:2f38aaabc810 71 //printf("checking: %s\r\n", checking);
samux 0:2f38aaabc810 72 return false;
samux 0:2f38aaabc810 73 }
samux 0:2f38aaabc810 74 else if(wifi.readable())
samux 0:2f38aaabc810 75 {
samux 0:2f38aaabc810 76 read = wifi.getc();
samux 0:2f38aaabc810 77 if ( read != '\r' && read != '\n')
samux 0:2f38aaabc810 78 {
samux 0:2f38aaabc810 79 checking += read;
samux 0:2f38aaabc810 80 found = checking.find(ACK);
samux 0:2f38aaabc810 81 if(found != string::npos)
samux 0:2f38aaabc810 82 {
samux 0:2f38aaabc810 83 //printf("checking: %s\r\n", checking);
samux 0:2f38aaabc810 84 break;
samux 0:2f38aaabc810 85 }
samux 0:2f38aaabc810 86 }
samux 0:2f38aaabc810 87 }
samux 0:2f38aaabc810 88 }
samux 0:2f38aaabc810 89 return (found != string::npos);
samux 0:2f38aaabc810 90 }
samux 0:2f38aaabc810 91 return true;
samux 0:2f38aaabc810 92 }
samux 0:2f38aaabc810 93
samux 0:2f38aaabc810 94 bool Wifly::Join()
samux 0:2f38aaabc810 95 {
samux 0:2f38aaabc810 96 char cmd[30];
samux 0:2f38aaabc810 97
samux 0:2f38aaabc810 98 exit();
samux 0:2f38aaabc810 99
samux 0:2f38aaabc810 100 if(!CmdMode())
samux 0:2f38aaabc810 101 {
samux 0:2f38aaabc810 102 printf("join: cannot enter in cmd mode\r\n");
samux 0:2f38aaabc810 103 exit();
samux 0:2f38aaabc810 104 return false;
samux 0:2f38aaabc810 105 }
samux 0:2f38aaabc810 106
samux 0:2f38aaabc810 107 //auth
samux 0:2f38aaabc810 108 if(!Send("set wlan auth 3\r\n", "AOK"))
samux 0:2f38aaabc810 109 {
samux 0:2f38aaabc810 110 printf("join: cannot set auth\r\n");
samux 0:2f38aaabc810 111 exit();
samux 0:2f38aaabc810 112 return false;
samux 0:2f38aaabc810 113 }
samux 0:2f38aaabc810 114
samux 0:2f38aaabc810 115 //dhcp
samux 0:2f38aaabc810 116 sprintf(cmd, "set ip dhcp %d\r\n", (dhcp) ? 1 : 0);
samux 0:2f38aaabc810 117 if(!Send(cmd, "AOK"))
samux 0:2f38aaabc810 118 {
samux 0:2f38aaabc810 119 printf("join: cannot set dhcp\r\n");
samux 0:2f38aaabc810 120 exit();
samux 0:2f38aaabc810 121 return false;
samux 0:2f38aaabc810 122 }
samux 0:2f38aaabc810 123
samux 0:2f38aaabc810 124 if(!dhcp)
samux 0:2f38aaabc810 125 {
samux 0:2f38aaabc810 126 printf("not dhcp\r\n");
samux 0:2f38aaabc810 127 sprintf(cmd, "set ip address %s\r\n", ip);
samux 0:2f38aaabc810 128 if(!Send(cmd, "AOK"))
samux 0:2f38aaabc810 129 {
samux 0:2f38aaabc810 130 printf("Wifly::Join: cannot set ip address\r\n");
samux 0:2f38aaabc810 131 exit();
samux 0:2f38aaabc810 132 return false;
samux 0:2f38aaabc810 133 }
samux 0:2f38aaabc810 134
samux 0:2f38aaabc810 135 sprintf(cmd, "set ip netmask %s\r\n", netmask);
samux 0:2f38aaabc810 136 if(!Send(cmd, "AOK"))
samux 0:2f38aaabc810 137 {
samux 0:2f38aaabc810 138 printf("Wifly::join: cannot set netmask\r\n");
samux 0:2f38aaabc810 139 exit();
samux 0:2f38aaabc810 140 return false;
samux 0:2f38aaabc810 141 }
samux 0:2f38aaabc810 142
samux 0:2f38aaabc810 143 }
samux 0:2f38aaabc810 144
samux 0:2f38aaabc810 145 //key step
samux 0:2f38aaabc810 146 if(wpa)
samux 0:2f38aaabc810 147 sprintf(cmd, "set wlan phrase %s\r\n", phrase);
samux 0:2f38aaabc810 148 else
samux 0:2f38aaabc810 149 sprintf(cmd, "set wlan key %s\r\n", phrase);
samux 0:2f38aaabc810 150
samux 0:2f38aaabc810 151 if(!Send(cmd, "AOK"))
samux 0:2f38aaabc810 152 {
samux 0:2f38aaabc810 153 printf("join: cannot set phrase\r\n");
samux 0:2f38aaabc810 154 exit();
samux 0:2f38aaabc810 155 return false;
samux 0:2f38aaabc810 156 }
samux 0:2f38aaabc810 157
samux 0:2f38aaabc810 158
samux 0:2f38aaabc810 159
samux 0:2f38aaabc810 160 //join the network
samux 0:2f38aaabc810 161 sprintf(cmd, "join %s\r\n", ssid);
samux 0:2f38aaabc810 162
samux 0:2f38aaabc810 163 if(!Send(cmd, "IP="))
samux 0:2f38aaabc810 164 {
samux 0:2f38aaabc810 165 printf("join: cannot join %s\r\n", ssid);
samux 0:2f38aaabc810 166 exit();
samux 0:2f38aaabc810 167 return false;
samux 0:2f38aaabc810 168 }
samux 0:2f38aaabc810 169 exit();
samux 0:2f38aaabc810 170 printf("\r\nssid: %s\r\nphrase: %s\r\nsecurity: %s\r\n\r\n", this->ssid, this->phrase, (wpa) ? "WPA" : "WEP");
samux 0:2f38aaabc810 171 return true;
samux 0:2f38aaabc810 172
samux 0:2f38aaabc810 173 }
samux 0:2f38aaabc810 174
samux 0:2f38aaabc810 175
samux 0:2f38aaabc810 176 bool Wifly::CreateAdhocNetwork()
samux 0:2f38aaabc810 177 {
samux 0:2f38aaabc810 178 if(adhoc)
samux 0:2f38aaabc810 179 {
samux 0:2f38aaabc810 180 char cmd[50];
samux 0:2f38aaabc810 181
samux 0:2f38aaabc810 182 exit();
samux 0:2f38aaabc810 183
samux 0:2f38aaabc810 184 if(!CmdMode())
samux 0:2f38aaabc810 185 {
samux 0:2f38aaabc810 186 printf("Wifly::CreateAdhocNetwork: cannot enter in cmd mode\r\n");
samux 0:2f38aaabc810 187 exit();
samux 0:2f38aaabc810 188 return false;
samux 0:2f38aaabc810 189 }
samux 0:2f38aaabc810 190
samux 0:2f38aaabc810 191 if(!Send("set wlan join 4\r\n", "AOK"))
samux 0:2f38aaabc810 192 {
samux 0:2f38aaabc810 193 printf("Wifly::CreateAdhocNetwork: cannot set join 4\r\n");
samux 0:2f38aaabc810 194 exit();
samux 0:2f38aaabc810 195 return false;
samux 0:2f38aaabc810 196 }
samux 0:2f38aaabc810 197
samux 0:2f38aaabc810 198 //ssid
samux 0:2f38aaabc810 199 sprintf(cmd, "set wlan ssid %s\r\n", ssid);
samux 0:2f38aaabc810 200 if(!Send(cmd, "AOK"))
samux 0:2f38aaabc810 201 {
samux 0:2f38aaabc810 202 printf("Wifly::CreateAdhocNetwork: cannot set ssid\r\n");
samux 0:2f38aaabc810 203 exit();
samux 0:2f38aaabc810 204 return false;
samux 0:2f38aaabc810 205 }
samux 0:2f38aaabc810 206
samux 0:2f38aaabc810 207 sprintf(cmd, "set wlan channel %d\r\n", channel);
samux 0:2f38aaabc810 208 if(!Send(cmd, "AOK"))
samux 0:2f38aaabc810 209 {
samux 0:2f38aaabc810 210 printf("Wifly::CreateAdhocNetwork: cannot set channel\r\n");
samux 0:2f38aaabc810 211 exit();
samux 0:2f38aaabc810 212 return false;
samux 0:2f38aaabc810 213 }
samux 0:2f38aaabc810 214
samux 0:2f38aaabc810 215 sprintf(cmd, "set ip address %s\r\n", ip);
samux 0:2f38aaabc810 216 if(!Send(cmd, "AOK"))
samux 0:2f38aaabc810 217 {
samux 0:2f38aaabc810 218 printf("Wifly::CreateAdhocNetwork: cannot set ip address\r\n");
samux 0:2f38aaabc810 219 exit();
samux 0:2f38aaabc810 220 return false;
samux 0:2f38aaabc810 221 }
samux 0:2f38aaabc810 222
samux 0:2f38aaabc810 223 sprintf(cmd, "set ip netmask %s\r\n", netmask);
samux 0:2f38aaabc810 224 if(!Send(cmd, "AOK"))
samux 0:2f38aaabc810 225 {
samux 0:2f38aaabc810 226 printf("Wifly::CreateAdhocNetwork: cannot set netmask\r\n");
samux 0:2f38aaabc810 227 exit();
samux 0:2f38aaabc810 228 return false;
samux 0:2f38aaabc810 229 }
samux 0:2f38aaabc810 230
samux 0:2f38aaabc810 231 if(!Send("set ip dhcp 0\r\n", "AOK"))
samux 0:2f38aaabc810 232 {
samux 0:2f38aaabc810 233 printf("Wifly::CreateAdhocNetwork: cannot set dhcp off\r\n");
samux 0:2f38aaabc810 234 exit();
samux 0:2f38aaabc810 235 return false;
samux 0:2f38aaabc810 236 }
samux 0:2f38aaabc810 237
samux 0:2f38aaabc810 238 if(!Send("save\r\n", "Stor"))
samux 0:2f38aaabc810 239 {
samux 0:2f38aaabc810 240 printf("Wifly::CreateAdhocNetwork: cannot save\r\n");
samux 0:2f38aaabc810 241 exit();
samux 0:2f38aaabc810 242 return false;
samux 0:2f38aaabc810 243 }
samux 0:2f38aaabc810 244
samux 0:2f38aaabc810 245 Send("reboot\r\n", "NO");
samux 0:2f38aaabc810 246 printf("\r\ncreating an adhoc\r\nnetwork: %s\r\nip: %s\r\nnetmask: %s\r\nchannel: %d\r\n\r\n", ssid, ip, netmask, channel);
samux 0:2f38aaabc810 247 return true;
samux 0:2f38aaabc810 248 }
samux 0:2f38aaabc810 249 else
samux 0:2f38aaabc810 250 {
samux 0:2f38aaabc810 251 printf("Wifly::join: You don't chose the right constructor for creating an adhoc mode!\r\n");
samux 0:2f38aaabc810 252 return false;
samux 0:2f38aaabc810 253 }
samux 0:2f38aaabc810 254 }
samux 0:2f38aaabc810 255
samux 0:2f38aaabc810 256 bool Wifly::CmdMode()
samux 0:2f38aaabc810 257 {
samux 0:2f38aaabc810 258 int i = 0;
samux 0:2f38aaabc810 259 while(!Send("$$$", "CMD"))
samux 0:2f38aaabc810 260 {
samux 0:2f38aaabc810 261 printf("Wifly::CmdMode: cannot enter in cmd mode\r\n");
samux 0:2f38aaabc810 262 i++;
samux 0:2f38aaabc810 263 if ( i == 4 ) return false;
samux 0:2f38aaabc810 264 }
samux 0:2f38aaabc810 265 return true;
samux 0:2f38aaabc810 266 }
samux 0:2f38aaabc810 267
samux 0:2f38aaabc810 268
samux 0:2f38aaabc810 269
samux 0:2f38aaabc810 270
samux 0:2f38aaabc810 271 void Wifly::reset()
samux 0:2f38aaabc810 272 {
samux 0:2f38aaabc810 273 reset_pin = 0;
samux 0:2f38aaabc810 274 wait(0.2);
samux 0:2f38aaabc810 275 reset_pin = 1;
samux 0:2f38aaabc810 276 wait(0.2);
samux 0:2f38aaabc810 277 }
samux 0:2f38aaabc810 278
samux 0:2f38aaabc810 279
samux 0:2f38aaabc810 280
samux 0:2f38aaabc810 281
samux 0:2f38aaabc810 282
samux 0:2f38aaabc810 283
samux 0:2f38aaabc810 284 void Wifly::putc(char c)
samux 0:2f38aaabc810 285 {
samux 0:2f38aaabc810 286 wifi.putc(c);
samux 0:2f38aaabc810 287 }
samux 0:2f38aaabc810 288
samux 0:2f38aaabc810 289
samux 0:2f38aaabc810 290
samux 0:2f38aaabc810 291
samux 0:2f38aaabc810 292 void Wifly::read(char * str)
samux 0:2f38aaabc810 293 {
samux 0:2f38aaabc810 294 wifi.scanf("%s", str);
samux 0:2f38aaabc810 295 }
samux 0:2f38aaabc810 296
samux 0:2f38aaabc810 297
samux 0:2f38aaabc810 298
samux 0:2f38aaabc810 299
samux 0:2f38aaabc810 300 bool Wifly::exit()
samux 0:2f38aaabc810 301 {
samux 0:2f38aaabc810 302 return Send("exit\r", "EXIT");
samux 0:2f38aaabc810 303 }
samux 0:2f38aaabc810 304
samux 0:2f38aaabc810 305
samux 0:2f38aaabc810 306
samux 0:2f38aaabc810 307 bool Wifly::readable()
samux 0:2f38aaabc810 308 {
samux 0:2f38aaabc810 309 return(wifi.readable());
samux 0:2f38aaabc810 310 }
samux 0:2f38aaabc810 311
samux 0:2f38aaabc810 312
samux 0:2f38aaabc810 313
samux 0:2f38aaabc810 314
samux 0:2f38aaabc810 315 char Wifly::getc()
samux 0:2f38aaabc810 316 {
samux 0:2f38aaabc810 317 return(wifi.getc());
samux 0:2f38aaabc810 318 }