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.
Dependencies: ESP8266
Fork of ESP8266Interface by
Diff: ESP8266Interface.cpp
- Revision:
- 22:312453862371
- Parent:
- 20:5d0762aa4680
- Child:
- 23:fd0f3197c30b
diff -r 2400f429ec6b -r 312453862371 ESP8266Interface.cpp
--- a/ESP8266Interface.cpp Tue Jul 21 20:18:55 2015 +0000
+++ b/ESP8266Interface.cpp Wed Jul 22 20:53:09 2015 +0000
@@ -20,9 +20,9 @@
ESP8266Interface::ESP8266Interface(PinName tx, PinName rx)
: serial(tx, rx), atParser(&serial)
{
+ uuidCounter = 0;
serial.baud(115200);
- availableID = new int[5];
- for(int i = 0; i<4; i++){
+ for(int i = 0; i<numSockets; i++){
availableID[i] = -1;
}
}
@@ -49,7 +49,7 @@
int32_t ESP8266Interface::init(const char *ip, const char *mask, const char *gateway)
{
- return -1;
+
}
int32_t ESP8266Interface::connect(uint32_t timeout_ms)
@@ -69,9 +69,16 @@
return 0;
}
-int32_t ESP8266Interface::disconnect(void) const
+int32_t ESP8266Interface::disconnect(void)
{
- return -1;
+ if (!(atParser.send("AT+CWQAP") && atParser.recv("OK")))
+ return -1;
+ for(int i=0; i<numSockets; i++){
+ SocketInterface *socket = sockets[availableID[i]];
+ deallocateSocket(socket);
+ }
+ return 0;
+
}
char *ESP8266Interface::getIPAddress(void)
@@ -104,9 +111,8 @@
SocketInterface *ESP8266Interface::allocateSocket(socket_protocol_t socketProtocol)
{
int id = -1;
- uuidCounter += 1;
//Look through the array of available sockets for an unused ID
- for(int i=0; i<sizeof(availableID); i++){
+ for(int i=0; i<numSockets; i++){
if (availableID[i] == -1){
id = i;
availableID[i] = uuidCounter;
@@ -116,7 +122,8 @@
if (id == -1){
return NULL;//tried to allocate more than the maximum 5 sockets
}
- ESP8266Socket *socket = new ESP8266Socket(uuidCounter, &atParser, socketProtocol, (uint8_t)id);
+ ESP8266Socket *socket = new ESP8266Socket(uuidCounter++, &atParser, socketProtocol, (uint8_t)id);
+ sockets[socket->getHandle()] = socket;
return socket;
}
@@ -124,12 +131,27 @@
{
int id = (int)static_cast<ESP8266Socket*>(socket)->getID();
availableID[id] = -1;
- return id;
+
+ std::map<uint32_t, SocketInterface*>::iterator it;
+
+ // Check if socket is owned by WiFiRadioInterface
+ it = sockets.find(socket->getHandle());
+
+ if (it != sockets.end()) {
+ // If so, erase it from the internal socket map and deallocate the socket
+ sockets.erase(it);
+ delete socket;
+ return 0;
+ } else {
+ // Socket is not owned by WiFiRadioInterface, so return -1 error
+ return -1;
+ }
}
ESP8266Socket::ESP8266Socket(uint32_t handle, ATParser *atParser, socket_protocol_t type, uint8_t id)
-: _handle(handle), atParser(atParser), _id(id)
+: atParser(atParser), _id(id)
{
+ _handle = handle;
SocketInterface::_type = type;
}
@@ -241,6 +263,12 @@
}
return 0;
}
+
+uint32_t ESP8266Socket::getHandle()const
+{
+ return _handle;
+}
+
uint8_t ESP8266Socket::getID()
{
return _id;
