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

Dependents:   RN-XV_simple_server

Committer:
samux
Date:
Mon Feb 20 16:08:42 2012 +0000
Revision:
18:88a26cd00ba3
Parent:
17:56f3c4da1ea8
Child:
19:cf1a7a5cc8d6

        

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 17:56f3c4da1ea8 5 //#define DEBUG
samux 0:2f38aaabc810 6
samux 10:d3e3e925f62f 7 Wifly::Wifly( PinName tx, PinName rx, PinName _reset, char * ssid, char * phrase,
samux 10:d3e3e925f62f 8 bool wpa, char * ip, char * netmask, bool dhcp, int baudrate):
samux 10:d3e3e925f62f 9 wifi(tx, rx), reset_pin(_reset) {
samux 0:2f38aaabc810 10 wifi.baud(baudrate);
samux 5:9890eb81f730 11 wifi.format(8, Serial::None, 1);
samux 0:2f38aaabc810 12 this->wpa = wpa;
samux 0:2f38aaabc810 13 this->dhcp = dhcp;
samux 11:6eb90004d92a 14 strcpy(this->phrase, phrase);
samux 11:6eb90004d92a 15 strcpy(this->ssid, ssid);
samux 11:6eb90004d92a 16 strcpy(this->ip, ip);
samux 11:6eb90004d92a 17 strcpy(this->netmask, netmask);
samux 0:2f38aaabc810 18 adhoc = false;
samux 17:56f3c4da1ea8 19
samux 17:56f3c4da1ea8 20 reset();
samux 0:2f38aaabc810 21 }
samux 0:2f38aaabc810 22
samux 0:2f38aaabc810 23
samux 0:2f38aaabc810 24
samux 0:2f38aaabc810 25
samux 0:2f38aaabc810 26
samux 17:56f3c4da1ea8 27 Wifly::Wifly( PinName tx, PinName rx, PinName _reset, char * ssid, char * ip, char * netmask, int channel, int baudrate):
samux 10:d3e3e925f62f 28 wifi(tx, rx), reset_pin(_reset) {
samux 0:2f38aaabc810 29 wifi.baud(baudrate);
samux 5:9890eb81f730 30 wifi.format(8, Serial::None, 1);
samux 0:2f38aaabc810 31 adhoc = true;
samux 11:6eb90004d92a 32 strcpy(this->ssid, ssid);
samux 11:6eb90004d92a 33 strcpy(this->ip, ip);
samux 11:6eb90004d92a 34 strcpy(this->netmask, netmask);
samux 0:2f38aaabc810 35 this->channel = channel;
samux 17:56f3c4da1ea8 36
samux 17:56f3c4da1ea8 37 reset();
samux 10:d3e3e925f62f 38 }
samux 10:d3e3e925f62f 39
samux 10:d3e3e925f62f 40
samux 10:d3e3e925f62f 41 void Wifly::handler_rx(void) {
samux 17:56f3c4da1ea8 42
samux 17:56f3c4da1ea8 43 //read the character
samux 10:d3e3e925f62f 44 char read = wifi.getc();
samux 17:56f3c4da1ea8 45
samux 17:56f3c4da1ea8 46 //queue it
samux 17:56f3c4da1ea8 47 buf_wifly.queue(read);
samux 17:56f3c4da1ea8 48
samux 17:56f3c4da1ea8 49 //call user callback
samux 17:56f3c4da1ea8 50 rx.call();
samux 10:d3e3e925f62f 51 }
samux 10:d3e3e925f62f 52
samux 10:d3e3e925f62f 53 void Wifly::attach_rx(bool null) {
samux 10:d3e3e925f62f 54 if (!null)
samux 10:d3e3e925f62f 55 wifi.attach(NULL);
samux 10:d3e3e925f62f 56 else
samux 10:d3e3e925f62f 57 wifi.attach(this, &Wifly::handler_rx);
samux 0:2f38aaabc810 58 }
samux 0:2f38aaabc810 59
samux 0:2f38aaabc810 60
samux 0:2f38aaabc810 61
samux 12:fd6874542b28 62 bool Wifly::send(char * str, char * ACK, char * res) {
samux 17:56f3c4da1ea8 63 char read;
samux 17:56f3c4da1ea8 64 size_t found = string::npos;
samux 18:88a26cd00ba3 65 string checking;
samux 17:56f3c4da1ea8 66 Timer tmr;
samux 0:2f38aaabc810 67
samux 18:88a26cd00ba3 68 #ifdef DEBUG
samux 18:88a26cd00ba3 69 printf("will send: %s\r\n",str);
samux 18:88a26cd00ba3 70 #endif
samux 18:88a26cd00ba3 71
samux 0:2f38aaabc810 72
samux 10:d3e3e925f62f 73 attach_rx(false);
samux 17:56f3c4da1ea8 74 if (!strcmp(ACK, "NO")) {
samux 0:2f38aaabc810 75 wifi.printf("%s", str);
samux 17:56f3c4da1ea8 76 } else {
samux 10:d3e3e925f62f 77 //We flush the buffer
samux 10:d3e3e925f62f 78 while (wifi.readable())
samux 10:d3e3e925f62f 79 wifi.getc();
samux 10:d3e3e925f62f 80
samux 0:2f38aaabc810 81 tmr.start();
samux 0:2f38aaabc810 82 wifi.printf("%s", str);
samux 10:d3e3e925f62f 83
samux 10:d3e3e925f62f 84 while (1) {
samux 18:88a26cd00ba3 85 if (tmr.read() > 3) {
samux 10:d3e3e925f62f 86 //We flush the buffer
samux 10:d3e3e925f62f 87 while (wifi.readable())
samux 10:d3e3e925f62f 88 wifi.getc();
samux 17:56f3c4da1ea8 89 #ifdef DEBUG
samux 17:56f3c4da1ea8 90 printf("check: %s\r\n", checking.c_str());
samux 17:56f3c4da1ea8 91 #endif
samux 10:d3e3e925f62f 92 attach_rx(true);
samux 0:2f38aaabc810 93 return false;
samux 10:d3e3e925f62f 94 } else if (wifi.readable()) {
samux 0:2f38aaabc810 95 read = wifi.getc();
samux 10:d3e3e925f62f 96 if ( read != '\r' && read != '\n') {
samux 0:2f38aaabc810 97 checking += read;
samux 0:2f38aaabc810 98 found = checking.find(ACK);
samux 10:d3e3e925f62f 99 if (found != string::npos) {
samux 17:56f3c4da1ea8 100 wait(0.01);
samux 10:d3e3e925f62f 101
samux 10:d3e3e925f62f 102 //We flush the buffer
samux 10:d3e3e925f62f 103 while (wifi.readable())
samux 10:d3e3e925f62f 104 wifi.getc();
samux 10:d3e3e925f62f 105
samux 0:2f38aaabc810 106 break;
samux 0:2f38aaabc810 107 }
samux 0:2f38aaabc810 108 }
samux 0:2f38aaabc810 109 }
samux 0:2f38aaabc810 110 }
samux 17:56f3c4da1ea8 111 #ifdef DEBUG
samux 17:56f3c4da1ea8 112 printf("check: %s\r\n", checking.c_str());
samux 17:56f3c4da1ea8 113 #endif
samux 10:d3e3e925f62f 114 attach_rx(true);
samux 17:56f3c4da1ea8 115 return true;
samux 0:2f38aaabc810 116 }
samux 17:56f3c4da1ea8 117
samux 17:56f3c4da1ea8 118 //the user wants the result from the command (ACK == "NO", res != NULL)
samux 10:d3e3e925f62f 119 if ( res != NULL) {
samux 10:d3e3e925f62f 120 int i = 0;
samux 17:56f3c4da1ea8 121 Timer timeout;
samux 17:56f3c4da1ea8 122 timeout.start();
samux 17:56f3c4da1ea8 123 while (1) {
samux 17:56f3c4da1ea8 124 if (timeout.read() > 3) {
samux 17:56f3c4da1ea8 125 read = NULL;
samux 17:56f3c4da1ea8 126 return false;
samux 17:56f3c4da1ea8 127 } else {
samux 17:56f3c4da1ea8 128 if (tmr.read_ms() > 500) {
samux 17:56f3c4da1ea8 129 res[i] = 0;
samux 18:88a26cd00ba3 130 #ifdef DEBUG
samux 18:88a26cd00ba3 131 printf("user str: %s\r\n", res);
samux 18:88a26cd00ba3 132 #endif
samux 17:56f3c4da1ea8 133 attach_rx(true);
samux 18:88a26cd00ba3 134 return true;
samux 17:56f3c4da1ea8 135 }
samux 17:56f3c4da1ea8 136 if (wifi.readable()) {
samux 17:56f3c4da1ea8 137 tmr.start();
samux 17:56f3c4da1ea8 138 read = wifi.getc();
samux 17:56f3c4da1ea8 139 if ( read != '\r' && read != '\n') {
samux 17:56f3c4da1ea8 140 res[i++] = read;
samux 17:56f3c4da1ea8 141 }
samux 17:56f3c4da1ea8 142 }
samux 10:d3e3e925f62f 143 }
samux 10:d3e3e925f62f 144 }
samux 10:d3e3e925f62f 145 }
samux 10:d3e3e925f62f 146 attach_rx(true);
samux 0:2f38aaabc810 147 return true;
samux 0:2f38aaabc810 148 }
samux 0:2f38aaabc810 149
samux 12:fd6874542b28 150 bool Wifly::join() {
samux 18:88a26cd00ba3 151 char cmd[150];
samux 10:d3e3e925f62f 152
samux 17:56f3c4da1ea8 153 if (!adhoc) {
samux 17:56f3c4da1ea8 154 //enter in command mode
samux 17:56f3c4da1ea8 155 if (!cmdMode()) {
samux 11:6eb90004d92a 156 #ifdef DEBUG
samux 17:56f3c4da1ea8 157 printf("join: cannot enter in cmd mode\r\n");
samux 11:6eb90004d92a 158 #endif
samux 17:56f3c4da1ea8 159 send("a\r\n");
samux 17:56f3c4da1ea8 160 wait(0.2);
samux 17:56f3c4da1ea8 161 exit();
samux 17:56f3c4da1ea8 162 if (!cmdMode())
samux 17:56f3c4da1ea8 163 return false;
samux 17:56f3c4da1ea8 164 }
samux 10:d3e3e925f62f 165
samux 18:88a26cd00ba3 166 if (!send("get w\r", "NO", cmd)) {
samux 18:88a26cd00ba3 167 #ifdef DEBUG
samux 18:88a26cd00ba3 168 printf("join: cannot get wlan settings\r\n");
samux 18:88a26cd00ba3 169 #endif
samux 18:88a26cd00ba3 170 exit();
samux 18:88a26cd00ba3 171 return false;
samux 18:88a26cd00ba3 172 }
samux 18:88a26cd00ba3 173
samux 18:88a26cd00ba3 174 if ((string(cmd).find(ssid) != string::npos) && (string(cmd).find(phrase) != string::npos) ) {
samux 18:88a26cd00ba3 175 #ifdef DEBUG
samux 18:88a26cd00ba3 176 printf("ssid found && phrase found\r\n");
samux 18:88a26cd00ba3 177 #endif
samux 18:88a26cd00ba3 178 while (1) {
samux 18:88a26cd00ba3 179 send("show c\r", "NO", cmd);
samux 18:88a26cd00ba3 180 #ifdef DEBUG
samux 18:88a26cd00ba3 181 printf("join: state of conn: %s\r\n", cmd);
samux 18:88a26cd00ba3 182 #endif
samux 18:88a26cd00ba3 183 if ((cmd[2] - '0') & 0x01) {
samux 18:88a26cd00ba3 184 exit();
samux 18:88a26cd00ba3 185 return true;
samux 18:88a26cd00ba3 186 }
samux 18:88a26cd00ba3 187 wait(1);
samux 18:88a26cd00ba3 188 }
samux 18:88a26cd00ba3 189 }
samux 18:88a26cd00ba3 190
samux 18:88a26cd00ba3 191 printf("getw: %s\r\n", cmd);
samux 18:88a26cd00ba3 192
samux 18:88a26cd00ba3 193 // ssid
samux 18:88a26cd00ba3 194 sprintf(cmd, "set w s %s\r", ssid);
samux 18:88a26cd00ba3 195 if (!send(cmd, "AOK")) {
samux 18:88a26cd00ba3 196 #ifdef DEBUG
samux 18:88a26cd00ba3 197 printf("join: cannot set ssid\r\n");
samux 18:88a26cd00ba3 198 #endif
samux 18:88a26cd00ba3 199 exit();
samux 18:88a26cd00ba3 200 return false;
samux 18:88a26cd00ba3 201 }
samux 18:88a26cd00ba3 202
samux 17:56f3c4da1ea8 203 //auth
samux 18:88a26cd00ba3 204 sprintf(cmd, "set w a %d\r", (wpa) ? 3 : 1);
samux 12:fd6874542b28 205 if (!send(cmd, "AOK")) {
samux 11:6eb90004d92a 206 #ifdef DEBUG
samux 17:56f3c4da1ea8 207 printf("join: cannot set auth\r\n");
samux 17:56f3c4da1ea8 208 #endif
samux 17:56f3c4da1ea8 209 exit();
samux 17:56f3c4da1ea8 210 return false;
samux 17:56f3c4da1ea8 211 }
samux 17:56f3c4da1ea8 212
samux 17:56f3c4da1ea8 213 //dhcp
samux 18:88a26cd00ba3 214 sprintf(cmd, "set i d %d\r", (dhcp) ? 1 : 0);
samux 17:56f3c4da1ea8 215 if (!send(cmd, "AOK")) {
samux 17:56f3c4da1ea8 216 #ifdef DEBUG
samux 17:56f3c4da1ea8 217 printf("join: cannot set dhcp\r\n");
samux 17:56f3c4da1ea8 218 #endif
samux 17:56f3c4da1ea8 219 exit();
samux 17:56f3c4da1ea8 220 return false;
samux 17:56f3c4da1ea8 221 }
samux 17:56f3c4da1ea8 222
samux 17:56f3c4da1ea8 223 //no echo
samux 18:88a26cd00ba3 224 if (!send("set u m 1\r", "AOK")) {
samux 17:56f3c4da1ea8 225 #ifdef DEBUG
samux 17:56f3c4da1ea8 226 printf("join: cannot set no echo\r\n");
samux 11:6eb90004d92a 227 #endif
samux 0:2f38aaabc810 228 exit();
samux 0:2f38aaabc810 229 return false;
samux 0:2f38aaabc810 230 }
samux 10:d3e3e925f62f 231
samux 17:56f3c4da1ea8 232 // if no dhcp, set ip and netmask
samux 17:56f3c4da1ea8 233 if (!dhcp) {
samux 17:56f3c4da1ea8 234 #ifdef DEBUG
samux 18:88a26cd00ba3 235 printf("not dhcp\r");
samux 17:56f3c4da1ea8 236 #endif
samux 17:56f3c4da1ea8 237 sprintf(cmd, "set i a %s\r\n", ip);
samux 17:56f3c4da1ea8 238 if (!send(cmd, "AOK")) {
samux 17:56f3c4da1ea8 239 #ifdef DEBUG
samux 17:56f3c4da1ea8 240 printf("Wifly::join: cannot set ip address\r\n");
samux 17:56f3c4da1ea8 241 #endif
samux 17:56f3c4da1ea8 242 exit();
samux 17:56f3c4da1ea8 243 return false;
samux 17:56f3c4da1ea8 244 }
samux 17:56f3c4da1ea8 245
samux 18:88a26cd00ba3 246 sprintf(cmd, "set i n %s\r", netmask);
samux 17:56f3c4da1ea8 247 if (!send(cmd, "AOK")) {
samux 17:56f3c4da1ea8 248 #ifdef DEBUG
samux 17:56f3c4da1ea8 249 printf("Wifly::join: cannot set netmask\r\n");
samux 17:56f3c4da1ea8 250 #endif
samux 17:56f3c4da1ea8 251 exit();
samux 17:56f3c4da1ea8 252 return false;
samux 17:56f3c4da1ea8 253 }
samux 17:56f3c4da1ea8 254
samux 17:56f3c4da1ea8 255 }
samux 17:56f3c4da1ea8 256
samux 17:56f3c4da1ea8 257 //key step
samux 17:56f3c4da1ea8 258 if (wpa)
samux 18:88a26cd00ba3 259 sprintf(cmd, "set w p %s\r", phrase);
samux 17:56f3c4da1ea8 260 else
samux 18:88a26cd00ba3 261 sprintf(cmd, "set w k %s\r", phrase);
samux 17:56f3c4da1ea8 262
samux 12:fd6874542b28 263 if (!send(cmd, "AOK")) {
samux 11:6eb90004d92a 264 #ifdef DEBUG
samux 17:56f3c4da1ea8 265 printf("join: cannot set phrase\r\n");
samux 11:6eb90004d92a 266 #endif
samux 0:2f38aaabc810 267 exit();
samux 0:2f38aaabc810 268 return false;
samux 0:2f38aaabc810 269 }
samux 10:d3e3e925f62f 270
samux 18:88a26cd00ba3 271 // auto join
samux 18:88a26cd00ba3 272 if (!send("set w j 1\r", "AOK")) {
samux 17:56f3c4da1ea8 273 #ifdef DEBUG
samux 17:56f3c4da1ea8 274 printf("Wifly::join: cannot set join 1\r\n");
samux 17:56f3c4da1ea8 275 #endif
samux 17:56f3c4da1ea8 276 exit();
samux 17:56f3c4da1ea8 277 return false;
samux 17:56f3c4da1ea8 278 }
samux 17:56f3c4da1ea8 279
samux 18:88a26cd00ba3 280 // save
samux 18:88a26cd00ba3 281 if (!send("save\r", "Stor")) {
samux 17:56f3c4da1ea8 282 #ifdef DEBUG
samux 17:56f3c4da1ea8 283 printf("Wifly::join: cannot save\r\n");
samux 17:56f3c4da1ea8 284 #endif
samux 17:56f3c4da1ea8 285 exit();
samux 17:56f3c4da1ea8 286 return false;
samux 17:56f3c4da1ea8 287 }
samux 17:56f3c4da1ea8 288
samux 17:56f3c4da1ea8 289 //join the network
samux 18:88a26cd00ba3 290 sprintf(cmd, "join %s\r", ssid);
samux 10:d3e3e925f62f 291
samux 18:88a26cd00ba3 292 if (!send(cmd, "Associated!")) {
samux 17:56f3c4da1ea8 293 #ifdef DEBUG
samux 17:56f3c4da1ea8 294 printf("join: cannot join %s\r\n", ssid);
samux 17:56f3c4da1ea8 295 #endif
samux 17:56f3c4da1ea8 296 exit();
samux 17:56f3c4da1ea8 297 return false;
samux 17:56f3c4da1ea8 298 }
samux 17:56f3c4da1ea8 299 exit();
samux 10:d3e3e925f62f 300
samux 17:56f3c4da1ea8 301 wait(0.1);
samux 17:56f3c4da1ea8 302 flush();
samux 17:56f3c4da1ea8 303
samux 11:6eb90004d92a 304 #ifdef DEBUG
samux 17:56f3c4da1ea8 305 printf("\r\nssid: %s\r\nphrase: %s\r\nsecurity: %s\r\n\r\n", this->ssid, this->phrase, (wpa) ? "WPA" : "WEP");
samux 11:6eb90004d92a 306 #endif
samux 17:56f3c4da1ea8 307 return true;
samux 17:56f3c4da1ea8 308 } else {
samux 17:56f3c4da1ea8 309 #ifdef DEBUG
samux 17:56f3c4da1ea8 310 printf("Wifly::join: You didn't choose the right constructor to join a network!\r\n");
samux 17:56f3c4da1ea8 311 #endif
samux 0:2f38aaabc810 312 return false;
samux 0:2f38aaabc810 313 }
samux 0:2f38aaabc810 314 }
samux 0:2f38aaabc810 315
samux 0:2f38aaabc810 316
samux 10:d3e3e925f62f 317
samux 12:fd6874542b28 318 bool Wifly::createAdhocNetwork() {
samux 10:d3e3e925f62f 319 if (adhoc) {
samux 0:2f38aaabc810 320 char cmd[50];
samux 10:d3e3e925f62f 321
samux 12:fd6874542b28 322 if (!cmdMode()) {
samux 11:6eb90004d92a 323 #ifdef DEBUG
samux 0:2f38aaabc810 324 printf("Wifly::CreateAdhocNetwork: cannot enter in cmd mode\r\n");
samux 11:6eb90004d92a 325 #endif
samux 0:2f38aaabc810 326 exit();
samux 10:d3e3e925f62f 327 return false;
samux 0:2f38aaabc810 328 }
samux 10:d3e3e925f62f 329
samux 18:88a26cd00ba3 330 if (!send("set w j 4\r", "AOK")) {
samux 11:6eb90004d92a 331 #ifdef DEBUG
samux 0:2f38aaabc810 332 printf("Wifly::CreateAdhocNetwork: cannot set join 4\r\n");
samux 11:6eb90004d92a 333 #endif
samux 0:2f38aaabc810 334 exit();
samux 0:2f38aaabc810 335 return false;
samux 0:2f38aaabc810 336 }
samux 10:d3e3e925f62f 337
samux 7:c6cf9ae117b1 338 //no echo
samux 18:88a26cd00ba3 339 if (!send("set u m 1\r", "AOK")) {
samux 11:6eb90004d92a 340 #ifdef DEBUG
samux 17:56f3c4da1ea8 341 printf("Wifly::CreateAdhocNetwork: cannot set no echo\r\n");
samux 11:6eb90004d92a 342 #endif
samux 7:c6cf9ae117b1 343 exit();
samux 7:c6cf9ae117b1 344 return false;
samux 7:c6cf9ae117b1 345 }
samux 10:d3e3e925f62f 346
samux 0:2f38aaabc810 347 //ssid
samux 18:88a26cd00ba3 348 sprintf(cmd, "set w s %s\r", ssid);
samux 12:fd6874542b28 349 if (!send(cmd, "AOK")) {
samux 11:6eb90004d92a 350 #ifdef DEBUG
samux 0:2f38aaabc810 351 printf("Wifly::CreateAdhocNetwork: cannot set ssid\r\n");
samux 11:6eb90004d92a 352 #endif
samux 0:2f38aaabc810 353 exit();
samux 0:2f38aaabc810 354 return false;
samux 0:2f38aaabc810 355 }
samux 10:d3e3e925f62f 356
samux 18:88a26cd00ba3 357 sprintf(cmd, "set w c %d\r", channel);
samux 12:fd6874542b28 358 if (!send(cmd, "AOK")) {
samux 11:6eb90004d92a 359 #ifdef DEBUG
samux 0:2f38aaabc810 360 printf("Wifly::CreateAdhocNetwork: cannot set channel\r\n");
samux 11:6eb90004d92a 361 #endif
samux 0:2f38aaabc810 362 exit();
samux 0:2f38aaabc810 363 return false;
samux 0:2f38aaabc810 364 }
samux 10:d3e3e925f62f 365
samux 18:88a26cd00ba3 366 sprintf(cmd, "set i a %s\r", ip);
samux 12:fd6874542b28 367 if (!send(cmd, "AOK")) {
samux 11:6eb90004d92a 368 #ifdef DEBUG
samux 0:2f38aaabc810 369 printf("Wifly::CreateAdhocNetwork: cannot set ip address\r\n");
samux 11:6eb90004d92a 370 #endif
samux 0:2f38aaabc810 371 exit();
samux 0:2f38aaabc810 372 return false;
samux 0:2f38aaabc810 373 }
samux 10:d3e3e925f62f 374
samux 18:88a26cd00ba3 375 sprintf(cmd, "set i n %s\r", netmask);
samux 12:fd6874542b28 376 if (!send(cmd, "AOK")) {
samux 11:6eb90004d92a 377 #ifdef DEBUG
samux 0:2f38aaabc810 378 printf("Wifly::CreateAdhocNetwork: cannot set netmask\r\n");
samux 11:6eb90004d92a 379 #endif
samux 0:2f38aaabc810 380 exit();
samux 0:2f38aaabc810 381 return false;
samux 0:2f38aaabc810 382 }
samux 10:d3e3e925f62f 383
samux 18:88a26cd00ba3 384 if (!send("set i d 0\r", "AOK")) {
samux 11:6eb90004d92a 385 #ifdef DEBUG
samux 0:2f38aaabc810 386 printf("Wifly::CreateAdhocNetwork: cannot set dhcp off\r\n");
samux 11:6eb90004d92a 387 #endif
samux 0:2f38aaabc810 388 exit();
samux 0:2f38aaabc810 389 return false;
samux 0:2f38aaabc810 390 }
samux 10:d3e3e925f62f 391
samux 18:88a26cd00ba3 392 if (!send("save\r", "Stor")) {
samux 11:6eb90004d92a 393 #ifdef DEBUG
samux 0:2f38aaabc810 394 printf("Wifly::CreateAdhocNetwork: cannot save\r\n");
samux 11:6eb90004d92a 395 #endif
samux 0:2f38aaabc810 396 exit();
samux 0:2f38aaabc810 397 return false;
samux 0:2f38aaabc810 398 }
samux 10:d3e3e925f62f 399
samux 17:56f3c4da1ea8 400 flush();
samux 17:56f3c4da1ea8 401
samux 18:88a26cd00ba3 402 send("reboot\r", "NO");
samux 11:6eb90004d92a 403 #ifdef DEBUG
samux 0:2f38aaabc810 404 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 11:6eb90004d92a 405 #endif
samux 17:56f3c4da1ea8 406
samux 18:88a26cd00ba3 407 wait(0.1);
samux 17:56f3c4da1ea8 408 flush();
samux 0:2f38aaabc810 409 return true;
samux 10:d3e3e925f62f 410 } else {
samux 11:6eb90004d92a 411 #ifdef DEBUG
samux 17:56f3c4da1ea8 412 printf("Wifly::CreateAdhocNetwork: You didn't choose the right constructor for creating an adhoc mode!\r\n");
samux 11:6eb90004d92a 413 #endif
samux 0:2f38aaabc810 414 return false;
samux 0:2f38aaabc810 415 }
samux 0:2f38aaabc810 416 }
samux 0:2f38aaabc810 417
samux 17:56f3c4da1ea8 418 void Wifly::flush() {
samux 17:56f3c4da1ea8 419 while (readable())
samux 17:56f3c4da1ea8 420 getc();
samux 17:56f3c4da1ea8 421 }
samux 17:56f3c4da1ea8 422
samux 12:fd6874542b28 423 bool Wifly::cmdMode() {
samux 12:fd6874542b28 424 if (!send("$$$", "CMD")) {
samux 11:6eb90004d92a 425 #ifdef DEBUG
samux 12:fd6874542b28 426 printf("Wifly::cmdMode: cannot enter in cmd mode\r\n");
samux 11:6eb90004d92a 427 #endif
samux 9:984c1436dd42 428 return false;
samux 0:2f38aaabc810 429 }
samux 0:2f38aaabc810 430 return true;
samux 0:2f38aaabc810 431 }
samux 0:2f38aaabc810 432
samux 0:2f38aaabc810 433
samux 10:d3e3e925f62f 434 void Wifly::reset() {
samux 0:2f38aaabc810 435 reset_pin = 0;
samux 0:2f38aaabc810 436 wait(0.2);
samux 0:2f38aaabc810 437 reset_pin = 1;
samux 0:2f38aaabc810 438 wait(0.2);
samux 0:2f38aaabc810 439 }
samux 0:2f38aaabc810 440
samux 0:2f38aaabc810 441
samux 0:2f38aaabc810 442
samux 0:2f38aaabc810 443
samux 10:d3e3e925f62f 444 void Wifly::putc(char c) {
samux 18:88a26cd00ba3 445 while (!wifi.writeable());
samux 0:2f38aaabc810 446 wifi.putc(c);
samux 0:2f38aaabc810 447 }
samux 0:2f38aaabc810 448
samux 0:2f38aaabc810 449
samux 0:2f38aaabc810 450
samux 0:2f38aaabc810 451
samux 11:6eb90004d92a 452 bool Wifly::read(char * str) {
samux 17:56f3c4da1ea8 453 int length = buf_wifly.available();
samux 17:56f3c4da1ea8 454 if (length == 0)
samux 17:56f3c4da1ea8 455 return false;
samux 17:56f3c4da1ea8 456 for (int i = 0; i < length; i++)
samux 17:56f3c4da1ea8 457 buf_wifly.dequeue((uint8_t *)&str[i]);
samux 17:56f3c4da1ea8 458 str[length] = 0;
samux 17:56f3c4da1ea8 459 return true;
samux 0:2f38aaabc810 460 }
samux 0:2f38aaabc810 461
samux 0:2f38aaabc810 462
samux 0:2f38aaabc810 463
samux 0:2f38aaabc810 464
samux 10:d3e3e925f62f 465 bool Wifly::exit() {
samux 12:fd6874542b28 466 return send("exit\r", "EXIT");
samux 0:2f38aaabc810 467 }
samux 0:2f38aaabc810 468
samux 0:2f38aaabc810 469
samux 0:2f38aaabc810 470
samux 17:56f3c4da1ea8 471 int Wifly::readable() {
samux 17:56f3c4da1ea8 472 return buf_wifly.available();
samux 0:2f38aaabc810 473 }
samux 0:2f38aaabc810 474
samux 10:d3e3e925f62f 475 bool Wifly::changeBaudrate(int baudrate) {
samux 4:06ca04e2e279 476 char cmd[20];
samux 4:06ca04e2e279 477 exit();
samux 12:fd6874542b28 478 if (!cmdMode()) {
samux 11:6eb90004d92a 479 #ifdef DEBUG
samux 4:06ca04e2e279 480 printf("Wifly::changeBaudrate: cannot enter in cmd mode\r\n");
samux 11:6eb90004d92a 481 #endif
samux 4:06ca04e2e279 482 return false;
samux 4:06ca04e2e279 483 }
samux 10:d3e3e925f62f 484
samux 18:88a26cd00ba3 485 sprintf(cmd, "set u b %d\r", baudrate);
samux 12:fd6874542b28 486 if (!send(cmd, "AOK")) {
samux 11:6eb90004d92a 487 #ifdef DEBUG
samux 4:06ca04e2e279 488 printf("Wifly::changeBaudrate: cannot set new baudrate\r\n");
samux 11:6eb90004d92a 489 #endif
samux 4:06ca04e2e279 490 exit();
samux 4:06ca04e2e279 491 return false;
samux 4:06ca04e2e279 492 }
samux 10:d3e3e925f62f 493
samux 18:88a26cd00ba3 494 if (!send("save\r", "Stor")) {
samux 11:6eb90004d92a 495 #ifdef DEBUG
samux 4:06ca04e2e279 496 printf("Wifly::changeBaudrate: cannot save\r\n");
samux 11:6eb90004d92a 497 #endif
samux 4:06ca04e2e279 498 exit();
samux 4:06ca04e2e279 499 return false;
samux 4:06ca04e2e279 500 }
samux 10:d3e3e925f62f 501
samux 4:06ca04e2e279 502 return true;
samux 4:06ca04e2e279 503 }
samux 0:2f38aaabc810 504
samux 0:2f38aaabc810 505
samux 10:d3e3e925f62f 506 char Wifly::getc() {
samux 17:56f3c4da1ea8 507 char c;
samux 17:56f3c4da1ea8 508 while (!buf_wifly.available());
samux 17:56f3c4da1ea8 509 buf_wifly.dequeue((uint8_t *)&c);
samux 17:56f3c4da1ea8 510 return c;
samux 0:2f38aaabc810 511 }