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

Dependents:   RN-XV_simple_server

Committer:
samux
Date:
Fri Aug 12 15:12:57 2011 +0000
Revision:
5:9890eb81f730
Parent:
4:06ca04e2e279
Child:
7:c6cf9ae117b1

        

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 0:2f38aaabc810 125 if(!dhcp)
samux 0:2f38aaabc810 126 {
samux 0:2f38aaabc810 127 printf("not dhcp\r\n");
samux 0:2f38aaabc810 128 sprintf(cmd, "set ip address %s\r\n", ip);
samux 0:2f38aaabc810 129 if(!Send(cmd, "AOK"))
samux 0:2f38aaabc810 130 {
samux 0:2f38aaabc810 131 printf("Wifly::Join: cannot set ip address\r\n");
samux 0:2f38aaabc810 132 exit();
samux 0:2f38aaabc810 133 return false;
samux 0:2f38aaabc810 134 }
samux 0:2f38aaabc810 135
samux 0:2f38aaabc810 136 sprintf(cmd, "set ip netmask %s\r\n", netmask);
samux 0:2f38aaabc810 137 if(!Send(cmd, "AOK"))
samux 0:2f38aaabc810 138 {
samux 0:2f38aaabc810 139 printf("Wifly::join: cannot set netmask\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 }
samux 0:2f38aaabc810 145
samux 0:2f38aaabc810 146 //key step
samux 0:2f38aaabc810 147 if(wpa)
samux 0:2f38aaabc810 148 sprintf(cmd, "set wlan phrase %s\r\n", phrase);
samux 0:2f38aaabc810 149 else
samux 0:2f38aaabc810 150 sprintf(cmd, "set wlan key %s\r\n", phrase);
samux 0:2f38aaabc810 151
samux 0:2f38aaabc810 152 if(!Send(cmd, "AOK"))
samux 0:2f38aaabc810 153 {
samux 0:2f38aaabc810 154 printf("join: cannot set phrase\r\n");
samux 0:2f38aaabc810 155 exit();
samux 0:2f38aaabc810 156 return false;
samux 0:2f38aaabc810 157 }
samux 0:2f38aaabc810 158
samux 0:2f38aaabc810 159
samux 0:2f38aaabc810 160
samux 0:2f38aaabc810 161 //join the network
samux 0:2f38aaabc810 162 sprintf(cmd, "join %s\r\n", ssid);
samux 0:2f38aaabc810 163
samux 0:2f38aaabc810 164 if(!Send(cmd, "IP="))
samux 0:2f38aaabc810 165 {
samux 0:2f38aaabc810 166 printf("join: cannot join %s\r\n", ssid);
samux 0:2f38aaabc810 167 exit();
samux 0:2f38aaabc810 168 return false;
samux 0:2f38aaabc810 169 }
samux 0:2f38aaabc810 170 exit();
samux 0:2f38aaabc810 171 printf("\r\nssid: %s\r\nphrase: %s\r\nsecurity: %s\r\n\r\n", this->ssid, this->phrase, (wpa) ? "WPA" : "WEP");
samux 0:2f38aaabc810 172 return true;
samux 0:2f38aaabc810 173
samux 0:2f38aaabc810 174 }
samux 0:2f38aaabc810 175
samux 0:2f38aaabc810 176
samux 0:2f38aaabc810 177 bool Wifly::CreateAdhocNetwork()
samux 0:2f38aaabc810 178 {
samux 0:2f38aaabc810 179 if(adhoc)
samux 0:2f38aaabc810 180 {
samux 0:2f38aaabc810 181 char cmd[50];
samux 0:2f38aaabc810 182
samux 0:2f38aaabc810 183 exit();
samux 0:2f38aaabc810 184
samux 0:2f38aaabc810 185 if(!CmdMode())
samux 0:2f38aaabc810 186 {
samux 0:2f38aaabc810 187 printf("Wifly::CreateAdhocNetwork: cannot enter in cmd mode\r\n");
samux 0:2f38aaabc810 188 exit();
samux 0:2f38aaabc810 189 return false;
samux 0:2f38aaabc810 190 }
samux 0:2f38aaabc810 191
samux 0:2f38aaabc810 192 if(!Send("set wlan join 4\r\n", "AOK"))
samux 0:2f38aaabc810 193 {
samux 0:2f38aaabc810 194 printf("Wifly::CreateAdhocNetwork: cannot set join 4\r\n");
samux 0:2f38aaabc810 195 exit();
samux 0:2f38aaabc810 196 return false;
samux 0:2f38aaabc810 197 }
samux 0:2f38aaabc810 198
samux 0:2f38aaabc810 199 //ssid
samux 0:2f38aaabc810 200 sprintf(cmd, "set wlan ssid %s\r\n", ssid);
samux 0:2f38aaabc810 201 if(!Send(cmd, "AOK"))
samux 0:2f38aaabc810 202 {
samux 0:2f38aaabc810 203 printf("Wifly::CreateAdhocNetwork: cannot set ssid\r\n");
samux 0:2f38aaabc810 204 exit();
samux 0:2f38aaabc810 205 return false;
samux 0:2f38aaabc810 206 }
samux 0:2f38aaabc810 207
samux 0:2f38aaabc810 208 sprintf(cmd, "set wlan channel %d\r\n", channel);
samux 0:2f38aaabc810 209 if(!Send(cmd, "AOK"))
samux 0:2f38aaabc810 210 {
samux 0:2f38aaabc810 211 printf("Wifly::CreateAdhocNetwork: cannot set channel\r\n");
samux 0:2f38aaabc810 212 exit();
samux 0:2f38aaabc810 213 return false;
samux 0:2f38aaabc810 214 }
samux 0:2f38aaabc810 215
samux 0:2f38aaabc810 216 sprintf(cmd, "set ip address %s\r\n", ip);
samux 0:2f38aaabc810 217 if(!Send(cmd, "AOK"))
samux 0:2f38aaabc810 218 {
samux 0:2f38aaabc810 219 printf("Wifly::CreateAdhocNetwork: cannot set ip address\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 ip netmask %s\r\n", netmask);
samux 0:2f38aaabc810 225 if(!Send(cmd, "AOK"))
samux 0:2f38aaabc810 226 {
samux 0:2f38aaabc810 227 printf("Wifly::CreateAdhocNetwork: cannot set netmask\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 if(!Send("set ip dhcp 0\r\n", "AOK"))
samux 0:2f38aaabc810 233 {
samux 0:2f38aaabc810 234 printf("Wifly::CreateAdhocNetwork: cannot set dhcp off\r\n");
samux 0:2f38aaabc810 235 exit();
samux 0:2f38aaabc810 236 return false;
samux 0:2f38aaabc810 237 }
samux 0:2f38aaabc810 238
samux 0:2f38aaabc810 239 if(!Send("save\r\n", "Stor"))
samux 0:2f38aaabc810 240 {
samux 0:2f38aaabc810 241 printf("Wifly::CreateAdhocNetwork: cannot save\r\n");
samux 0:2f38aaabc810 242 exit();
samux 0:2f38aaabc810 243 return false;
samux 0:2f38aaabc810 244 }
samux 0:2f38aaabc810 245
samux 0:2f38aaabc810 246 Send("reboot\r\n", "NO");
samux 0:2f38aaabc810 247 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 248 return true;
samux 0:2f38aaabc810 249 }
samux 0:2f38aaabc810 250 else
samux 0:2f38aaabc810 251 {
samux 0:2f38aaabc810 252 printf("Wifly::join: You don't chose the right constructor for creating an adhoc mode!\r\n");
samux 0:2f38aaabc810 253 return false;
samux 0:2f38aaabc810 254 }
samux 0:2f38aaabc810 255 }
samux 0:2f38aaabc810 256
samux 0:2f38aaabc810 257 bool Wifly::CmdMode()
samux 0:2f38aaabc810 258 {
samux 0:2f38aaabc810 259 int i = 0;
samux 0:2f38aaabc810 260 while(!Send("$$$", "CMD"))
samux 0:2f38aaabc810 261 {
samux 0:2f38aaabc810 262 printf("Wifly::CmdMode: cannot enter in cmd mode\r\n");
samux 0:2f38aaabc810 263 i++;
samux 0:2f38aaabc810 264 if ( i == 4 ) return false;
samux 0:2f38aaabc810 265 }
samux 0:2f38aaabc810 266 return true;
samux 0:2f38aaabc810 267 }
samux 0:2f38aaabc810 268
samux 0:2f38aaabc810 269
samux 0:2f38aaabc810 270
samux 0:2f38aaabc810 271
samux 0:2f38aaabc810 272 void Wifly::reset()
samux 0:2f38aaabc810 273 {
samux 0:2f38aaabc810 274 reset_pin = 0;
samux 0:2f38aaabc810 275 wait(0.2);
samux 0:2f38aaabc810 276 reset_pin = 1;
samux 0:2f38aaabc810 277 wait(0.2);
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
samux 0:2f38aaabc810 285 void Wifly::putc(char c)
samux 0:2f38aaabc810 286 {
samux 0:2f38aaabc810 287 wifi.putc(c);
samux 0:2f38aaabc810 288 }
samux 0:2f38aaabc810 289
samux 0:2f38aaabc810 290
samux 0:2f38aaabc810 291
samux 0:2f38aaabc810 292
samux 0:2f38aaabc810 293 void Wifly::read(char * str)
samux 0:2f38aaabc810 294 {
samux 0:2f38aaabc810 295 wifi.scanf("%s", str);
samux 0:2f38aaabc810 296 }
samux 0:2f38aaabc810 297
samux 0:2f38aaabc810 298
samux 0:2f38aaabc810 299
samux 0:2f38aaabc810 300
samux 0:2f38aaabc810 301 bool Wifly::exit()
samux 0:2f38aaabc810 302 {
samux 0:2f38aaabc810 303 return Send("exit\r", "EXIT");
samux 0:2f38aaabc810 304 }
samux 0:2f38aaabc810 305
samux 0:2f38aaabc810 306
samux 0:2f38aaabc810 307
samux 0:2f38aaabc810 308 bool Wifly::readable()
samux 0:2f38aaabc810 309 {
samux 0:2f38aaabc810 310 return(wifi.readable());
samux 0:2f38aaabc810 311 }
samux 0:2f38aaabc810 312
samux 4:06ca04e2e279 313 bool Wifly::changeBaudrate(int baudrate)
samux 4:06ca04e2e279 314 {
samux 4:06ca04e2e279 315 char cmd[20];
samux 4:06ca04e2e279 316 exit();
samux 4:06ca04e2e279 317 if(!CmdMode())
samux 4:06ca04e2e279 318 {
samux 4:06ca04e2e279 319 printf("Wifly::changeBaudrate: cannot enter in cmd mode\r\n");
samux 4:06ca04e2e279 320 return false;
samux 4:06ca04e2e279 321 }
samux 4:06ca04e2e279 322
samux 4:06ca04e2e279 323 sprintf(cmd, "set u b %d\r\n", baudrate);
samux 4:06ca04e2e279 324 if(!Send(cmd, "AOK"))
samux 4:06ca04e2e279 325 {
samux 4:06ca04e2e279 326 printf("Wifly::changeBaudrate: cannot set new baudrate\r\n");
samux 4:06ca04e2e279 327 exit();
samux 4:06ca04e2e279 328 return false;
samux 4:06ca04e2e279 329 }
samux 4:06ca04e2e279 330
samux 4:06ca04e2e279 331 if(!Send("save\r\n", "Stor"))
samux 4:06ca04e2e279 332 {
samux 4:06ca04e2e279 333 printf("Wifly::changeBaudrate: cannot save\r\n");
samux 4:06ca04e2e279 334 exit();
samux 4:06ca04e2e279 335 return false;
samux 4:06ca04e2e279 336 }
samux 4:06ca04e2e279 337
samux 4:06ca04e2e279 338 return true;
samux 4:06ca04e2e279 339 }
samux 0:2f38aaabc810 340
samux 0:2f38aaabc810 341
samux 0:2f38aaabc810 342 char Wifly::getc()
samux 0:2f38aaabc810 343 {
samux 0:2f38aaabc810 344 return(wifi.getc());
samux 0:2f38aaabc810 345 }