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: ESP8266_W7500_Example DualNetworkInterface-Basic
Fork of ESP8266Interface by
Revision 44:3a7b6083210b, committed 2015-06-03
- Comitter:
- sarahmarshy
- Date:
- Wed Jun 03 18:21:19 2015 +0000
- Parent:
- 35:22d30e936e4c
- Child:
- 45:c180905b5b79
- Commit message:
- -UDP Client working ; -Interfaces with WebSocketClient; -General improvements
Changed in this revision
--- a/ESP8266/ESP8266.cpp Fri May 01 18:29:38 2015 +0000
+++ b/ESP8266/ESP8266.cpp Wed Jun 03 18:21:19 2015 +0000
@@ -23,7 +23,7 @@
#include <algorithm>
//Debug is disabled by default
-#ifdef DEBUG
+#if 1
#define DBG(x, ...) printf("[ESP8266 : DBG]"x"\r\n", ##__VA_ARGS__);
#define WARN(x, ...) printf("[ESP8266 : WARN]"x"\r\n", ##__VA_ARGS__);
#define ERR(x, ...) printf("[ESP8266 : ERR]"x"\r\n", ##__VA_ARGS__);
@@ -162,20 +162,49 @@
}
}
-bool ESP8266::startUDP(char* ip, int port)
+bool ESP8266::startUDP(char* ip, int port, int id, int length)
{
char portstr[5];
+ char idstr[1];
+ char lenstr[2];
+
sprintf(portstr, "%d", port);
- sendCommand(( "AT+CIPSTART=\"UDP\",\"" + (string) ip + "\"," + (string) portstr ).c_str(), "OK", NULL, 10000);
-
- sendCommand("AT+CIPMODE=1", "OK", NULL, 1000);// go into transparent mode
- sendCommand("AT+CIPSEND", ">", NULL, 1000);// go into transparent mode
+ sprintf(idstr, "%d", id);
+ sprintf(lenstr, "%d", length);
+
+ sendCommand("AT+CIPMUX=1", "OK", NULL, 1000);
+ sendCommand(( "AT+CIPSTART=" + string(idstr) + ",\"UDP\",\"" + (string) ip + "\"," + (string) portstr + ",1112,0").c_str(), "OK", NULL, 10000);
+ sendCommand(("AT+CIPSEND=" + (string)idstr + "," + (string)lenstr).c_str(), ">", NULL, 1000);// go into transparent mode
DBG("Data Mode\r\n");
state.cmdMode = false;
return true;
}
+bool ESP8266::startTCPServer(int port)
+{
+ bool command_results[3];
+ command_results[0]=sendCommand("AT+CWMODE=3", "OK", NULL, 1000);
+ command_results[1]=sendCommand("AT+CIPMUX=1", "OK", NULL, 1000);
+ if(port == 333){
+ command_results[2]=sendCommand("AT+CIPSERVER=1", "OK", NULL, 1000);
+ }
+ else{
+ char portstr[5];
+ sprintf(portstr, "%d", port);
+ command_results[2]=sendCommand(("AT+CIPSERVER=1," + (string)portstr).c_str(), "OK", NULL, 1000);
+ }
+ //sendCommand("AT+CIFSR", "OK", NULL, 1000);
+ DBG("Data Mode\r\n");
+ state.cmdMode = false;
+ if (command_results[0] and command_results[1] and command_results[2]){
+ return true;
+ }
+ else{
+ return false;
+ }
+}
+
bool ESP8266::close()
{
send("+++",3);
--- a/ESP8266/ESP8266.h Fri May 01 18:29:38 2015 +0000
+++ b/ESP8266/ESP8266.h Wed Jun 03 18:21:19 2015 +0000
@@ -92,9 +92,17 @@
/*
* Legacy Start for UDP only connection in transparent mode
* @param ip A string that contains the IP, no quotes
+ * @param id number between 0-4
* @param port Numerical port number to connect to
+ * @param length number of characters in the message being sent
*/
- bool startUDP(char* ip, int port);
+ bool startUDP(char* ip, int port, int id, int length);
+
+ /*
+ *Starts the ESP chip as a TCP Server
+ *@param port Numerical port of the server, default is 333
+ */
+ bool startTCPServer(int port = 333);
/**
* Close a connection
@@ -162,7 +170,7 @@
* Send a command to the wifi 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 ACK string which must be acknowledge by the wifi module. If ACK == NULL, no string has to be acknowledged. (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)
*
* @return true if successful
--- a/Socket/TCPSocketConnection.cpp Fri May 01 18:29:38 2015 +0000
+++ b/Socket/TCPSocketConnection.cpp Wed Jun 03 18:21:19 2015 +0000
@@ -23,7 +23,7 @@
using std::memcpy;
//Debug is disabled by default
-#ifdef DEBUG
+#if 1
#define DBG(x, ...) printf("[TCPConnection : DBG]"x"\r\n", ##__VA_ARGS__);
#define WARN(x, ...) printf("[TCPConnection: WARN]"x"\r\n", ##__VA_ARGS__);
#define ERR(x, ...) printf("[TCPConnection : ERR]"x"\r\n", ##__VA_ARGS__);
@@ -67,7 +67,7 @@
int TCPSocketConnection::send(char* data, int length)
{
if (!_is_connected) {
- ERR("TCPSocketConnection::receive() - _is_connected is false : you cant receive data untill you connect to a socket!");
+ ERR("TCPSocketConnection::receive() - _is_connected is false : you cant receive data until you connect to a socket!");
return -1;
}
Timer tmr;
@@ -130,7 +130,7 @@
int TCPSocketConnection::receive(char* buffer, int length)
{
if (!_is_connected) {
- ERR("TCPSocketConnection::receive() - _is_connected is false : you cant receive data untill you connect to a socket!");
+ ERR("TCPSocketConnection::receive() - _is_connected is false : you cant receive data until you connect to a socket!");
return -1;
}
Timer tmr;
@@ -240,5 +240,5 @@
// }
// }
// return readLen;
- return 0;
+ receive(data,length);
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Socket/TCPSocketServer.cpp Wed Jun 03 18:21:19 2015 +0000
@@ -0,0 +1,44 @@
+/* Copyright (C) 2012 mbed.org, MIT License
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+#include "TCPSocketServer.h"
+
+#include <cstring>
+
+using std::memset;
+using std::memcpy;
+
+TCPSocketServer::TCPSocketServer() {
+
+}
+
+int TCPSocketServer::bind(int port) {
+ if(!wifi->startTCPServer(port)) {
+ return(-1);
+ }
+ _port = port;
+ return 0;
+}
+
+int TCPSocketServer::listen(int max) {
+
+ return 0;
+}
+
+int TCPSocketServer::accept(TCPSocketConnection& connection) {
+ return 0;
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Socket/TCPSocketServer.h Wed Jun 03 18:21:19 2015 +0000
@@ -0,0 +1,55 @@
+/* Copyright (C) 2012 mbed.org, MIT License
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ * and associated documentation files (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all copies or
+ * substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+#ifndef TCPSOCKETSERVER_H
+#define TCPSOCKETSERVER_H
+
+#include "Socket/Socket.h"
+#include "TCPSocketConnection.h"
+
+/** TCP Server.
+ */
+class TCPSocketServer : public Socket {
+ friend class TCPSocketConnection;
+ public:
+ /** Instantiate a TCP Server.
+ */
+ TCPSocketServer();
+
+ /** Bind a socket to a specific port.
+ \param port The port to listen for incoming connections on.
+ \return 0 on success, -1 on failure.
+ */
+ int bind(int port);
+
+ /** Start listening for incoming connections.
+ \param backlog number of pending connections that can be queued up at any
+ one time [Default: 1].
+ \return 0 on success, -1 on failure.
+ */
+ int listen(int backlog=1);
+
+ /** Accept a new connection.
+ \param connection A TCPSocketConnection instance that will handle the incoming connection.
+ \return 0 on success, -1 on failure.
+ */
+ int accept(TCPSocketConnection& connection);
+private:
+ int _port;
+};
+
+#endif
\ No newline at end of file
--- a/Socket/UDPSocket.cpp Fri May 01 18:29:38 2015 +0000
+++ b/Socket/UDPSocket.cpp Wed Jun 03 18:21:19 2015 +0000
@@ -53,7 +53,8 @@
// initialize transparent mode if not already done
if(!endpoint_configured) {
// initialize UDP (default id of -1 means transparent mode)
- if(!wifi->start(ESP_UDP_TYPE, remote._ipAddress, remote._port, remote._id)) {
+ //!wifi->start(ESP_UDP_TYPE, remote._ipAddress, remote._port, remote._id
+ if(!wifi->startUDP(remote._ipAddress, remote._port, 0,length)) {
return(-1);
}
endpoint_configured = true;
