Skip to content

Commit cdb5495

Browse files
authored
restore proper arduino Client:: & Wire:: API (#5969)
1 parent 5dd780c commit cdb5495

15 files changed

+65
-52
lines changed

cores/esp8266/Client.h

+9-5
Original file line numberDiff line numberDiff line change
@@ -26,23 +26,27 @@
2626
class Client: public Stream {
2727

2828
public:
29-
virtual int connect(CONST IPAddress& ip, uint16_t port) =0;
29+
virtual int connect(IPAddress ip, uint16_t port) =0;
3030
virtual int connect(const char *host, uint16_t port) =0;
3131
virtual size_t write(uint8_t) =0;
3232
virtual size_t write(const uint8_t *buf, size_t size) =0;
3333
virtual int available() = 0;
3434
virtual int read() = 0;
3535
virtual int read(uint8_t *buf, size_t size) = 0;
3636
virtual int peek() = 0;
37-
virtual bool flush(unsigned int maxWaitMs = 0) = 0;
38-
virtual bool stop(unsigned int maxWaitMs = 0) = 0;
37+
virtual void flush() = 0;
38+
virtual void stop() = 0;
3939
virtual uint8_t connected() = 0;
4040
virtual operator bool() = 0;
4141
protected:
42-
CONST uint8_t* rawIPAddress(CONST IPAddress& addr) {
42+
uint8_t* rawIPAddress(IPAddress& addr) {
4343
return addr.raw_address();
4444
}
45-
;
45+
#if LWIP_VERSION_MAJOR != 1
46+
const uint8_t* rawIPAddress(const IPAddress& addr) {
47+
return addr.raw_address();
48+
}
49+
#endif
4650
};
4751

4852
#endif

cores/esp8266/Udp.h

+8-3
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,18 @@ class UDP: public Stream {
7979
virtual void flush() =0; // Finish reading the current packet
8080

8181
// Return the IP address of the host who sent the current incoming packet
82-
virtual IPAddress remoteIP() const =0;
82+
virtual IPAddress remoteIP() =0;
8383
// Return the port of the host who sent the current incoming packet
84-
virtual uint16_t remotePort() const =0;
84+
virtual uint16_t remotePort() =0;
8585
protected:
86-
CONST uint8_t* rawIPAddress(CONST IPAddress& addr) {
86+
uint8_t* rawIPAddress(IPAddress& addr) {
8787
return addr.raw_address();
8888
}
89+
#if LWIP_VERSION_MAJOR != 1
90+
const uint8_t* rawIPAddress(const IPAddress& addr) {
91+
return addr.raw_address();
92+
}
93+
#endif
8994
};
9095

9196
#endif

libraries/ESP8266WiFi/src/WiFiClient.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ int WiFiClient::connect(const String& host, uint16_t port)
137137
return connect(host.c_str(), port);
138138
}
139139

140-
int WiFiClient::connect(CONST IPAddress& ip, uint16_t port)
140+
int WiFiClient::connect(IPAddress ip, uint16_t port)
141141
{
142142
if (_client) {
143143
stop();

libraries/ESP8266WiFi/src/WiFiClient.h

+14-12
Original file line numberDiff line numberDiff line change
@@ -53,29 +53,31 @@ class WiFiClient : public Client, public SList<WiFiClient> {
5353
WiFiClient& operator=(const WiFiClient&);
5454

5555
uint8_t status();
56-
virtual int connect(CONST IPAddress& ip, uint16_t port);
57-
virtual int connect(const char *host, uint16_t port);
56+
virtual int connect(IPAddress ip, uint16_t port) override;
57+
virtual int connect(const char *host, uint16_t port) override;
5858
virtual int connect(const String& host, uint16_t port);
59-
virtual size_t write(uint8_t);
60-
virtual size_t write(const uint8_t *buf, size_t size);
59+
virtual size_t write(uint8_t) override;
60+
virtual size_t write(const uint8_t *buf, size_t size) override;
6161
virtual size_t write_P(PGM_P buf, size_t size);
6262
size_t write(Stream& stream);
6363

6464
// This one is deprecated, use write(Stream& instead)
6565
size_t write(Stream& stream, size_t unitSize) __attribute__ ((deprecated));
6666

67-
virtual int available();
68-
virtual int read();
69-
virtual int read(uint8_t *buf, size_t size);
70-
virtual int peek();
67+
virtual int available() override;
68+
virtual int read() override;
69+
virtual int read(uint8_t *buf, size_t size) override;
70+
virtual int peek() override;
7171
virtual size_t peekBytes(uint8_t *buffer, size_t length);
7272
size_t peekBytes(char *buffer, size_t length) {
7373
return peekBytes((uint8_t *) buffer, length);
7474
}
75-
virtual bool flush(unsigned int maxWaitMs = 0);
76-
virtual bool stop(unsigned int maxWaitMs = 0);
77-
virtual uint8_t connected();
78-
virtual operator bool();
75+
virtual void flush() override { (void)flush(0); }
76+
virtual void stop() override { (void)stop(0); }
77+
bool flush(unsigned int maxWaitMs);
78+
bool stop(unsigned int maxWaitMs);
79+
virtual uint8_t connected() override;
80+
virtual operator bool() override;
7981

8082
IPAddress remoteIP();
8183
uint16_t remotePort();

libraries/ESP8266WiFi/src/WiFiClientSecureAxTLS.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ WiFiClientSecure::WiFiClientSecure(ClientContext* client, bool usePMEM,
9595
_ssl->connectServer(client, _timeout);
9696
}
9797

98-
int WiFiClientSecure::connect(CONST IPAddress& ip, uint16_t port)
98+
int WiFiClientSecure::connect(IPAddress ip, uint16_t port)
9999
{
100100
if (!WiFiClient::connect(ip, port)) {
101101
return 0;

libraries/ESP8266WiFi/src/WiFiClientSecureAxTLS.h

+3-2
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class WiFiClientSecure : public WiFiClient {
3535
WiFiClientSecure() __attribute__((deprecated("Upgrade to BearSSL is advised, check https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266WiFi/src/WiFiClientSecure.h#L25-L99")));
3636
~WiFiClientSecure() override;
3737

38-
int connect(CONST IPAddress& ip, uint16_t port) override;
38+
int connect(IPAddress ip, uint16_t port) override;
3939
int connect(const String& host, uint16_t port) override;
4040
int connect(const char* name, uint16_t port) override;
4141

@@ -51,7 +51,8 @@ class WiFiClientSecure : public WiFiClient {
5151
int read() override;
5252
int peek() override;
5353
size_t peekBytes(uint8_t *buffer, size_t length) override;
54-
bool stop(unsigned int maxWaitMs = 0) override;
54+
void stop() override { (void)stop(0); }
55+
bool stop(unsigned int maxWaitMs);
5556

5657
bool setCACert(const uint8_t* pk, size_t size);
5758
bool setCertificate(const uint8_t* pk, size_t size);

libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ bool WiFiClientSecure::flush(unsigned int maxWaitMs) {
210210
return WiFiClient::flush(maxWaitMs);
211211
}
212212

213-
int WiFiClientSecure::connect(CONST IPAddress& ip, uint16_t port) {
213+
int WiFiClientSecure::connect(IPAddress ip, uint16_t port) {
214214
if (!WiFiClient::connect(ip, port)) {
215215
return 0;
216216
}

libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.h

+5-3
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class WiFiClientSecure : public WiFiClient {
3737
WiFiClientSecure(const WiFiClientSecure &rhs);
3838
~WiFiClientSecure() override;
3939

40-
int connect(CONST IPAddress& ip, uint16_t port) override;
40+
int connect(IPAddress ip, uint16_t port) override;
4141
int connect(const String& host, uint16_t port) override;
4242
int connect(const char* name, uint16_t port) override;
4343

@@ -56,8 +56,10 @@ class WiFiClientSecure : public WiFiClient {
5656
int read() override;
5757
int peek() override;
5858
size_t peekBytes(uint8_t *buffer, size_t length) override;
59-
bool flush(unsigned int maxWaitMs = 0) override;
60-
bool stop(unsigned int maxWaitMs = 0) override;
59+
bool flush(unsigned int maxWaitMs);
60+
bool stop(unsigned int maxWaitMs);
61+
void flush() override { (void)flush(0); }
62+
void stop() override { (void)stop(0); }
6163

6264
// Allow sessions to be saved/restored automatically to a memory area
6365
void setSession(Session *session) { _session = session; }

libraries/ESP8266WiFi/src/WiFiUdp.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -231,15 +231,15 @@ void WiFiUDP::flush()
231231
endPacket();
232232
}
233233

234-
IPAddress WiFiUDP::remoteIP() const
234+
IPAddress WiFiUDP::remoteIP()
235235
{
236236
if (!_ctx)
237237
return INADDR_ANY;
238238

239239
return _ctx->getRemoteAddress();
240240
}
241241

242-
uint16_t WiFiUDP::remotePort() const
242+
uint16_t WiFiUDP::remotePort()
243243
{
244244
if (!_ctx)
245245
return 0;

libraries/ESP8266WiFi/src/WiFiUdp.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,9 @@ class WiFiUDP : public UDP, public SList<WiFiUDP> {
9595
void flush() override; // Finish reading the current packet
9696

9797
// Return the IP address of the host who sent the current incoming packet
98-
IPAddress remoteIP() const override;
98+
IPAddress remoteIP() override;
9999
// Return the port of the host who sent the current incoming packet
100-
uint16_t remotePort() const override;
100+
uint16_t remotePort() override;
101101
// Return the destination address for incoming packets,
102102
// useful to distinguish multicast and ordinary packets
103103
IPAddress destinationIP() const;

libraries/Ethernet/src/EthernetClient.cpp

+5-14
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ int EthernetClient::connect(const char* host, uint16_t port) {
3535
}
3636
}
3737

38-
int EthernetClient::connect(CONST IPAddress& ip, uint16_t port) {
38+
int EthernetClient::connect(IPAddress ip, uint16_t port) {
3939
if (_sock != MAX_SOCK_NUM)
4040
return 0;
4141

@@ -119,43 +119,34 @@ int EthernetClient::peek() {
119119
return b;
120120
}
121121

122-
bool EthernetClient::flush(unsigned int maxWaitMs) {
123-
(void)maxWaitMs;
122+
void EthernetClient::flush() {
124123
::flush(_sock);
125-
return true;
126124
}
127125

128-
bool EthernetClient::stop(unsigned int maxWaitMs) {
126+
void EthernetClient::stop() {
129127
if (_sock == MAX_SOCK_NUM)
130-
return true;
128+
return;
131129

132130
// attempt to close the connection gracefully (send a FIN to other side)
133131
disconnect(_sock);
134132
unsigned long start = millis();
135133

136134
// wait up to a second for the connection to close
137135
uint8_t s;
138-
if (maxWaitMs == 0)
139-
maxWaitMs = 1000;
140136
do {
141137
s = status();
142138
if (s == SnSR::CLOSED)
143139
break; // exit the loop
144140
delay(1);
145-
} while (millis() - start < maxWaitMs);
146-
147-
bool ret = true;
141+
} while (millis() - start < 1000);
148142

149143
// if it hasn't closed, close it forcefully
150144
if (s != SnSR::CLOSED) {
151-
ret = false;
152145
close(_sock);
153146
}
154147

155148
EthernetClass::_server_port[_sock] = 0;
156149
_sock = MAX_SOCK_NUM;
157-
158-
return ret;
159150
}
160151

161152
uint8_t EthernetClient::connected() {

libraries/Ethernet/src/EthernetClient.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,16 @@ class EthernetClient : public Client {
1212
EthernetClient(uint8_t sock);
1313

1414
uint8_t status();
15-
virtual int connect(CONST IPAddress& ip, uint16_t port);
15+
virtual int connect(IPAddress ip, uint16_t port);
1616
virtual int connect(const char *host, uint16_t port);
1717
virtual size_t write(uint8_t);
1818
virtual size_t write(const uint8_t *buf, size_t size);
1919
virtual int available();
2020
virtual int read();
2121
virtual int read(uint8_t *buf, size_t size);
2222
virtual int peek();
23-
virtual bool flush(unsigned int maxWaitMs = 0);
24-
virtual bool stop(unsigned int maxWaitMs = 0);
23+
virtual void flush();
24+
virtual void stop();
2525
virtual uint8_t connected();
2626
virtual operator bool();
2727
virtual bool operator==(const bool value) { return bool() == value; }

libraries/Ethernet/src/EthernetUdp.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,9 @@ class EthernetUDP : public UDP {
9494
virtual void flush(); // Finish reading the current packet
9595

9696
// Return the IP address of the host who sent the current incoming packet
97-
virtual IPAddress remoteIP() const { return _remoteIP; };
97+
virtual IPAddress remoteIP() { return _remoteIP; };
9898
// Return the port of the host who sent the current incoming packet
99-
virtual uint16_t remotePort() const { return _remotePort; };
99+
virtual uint16_t remotePort() { return _remotePort; };
100100
};
101101

102102
#endif

libraries/Wire/Wire.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,13 @@ void TwoWire::onRequestService(void)
265265
user_onRequest();
266266
}
267267

268+
void TwoWire::onReceive( void (*function)(int) ) {
269+
// arduino api compatibility fixer:
270+
// really hope size parameter will not exceed 2^31 :)
271+
static_assert(sizeof(int) == sizeof(size_t), "something is wrong in Arduino kingdom");
272+
user_onReceive = reinterpret_cast<void(*)(size_t)>(function);
273+
}
274+
268275
void TwoWire::onReceive( void (*function)(size_t) ) {
269276
user_onReceive = function;
270277
}

libraries/Wire/Wire.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ class TwoWire : public Stream
7676
virtual int read(void);
7777
virtual int peek(void);
7878
virtual void flush(void);
79-
void onReceive( void (*)(size_t) );
79+
void onReceive( void (*)(int) ); // arduino api
80+
void onReceive( void (*)(size_t) ); // legacy esp8266 backward compatibility
8081
void onRequest( void (*)(void) );
8182

8283
inline size_t write(unsigned long n) { return write((uint8_t)n); }

0 commit comments

Comments
 (0)