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
ESP8266Interface.cpp
- Committer:
- Christopher Haster
- Date:
- 2016-02-24
- Branch:
- api-changes
- Revision:
- 41:3f4d5f4862d2
- Parent:
- 40:83c6b4129468
- Child:
- 42:4bf09cadf328
File content as of revision 41:3f4d5f4862d2:
/* ESP8266Interface Example
* Copyright (c) 2015 ARM Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "ESP8266Interface.h"
// ESP8266Interface implementation
ESP8266Interface::ESP8266Interface(PinName tx, PinName rx, bool debug)
: _esp(tx, rx, debug)
{
memset(_ids, 0, sizeof(_ids));
}
ESP8266Interface::~ESP8266Interface()
{
}
int32_t ESP8266Interface::connect(
const char *ap,
const char *pass_phrase,
wifi_security_t)
{
if (!_esp.startup(3)) {
return -1;
}
if (!_esp.dhcp(true, 1)) {
return -1;
}
if (!_esp.connect(ap, pass_phrase)) {
return -1;
}
_ip_address = _esp.getIPAddress();
_mac_address = _esp.getMACAddress();
if (!_ip_address || !_mac_address) {
return -1;
}
return 0;
}
int32_t ESP8266Interface::disconnect()
{
if (!_esp.disconnect()) {
return -1;
}
return 0;
}
const char *ESP8266Interface::getIPAddress()
{
return _ip_address;
}
const char *ESP8266Interface::getMACAddress()
{
return _mac_address;
}
SocketInterface *ESP8266Interface::createSocket(socket_protocol_t proto)
{
// Look for an unused socket
int id = -1;
for (int i = 0; i < ESP8266_SOCKET_COUNT; i++) {
if (!_ids[i]) {
id = i;
_ids[i] = true;
break;
}
}
if (id == -1) {
return 0;
}
return new ESP8266Interface::ESP8266Socket(&_esp, proto, id);
}
void ESP8266Interface::destroySocket(SocketInterface *iface)
{
ESP8266Interface::ESP8266Socket *socket = (ESP8266Interface::ESP8266Socket *)iface;
_ids[socket->getID()] = false;
delete socket;
}
// ESP8266Socket implementation
ESP8266Interface::ESP8266Socket::ESP8266Socket(
ESP8266 *esp,
socket_protocol_t proto,
int id)
: _esp(esp)
, _proto(proto)
, _id(id)
{
}
ESP8266Interface::ESP8266Socket::~ESP8266Socket()
{
}
int32_t ESP8266Interface::ESP8266Socket::open(const char *ip, uint16_t port)
{
const char *proto = (_proto == SOCK_UDP) ? "UDP" : "TCP";
if (!_esp->open(proto, _id, ip, port)) {
return -1;
}
return 0;
}
int32_t ESP8266Interface::ESP8266Socket::close()
{
if (!_esp->close(_id)) {
return -1;
}
return 0;
}
int32_t ESP8266Interface::ESP8266Socket::send(const void *data, uint32_t amount)
{
if (!_esp->send(_id, data, amount)) {
return -1;
}
return 0;
}
int32_t ESP8266Interface::ESP8266Socket::recv(void *data, uint32_t amount)
{
return _esp->recv(_id, data, amount);
}
int ESP8266Interface::ESP8266Socket::getID() const {
return _id;
}
