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

Dependents:   RN-XV_simple_server

Committer:
samux
Date:
Mon Aug 15 16:05:21 2011 +0000
Revision:
9:984c1436dd42
Parent:
7:c6cf9ae117b1
Child:
10:d3e3e925f62f

        

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