Skip to content

Commit 4bf7c03

Browse files
committed
WiFi: adapt to new mbed APIs
1 parent 6ee8f62 commit 4bf7c03

File tree

7 files changed

+105
-19
lines changed

7 files changed

+105
-19
lines changed

libraries/WiFi/src/WiFi.cpp

+38-3
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,32 @@ int arduino::WiFiClass::begin(char* ssid, const char *passphrase) {
3838
return ret == NSAPI_ERROR_OK ? WL_CONNECTED : WL_CONNECT_FAILED;
3939
}
4040

41+
int arduino::WiFiClass::beginAP(const char* ssid, const char *passphrase, uint8_t channel) {
42+
43+
#if defined(ARDUINO_ENVIE_M7) || defined(ARDUINO_ENVIE_M4)
44+
softap = WhdSoftAPInterface::get_default_instance();
45+
#endif
46+
47+
if (softap == NULL) {
48+
return WL_CONNECT_FAILED;
49+
}
50+
51+
//Set ap ssid, password and channel
52+
SocketAddress ip("192.168.3.1");
53+
SocketAddress gw("192.168.3.1");
54+
SocketAddress netmask("255.255.255.0");
55+
((WhdSoftAPInterface*)softap)->set_network(ip, gw, netmask);
56+
nsapi_error_t ret = ((WhdSoftAPInterface*)softap)->start(ssid, passphrase, NSAPI_SECURITY_WPA2, channel, true /* dhcp server */, NULL, true /* cohexistance */);
57+
58+
return ret == NSAPI_ERROR_OK ? WL_AP_LISTENING : WL_CONNECT_FAILED;
59+
}
60+
61+
void arduino::WiFiClass::end() {
62+
if (softap != NULL) {
63+
((WhdSoftAPInterface*)softap)->stop();
64+
}
65+
}
66+
4167
char* arduino::WiFiClass::SSID() {
4268
return _ssid;
4369
}
@@ -136,13 +162,22 @@ uint8_t* arduino::WiFiClass::macAddress(uint8_t* mac) {
136162
arduino::IPAddress arduino::WiFiClass::localIP() {
137163
arduino::IPAddress addr;
138164

139-
const char *ip = wifi_if->get_ip_address();
140-
addr.fromString(ip); // @todo: the IP we get from Mbed is correct, but is parsed incorrectly by Arduino
165+
SocketAddress ip;
166+
if (softap != NULL) {
167+
softap->get_ip_address(&ip);
168+
} else {
169+
wifi_if->get_ip_address(&ip);
170+
}
171+
addr.fromString(ip.get_ip_address()); // @todo: the IP we get from Mbed is correct, but is parsed incorrectly by Arduino
141172
return addr;
142173
}
143174

144175
NetworkInterface *arduino::WiFiClass::getNetwork() {
145-
return wifi_if;
176+
if (softap != NULL) {
177+
return softap;
178+
} else {
179+
return wifi_if;
180+
}
146181
}
147182

148183
#if defined(ARDUINO_ENVIE_M7) || defined(ARDUINO_ENVIE_M4)

libraries/WiFi/src/WiFi.h

+8-4
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ extern "C" {
3333

3434
#include "netsocket/NetworkInterface.h"
3535

36+
#if defined(ARDUINO_ENVIE_M7) || defined(ARDUINO_ENVIE_M4)
37+
#include "WhdSoftAPInterface.h"
38+
#endif
39+
3640
namespace arduino {
3741

3842
typedef void* (*voidPrtFuncPtr)(void);
@@ -86,10 +90,7 @@ class WiFiClass
8690
*/
8791
int begin(char* ssid, const char *passphrase);
8892

89-
uint8_t beginAP(const char *ssid);
90-
uint8_t beginAP(const char *ssid, uint8_t channel);
91-
uint8_t beginAP(const char *ssid, const char* passphrase);
92-
uint8_t beginAP(const char *ssid, const char* passphrase, uint8_t channel);
93+
int beginAP(const char *ssid, const char* passphrase, uint8_t channel = 6);
9394

9495
/* Change Ip configuration settings disabling the dhcp client
9596
*
@@ -279,6 +280,9 @@ class WiFiClass
279280
NetworkInterface *getNetwork();
280281

281282
private:
283+
284+
EMACInterface* softap;
285+
282286
bool isVisible(char* ssid);
283287
char* _ssid;
284288
WiFiInterface* wifi_if;

libraries/WiFi/src/WiFiClient.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ int arduino::WiFiClient::connect(const char *host, uint16_t port) {
3535
//sock->sigio(mbed::callback(this, &WiFiClient::getStatus));
3636
//sock->set_blocking(false);
3737
sock->set_timeout(1000);
38-
int ret = ((TCPSocket*)sock)->connect(host, port);
38+
SocketAddress addr(host, port);
39+
int ret = ((TCPSocket*)sock)->connect(addr);
3940
if (ret == 0) {
4041
return 1;
4142
} else {
@@ -55,7 +56,8 @@ int arduino::WiFiClient::connectSSL(const char *host, uint16_t port) {
5556
beforeConnect();
5657
}
5758
sock->set_timeout(1000);
58-
int ret = ((TLSSocket*)sock)->connect(host, port);
59+
SocketAddress addr(host, port);
60+
int ret = ((TLSSocket*)sock)->connect(addr);
5961
if (ret == 0) {
6062
return 1;
6163
} else {

libraries/WiFi/src/WiFiClient.h

+4
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ class WiFiClient : public arduino::Client {
5252
return sock != NULL;
5353
}
5454

55+
void setSocket(Socket* _sock) {
56+
sock = _sock;
57+
}
58+
5559
IPAddress remoteIP();
5660
uint16_t remotePort();
5761

libraries/WiFi/src/WiFiServer.cpp

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#include "WiFiServer.h"
2+
#include "WiFiClient.h"
3+
4+
extern WiFiClass WiFi;
5+
6+
#ifndef WIFI_TCP_BUFFER_SIZE
7+
#define WIFI_TCP_BUFFER_SIZE 1508
8+
#endif
9+
10+
arduino::WiFiServer::WiFiServer(uint16_t port) {
11+
_port = port;
12+
}
13+
14+
uint8_t arduino::WiFiServer::status() {
15+
return 0;
16+
}
17+
18+
void arduino::WiFiServer::begin() {
19+
if (sock == NULL) {
20+
sock = new TCPSocket(WiFi.getNetwork());
21+
}
22+
sock->bind(_port);
23+
sock->listen(5);
24+
}
25+
26+
size_t arduino::WiFiServer::write(uint8_t c) {
27+
sock->send(&c, 1);
28+
}
29+
30+
size_t arduino::WiFiServer::write(const uint8_t *buf, size_t size) {
31+
sock->send(buf, size);
32+
}
33+
34+
arduino::WiFiClient arduino::WiFiServer::available(uint8_t* status) {
35+
WiFiClient ret;
36+
TCPSocket* client = sock->accept();
37+
ret.setSocket(client);
38+
return ret;
39+
}

libraries/WiFi/src/WiFiServer.h

+8-8
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@
1717
#ifndef wifiserver_h
1818
#define wifiserver_h
1919

20-
extern "C" {
21-
#include "utility/wl_definitions.h"
22-
}
23-
24-
#include "api/Server.h"
25-
#include "TCPServer.h"
20+
#include "WiFi.h"
21+
#include "api/Print.h"
22+
#include "api/Client.h"
23+
#include "api/IPAddress.h"
24+
#include "TLSSocket.h"
25+
#include "TCPSocket.h"
2626

2727
namespace arduino {
2828

@@ -31,10 +31,10 @@ class WiFiClient;
3131
class WiFiServer : public arduino::Server {
3232
private:
3333
uint16_t _port;
34-
void* pcb;
34+
TCPSocket* sock;
3535
public:
3636
WiFiServer(uint16_t);
37-
WiFiClient available(uint8_t* status = NULL);
37+
arduino::WiFiClient available(uint8_t* status = NULL);
3838
void begin();
3939
virtual size_t write(uint8_t);
4040
virtual size_t write(const uint8_t *buf, size_t size);

libraries/WiFi/src/WiFiUdp.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,14 @@ int arduino::WiFiUDP::endPacket() {
5353
// Write a single byte into the packet
5454
size_t arduino::WiFiUDP::write(uint8_t byte) {
5555
uint8_t buffer[1] = { byte };
56-
return _socket.sendto(_host, _port, buffer, 1);
56+
SocketAddress addr(_host, _port);
57+
return _socket.sendto(addr, buffer, 1);
5758
}
5859

5960
// Write size bytes from buffer into the packet
6061
size_t arduino::WiFiUDP::write(const uint8_t *buffer, size_t size) {
61-
return _socket.sendto(_host, _port, buffer, size);
62+
SocketAddress addr(_host, _port);
63+
return _socket.sendto(addr, buffer, size);
6264
}
6365

6466
int arduino::WiFiUDP::parsePacket() {

0 commit comments

Comments
 (0)