modified by ohneta
Dependents: HelloESP8266Interface_mine
Fork of ESP8266Interface by
Diff: ESP8266Interface.cpp
- Revision:
- 23:fd0f3197c30b
- Parent:
- 22:312453862371
- Child:
- 24:37504440f296
- Child:
- 25:91c4e9d34b77
--- a/ESP8266Interface.cpp Wed Jul 22 20:53:09 2015 +0000 +++ b/ESP8266Interface.cpp Thu Jul 23 21:25:30 2015 +0000 @@ -18,30 +18,23 @@ #include <string> ESP8266Interface::ESP8266Interface(PinName tx, PinName rx) -: serial(tx, rx), atParser(&serial) +:esp8266(tx,rx) { uuidCounter = 0; - serial.baud(115200); for(int i = 0; i<numSockets; i++){ availableID[i] = -1; } } -ESP8266Interface::ESP8266Interface(PinName tx, PinName rx, const char *ap, const char *pass_phrase, wifi_security_t security, uint32_t timeout_ms) -: serial(tx, rx), atParser(&serial) -{ - -} - int32_t ESP8266Interface::init(void) { - if (!(atParser.send("AT") && atParser.recv("OK"))) + if (!esp8266.startup()) return -1; - if (!(atParser.send("AT+RST") && atParser.recv("OK\r\nready"))) + if (!esp8266.reset()) return -1; - if (!(atParser.send("AT+CWMODE=3") && atParser.recv("OK"))) + if (!esp8266.wifiMode(3)) return -1; - if (!(atParser.send("AT+CIPMUX=1") && atParser.recv("OK"))) + if (!esp8266.multipleConnections(true)) return -1; return 0; @@ -49,7 +42,7 @@ int32_t ESP8266Interface::init(const char *ip, const char *mask, const char *gateway) { - + return -1; } int32_t ESP8266Interface::connect(uint32_t timeout_ms) @@ -59,11 +52,11 @@ int32_t ESP8266Interface::connect(const char *ap, const char *pass_phrase, wifi_security_t security, uint32_t timeout_ms) { - if (!(atParser.send("AT+CWDHCP=2,1") && atParser.recv("OK"))) + esp8266.setTimeout(timeout_ms); + + if (!esp8266.dhcp(1,true)) return -1; - string connect_command = "AT+CWJAP=\""+(string)ap+"\",\""+(string)pass_phrase+"\""; - atParser.setTimeout(10000); - if (!(atParser.send(connect_command.c_str()) && atParser.recv("OK"))){ + if (!esp8266.connect(ap,pass_phrase)){ return -1; } return 0; @@ -71,7 +64,7 @@ int32_t ESP8266Interface::disconnect(void) { - if (!(atParser.send("AT+CWQAP") && atParser.recv("OK"))) + if (!esp8266.disconnect()) return -1; for(int i=0; i<numSockets; i++){ SocketInterface *socket = sockets[availableID[i]]; @@ -83,7 +76,7 @@ char *ESP8266Interface::getIPAddress(void) { - if (!(atParser.send("AT+CIPSTA?") && atParser.recv("+CIPSTA:\"%[^\"]\"", ip))) + if(!esp8266.getIPAddress(ip)) return NULL; return ip; } @@ -122,7 +115,7 @@ 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++, &esp8266, socketProtocol, (uint8_t)id); sockets[socket->getHandle()] = socket; return socket; } @@ -148,8 +141,8 @@ } } -ESP8266Socket::ESP8266Socket(uint32_t handle, ATParser *atParser, socket_protocol_t type, uint8_t id) -: atParser(atParser), _id(id) +ESP8266Socket::ESP8266Socket(uint32_t handle, ESP8266 *driver, socket_protocol_t type, uint8_t id) +: driver(driver), _id(id) { _handle = handle; SocketInterface::_type = type; @@ -204,18 +197,13 @@ int32_t ESP8266Socket::open() { - char portstr[5]; - char idstr[2]; - sprintf(idstr,"%d",_id); - sprintf(portstr, "%d", _port); - string sock_type; if(_type == SOCK_UDP) sock_type = "UDP"; else if(_type == SOCK_TCP) sock_type = "TCP"; - string start_command = "AT+CIPSTART="+(string)idstr+",\""+sock_type+"\",\""+(string)_addr+"\","+(string)portstr; - if (!(atParser->send(start_command.c_str()) && atParser->recv("OK"))){ + + if (!driver->openSocket(sock_type, _id, _port, _addr)){ return -1;//opening socket not succesful } return 0; @@ -224,42 +212,26 @@ int32_t ESP8266Socket::send(const void *data, uint32_t amount, uint32_t timeout_ms) { - char idstr[2]; - sprintf(idstr,"%d",_id); - char lenstr[5]; - sprintf(lenstr,"%d",(int)amount); - atParser->setTimeout((int)timeout_ms); - - string send_command = "AT+CIPSEND="+(string)idstr+","+(string)lenstr; - if(!atParser->send(send_command.c_str())){ + driver->setTimeout((int)timeout_ms); + if(!driver->sendData(_id, data, amount)){ return -1; } - atParser->write((char*)data, (int)amount); return 0; } uint32_t ESP8266Socket::recv(void *data, uint32_t amount, uint32_t timeout_ms) { - atParser->setTimeout((int)timeout_ms); - int length; - int id; - if (!(atParser->recv("+IPD,%d,%d:", &id, &length) && - atParser->read((char*)data, length) && - atParser->recv("OK"))){ - return false; - } - return length; + + return driver->recv(data, amount); + } int32_t ESP8266Socket::close() const { - char idstr[2]; - sprintf(idstr,"%d",_id); - string close_command = "AT+CIPCLOSE="+(string)idstr; - if (!(atParser->send(close_command.c_str()) && atParser->recv("OK"))){ - return -1;//opening socket not succesful + if (!driver->close(_id)){ + return -1;//closing socket not succesful } return 0; }