Skip to content

Commit f000a6e

Browse files
authored
Merge pull request #77 from fpistm/ArduinoAPI
feat(server): add bool operator and end() api
2 parents df78428 + 8803014 commit f000a6e

File tree

3 files changed

+29
-5
lines changed

3 files changed

+29
-5
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,4 @@ Call `Ethernet::schedule()` performs an update of the LwIP stack.<br>
6666

6767
## Wiki
6868

69-
You can find information at https://github.com/stm32duino/wiki/wiki/STM32Ethernet
69+
You can find information at https://github.com/stm32duino/Arduino_Core_STM32/wiki/STM32Ethernet

src/EthernetServer.cpp

+26-4
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,22 @@ void EthernetServer::begin(uint16_t port)
4646
begin();
4747
}
4848

49+
void EthernetServer::end(void)
50+
{
51+
/* Free client */
52+
for (int n = 0; n < MAX_CLIENT; n++) {
53+
if (_tcp_client[n] != NULL) {
54+
EthernetClient client(_tcp_client[n]);
55+
client.stop();
56+
_tcp_client[n] = NULL;
57+
}
58+
}
59+
if (_tcp_server.pcb != NULL) {
60+
tcp_close(_tcp_server.pcb);
61+
_tcp_server.pcb = NULL;
62+
}
63+
}
64+
4965
void EthernetServer::accept()
5066
{
5167
/* Free client if disconnected */
@@ -93,10 +109,10 @@ size_t EthernetServer::write(const uint8_t *buffer, size_t size)
93109

94110
accept();
95111

96-
for (int n = 0; n < MAX_CLIENT; n++) {
97-
if (_tcp_client[n] != NULL) {
98-
if (_tcp_client[n]->pcb != NULL) {
99-
EthernetClient client(_tcp_client[n]);
112+
for (int i = 0; i < MAX_CLIENT; i++) {
113+
if (_tcp_client[i] != NULL) {
114+
if (_tcp_client[i]->pcb != NULL) {
115+
EthernetClient client(_tcp_client[i]);
100116
uint8_t s = client.status();
101117
if (s == TCP_ACCEPTED) {
102118
n += client.write(buffer, size);
@@ -107,3 +123,9 @@ size_t EthernetServer::write(const uint8_t *buffer, size_t size)
107123

108124
return n;
109125
}
126+
127+
EthernetServer::operator bool()
128+
{
129+
// server is listening for incoming clients
130+
return ((_tcp_server.pcb != NULL) && (_tcp_server.pcb->state == LISTEN));
131+
}

src/EthernetServer.h

+2
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@ class EthernetServer :
1818
EthernetClient available();
1919
virtual void begin();
2020
virtual void begin(uint16_t port);
21+
void end(void);
2122
virtual size_t write(uint8_t);
2223
virtual size_t write(const uint8_t *buf, size_t size);
24+
virtual operator bool();
2325
using Print::write;
2426
};
2527

0 commit comments

Comments
 (0)