Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: IoT_Ex BatteryModelTester BatteryModelTester
Fork of WiflyInterface by
Revision 10:131675c17372, committed 2014-06-03
- Comitter:
- screamer
- Date:
- Tue Jun 03 18:41:15 2014 +0000
- Parent:
- 7:3152fcc74390
- Parent:
- 6:5176e0864078
- Child:
- 11:fc3d86645d23
- Commit message:
- Merge
Changed in this revision
| Wifly/Wifly.cpp | Show annotated file Show diff for this revision Revisions of this file |
| Wifly/Wifly.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/Socket/TCPSocketServer.cpp Fri Nov 08 21:27:08 2013 +0000
+++ b/Socket/TCPSocketServer.cpp Tue Jun 03 18:41:15 2014 +0000
@@ -32,8 +32,28 @@
sprintf(cmd, "set i l %d\r", port);
if (!wifi->sendCommand(cmd, "AOK"))
return -1;
+
+ // save
+ if (!wifi->sendCommand("save\r", "Stor"))
+ return -1;
+
+ // reboot
+ wifi->reboot();
+
+ // connect the network
+ if (wifi->isDHCP()) {
+ if (!wifi->sendCommand("join\r", "DHCP=ON", NULL, 10000))
+ return -1;
+ } else {
+ if (!wifi->sendCommand("join\r", "Associated", NULL, 10000))
+ return -1;
+ }
+ // exit
wifi->exit();
+
+ wait(0.2);
+ wifi->flush();
return 0;
}
--- a/Socket/UDPSocket.cpp Fri Nov 08 21:27:08 2013 +0000
+++ b/Socket/UDPSocket.cpp Tue Jun 03 18:41:15 2014 +0000
@@ -39,14 +39,33 @@
{
char cmd[17];
- // set udp protocol
- wifi->setProtocol(UDP);
-
// set local port
sprintf(cmd, "set i l %d\r", port);
if (!wifi->sendCommand(cmd, "AOK"))
return -1;
+
+ // save
+ if (!wifi->sendCommand("save\r", "Stor"))
+ return -1;
+
+ // reboot
+ wifi->reboot();
+
+ // set udp protocol
+ wifi->setProtocol(UDP);
+
+ // connect the network
+ if (wifi->isDHCP()) {
+ if (!wifi->sendCommand("join\r", "DHCP=ON", NULL, 10000))
+ return -1;
+ } else {
+ if (!wifi->sendCommand("join\r", "Associated", NULL, 10000))
+ return -1;
+ }
+
+ // exit
wifi->exit();
+ wifi->flush();
return 0;
}
--- a/Wifly/Wifly.cpp Fri Nov 08 21:27:08 2013 +0000
+++ b/Wifly/Wifly.cpp Tue Jun 03 18:41:15 2014 +0000
@@ -22,7 +22,7 @@
#include <algorithm>
//Debug is disabled by default
-#if (1 && defined(TARGET_LPC1768))
+#if (defined(DEBUG))
#define DBG(x, ...) std::printf("[Wifly : DBG]"x"\r\n", ##__VA_ARGS__);
#define WARN(x, ...) std::printf("[Wifly : WARN]"x"\r\n", ##__VA_ARGS__);
#define ERR(x, ...) std::printf("[Wifly : ERR]"x"\r\n", ##__VA_ARGS__);
@@ -32,7 +32,7 @@
#define ERR(x, ...)
#endif
-#if TARGET_LPC1768
+#if defined(DEBUG)
#define INFO(x, ...) printf("[Wifly : INFO]"x"\r\n", ##__VA_ARGS__);
#else
#define INFO(x, ...)
@@ -70,12 +70,21 @@
char cmd[20];
for (int i= 0; i < MAX_TRY_JOIN; i++) {
+
+ // no auto join
+ if (!sendCommand("set w j 0\r", "AOK"))
+ continue;
+
+ //no echo
+ if (!sendCommand("set u m 1\r", "AOK"))
+ continue;
+
// set time
- if (!sendCommand("set c t 20\r", "AOK"))
+ if (!sendCommand("set c t 30\r", "AOK"))
continue;
// set size
- if (!sendCommand("set c s 128\r", "AOK"))
+ if (!sendCommand("set c s 1024\r", "AOK"))
continue;
// red led on when tcp connection active
@@ -93,13 +102,9 @@
// tcp retry
if (!sendCommand("set i f 0x7\r", "AOK"))
continue;
-
- //no echo
- if (!sendCommand("set u m 1\r", "AOK"))
- continue;
-
- // no auto join
- if (!sendCommand("set w j 0\r", "AOK"))
+
+ // set dns server
+ if (!sendCommand("set d n rn.microchip.com\r", "AOK"))
continue;
//dhcp
@@ -158,6 +163,9 @@
continue;
}
+ if (!sendCommand("save\r", "Stor"))
+ continue;
+
exit();
state.associated = true;
@@ -184,11 +192,9 @@
break;
case UDP:
// set ip flags: udp auto pairing enabled
- if (!sendCommand("set i f 0x40\r", "AOK"))
- return false;
if (!sendCommand("set i h 0.0.0.0\r", "AOK"))
return false;
- if (!sendCommand("set i r 0\r", "AOK"))
+ if (!sendCommand("set i f 0x40\r", "AOK"))
return false;
break;
}
@@ -214,27 +220,23 @@
char rcv[20];
char cmd[20];
- // get ip from host and set host
- if (gethostbyname(host, rcv)) {
- sprintf(cmd, "set i h %s\r", rcv);
- if (!sendCommand(cmd, "AOK"))
- return false;
- } else {
- return false;
+ // try to open
+ sprintf(cmd, "open %s %d\r", host, port);
+ if (sendCommand(cmd, "OPEN", NULL, 10000)) {
+ state.tcp = true;
+ state.cmd_mode = false;
+ return true;
}
- // set port
- sprintf(cmd, "set i r %d\r", port);
- if (!sendCommand(cmd, "AOK"))
- return false;
-
- // open
- if (sendCommand("open\r", NULL, rcv)) {
+ // if failed, retry and parse the response
+ if (sendCommand(cmd, NULL, rcv, 5000)) {
if (strstr(rcv, "OPEN") == NULL) {
if (strstr(rcv, "Connected") != NULL) {
+ wait(0.25);
if (!sendCommand("close\r", "CLOS"))
return false;
- if (!sendCommand("open\r", "OPEN"))
+ wait(0.25);
+ if (!sendCommand(cmd, "OPEN", NULL, 10000))
return false;
} else {
return false;
@@ -243,7 +245,7 @@
} else {
return false;
}
-
+
state.tcp = true;
state.cmd_mode = false;
@@ -322,6 +324,7 @@
if (send("$$$", 3, "CMD") == -1 && send("\r",1,">") != true) {
ERR("cannot enter in cmd mode\r\n");
+ exit();
return false;
}
state.cmd_mode = true;
@@ -333,11 +336,11 @@
// if already disconnected, return
if (!state.associated)
return true;
-
+
if (!sendCommand("leave\r", "DeAuth"))
return false;
exit();
-
+
state.associated = false;
return true;
@@ -357,17 +360,29 @@
wait(0.2);
}
+bool Wifly::reboot()
+{
+ // if already in cmd mode, return
+ if (!sendCommand("reboot\r"))
+ return false;
+
+ wait(0.3);
+
+ state.cmd_mode = false;
+ return true;
+}
+
bool Wifly::close()
{
// if not connected, return
if (!state.tcp)
return true;
-
+
wait(0.25);
if (!sendCommand("close\r", "CLOS"))
return false;
exit();
-
+
state.tcp = false;
return true;
}
--- a/Wifly/Wifly.h Fri Nov 08 21:27:08 2013 +0000
+++ b/Wifly/Wifly.h Tue Jun 03 18:41:15 2014 +0000
@@ -44,11 +44,14 @@
TCP = (1 << 1)
};
+/**
+ * The Wifly class
+ */
class Wifly
{
public:
- /*
+ /**
* Constructor
*
* @param tx mbed pin to use for tx line of Serial interface
@@ -61,77 +64,82 @@
*/
Wifly( PinName tx, PinName rx, PinName reset, PinName tcp_status, const char * ssid, const char * phrase, Security sec);
- /*
+ /**
* Connect the wifi module to the ssid contained in the constructor.
*
* @return true if connected, false otherwise
*/
bool join();
- /*
+ /**
* Disconnect the wifly module from the access point
*
- * @ returns true if successful
+ * @return true if successful
*/
bool disconnect();
- /*
+ /**
* Open a tcp connection with the specified host on the specified port
*
* @param host host (can be either an ip address or a name. If a name is provided, a dns request will be established)
* @param port port
- * @ returns true if successful
+ * @return true if successful
*/
bool connect(const char * host, int port);
- /*
+ /**
* Set the protocol (UDP or TCP)
*
* @param p protocol
- * @ returns true if successful
+ * @return true if successful
*/
bool setProtocol(Protocol p);
- /*
+ /**
* Reset the wifi module
*/
void reset();
+
+ /**
+ * Reboot the wifi module
+ */
+ bool reboot();
- /*
+ /**
* Check if characters are available
*
* @return number of available characters
*/
int readable();
- /*
+ /**
* Check if characters are available
*
* @return number of available characters
*/
int writeable();
- /*
+ /**
* Check if a tcp link is active
*
- * @returns true if successful
+ * @return true if successful
*/
bool is_connected();
- /*
+ /**
* Read a character
*
* @return the character read
*/
char getc();
- /*
+ /**
* Flush the buffer
*/
void flush();
- /*
+ /**
* Write a character
*
* @param the character which will be written
@@ -139,28 +147,28 @@
int putc(char c);
- /*
+ /**
* To enter in command mode (we can configure the module)
*
* @return true if successful, false otherwise
*/
bool cmdMode();
- /*
+ /**
* To exit the command mode
*
* @return true if successful, false otherwise
*/
bool exit();
- /*
+ /**
* Close a tcp connection
*
- * @ returns true if successful
+ * @return true if successful
*/
bool close();
- /*
+ /**
* Send a string to the wifi module by serial port. This function desactivates the user interrupt handler when a character is received to analyze the response from the wifi module.
* Useful to send a command to the module and wait a response.
*
@@ -174,16 +182,25 @@
*/
int send(const char * str, int len, const char * ACK = NULL, char * res = NULL, int timeout = DEFAULT_WAIT_RESP_TIMEOUT);
- /*
+ /**
* Send a command to the wify module. Check if the module is in command mode. If not enter in command mode
*
* @param str string to be sent
* @param ACK string which must be acknowledge by the wifi module. If ACK == NULL, no string has to be acknoledged. (default: "NO")
* @param res this field will contain the response from the wifi module, result of a command sent. This field is available only if ACK = "NO" AND res != NULL (default: NULL)
*
- * @returns true if successful
+ * @return true if successful
*/
bool sendCommand(const char * cmd, const char * ack = NULL, char * res = NULL, int timeout = DEFAULT_WAIT_RESP_TIMEOUT);
+
+ /**
+ * Return true if the module is using dhcp
+ *
+ * @return true if the module is using dhcp
+ */
+ bool isDHCP() {
+ return state.dhcp;
+ }
bool gethostbyname(const char * host, char * ip);
--- a/WiflyInterface.h Fri Nov 08 21:27:08 2013 +0000
+++ b/WiflyInterface.h Tue Jun 03 18:41:15 2014 +0000
@@ -22,8 +22,8 @@
#include "Wifly.h"
- /** Interface using Wifly to connect to an IP-based network
- *
+ /**
+ * Interface using Wifly to connect to an IP-based network
*/
class WiflyInterface: public Wifly {
public:
@@ -70,7 +70,7 @@
/** Get IP address
*
- * @ returns ip address
+ * \return ip address
*/
char* getIPAddress();
