From e1df6974555de71155ee1342be744d01c62c3e9b Mon Sep 17 00:00:00 2001 From: Juraj Andrassy Date: Tue, 26 Sep 2023 21:07:23 +0200 Subject: [PATCH] WiFiServer - added end(), begin(port) and ctor without parameters --- docs/api.md | 4 ++-- src/WiFiServer.cpp | 24 ++++++++++++++++++++++++ src/WiFiServer.h | 3 +++ src/utility/server_drv.cpp | 22 ++++++++++++++++++++++ src/utility/server_drv.h | 2 ++ src/utility/wifi_spi.h | 2 +- 6 files changed, 54 insertions(+), 3 deletions(-) diff --git a/docs/api.md b/docs/api.md index ff5ac52a..c93a1e56 100644 --- a/docs/api.md +++ b/docs/api.md @@ -2713,12 +2713,12 @@ Tells the server to begin listening for incoming connections. ``` server.begin() - +server.begin(port) ``` #### Parameters -- None +- port (optional): the port to listen on (int) #### Returns diff --git a/src/WiFiServer.cpp b/src/WiFiServer.cpp index 3756a1c7..0c6531e5 100644 --- a/src/WiFiServer.cpp +++ b/src/WiFiServer.cpp @@ -29,6 +29,13 @@ extern "C" { #include "WiFiClient.h" #include "WiFiServer.h" +WiFiServer::WiFiServer() : + _sock(NO_SOCKET_AVAIL), + _lastSock(NO_SOCKET_AVAIL) +{ + _port = 80; +} + WiFiServer::WiFiServer(uint16_t port) : _sock(NO_SOCKET_AVAIL), _lastSock(NO_SOCKET_AVAIL) @@ -38,6 +45,7 @@ WiFiServer::WiFiServer(uint16_t port) : void WiFiServer::begin() { + end(); _sock = ServerDrv::getSocket(); if (_sock != NO_SOCKET_AVAIL) { @@ -45,6 +53,22 @@ void WiFiServer::begin() } } +void WiFiServer::begin(uint16_t port) +{ + end(); + _port = port; + begin(); +} + +void WiFiServer::end() +{ + if (_sock != NO_SOCKET_AVAIL) { + ServerDrv::stopServer(_sock); + _sock = NO_SOCKET_AVAIL; + _lastSock = NO_SOCKET_AVAIL; + } +} + WiFiClient WiFiServer::available(byte* status) { int sock = NO_SOCKET_AVAIL; diff --git a/src/WiFiServer.h b/src/WiFiServer.h index b01fa5e7..c3104d2f 100644 --- a/src/WiFiServer.h +++ b/src/WiFiServer.h @@ -36,9 +36,12 @@ class WiFiServer : public Server { uint16_t _port; void* pcb; public: + WiFiServer(); WiFiServer(uint16_t); WiFiClient available(uint8_t* status = NULL); void begin(); + void begin(uint16_t port); + void end(); virtual size_t write(uint8_t); virtual size_t write(const uint8_t *buf, size_t size); uint8_t status(); diff --git a/src/utility/server_drv.cpp b/src/utility/server_drv.cpp index d24a2b57..94b29417 100644 --- a/src/utility/server_drv.cpp +++ b/src/utility/server_drv.cpp @@ -84,6 +84,28 @@ void ServerDrv::startServer(uint32_t ipAddress, uint16_t port, uint8_t sock, uin SpiDrv::spiSlaveDeselect(); } +void ServerDrv::stopServer(uint8_t sock) +{ + WAIT_FOR_SLAVE_SELECT(); + // Send Command + SpiDrv::sendCmd(STOP_SERVER_TCP_CMD, PARAM_NUMS_1); + SpiDrv::sendParam(&sock, 1, LAST_PARAM); + + SpiDrv::spiSlaveDeselect(); + //Wait the reply elaboration + SpiDrv::waitForSlaveReady(); + SpiDrv::spiSlaveSelect(); + + // Wait for reply + uint8_t _data = 0; + uint8_t _dataLen = 0; + if (!SpiDrv::waitResponseCmd(STOP_SERVER_TCP_CMD, PARAM_NUMS_1, &_data, &_dataLen)) + { + WARN("error waitResponse"); + } + SpiDrv::spiSlaveDeselect(); +} + // Start server TCP on port specified void ServerDrv::startClient(uint32_t ipAddress, uint16_t port, uint8_t sock, uint8_t protMode) { diff --git a/src/utility/server_drv.h b/src/utility/server_drv.h index 2cfe0a17..275d1e37 100644 --- a/src/utility/server_drv.h +++ b/src/utility/server_drv.h @@ -35,6 +35,8 @@ class ServerDrv static void startServer(uint32_t ipAddress, uint16_t port, uint8_t sock, uint8_t protMode=TCP_MODE); + static void stopServer(uint8_t sock); + static void startClient(uint32_t ipAddress, uint16_t port, uint8_t sock, uint8_t protMode=TCP_MODE); static void startClient(const char* host, uint8_t host_len, uint32_t ipAddress, uint16_t port, uint8_t sock, uint8_t protMode=TCP_MODE); diff --git a/src/utility/wifi_spi.h b/src/utility/wifi_spi.h index a11f145e..0bf0c41b 100644 --- a/src/utility/wifi_spi.h +++ b/src/utility/wifi_spi.h @@ -82,7 +82,7 @@ enum { GET_HOST_BY_NAME_CMD= 0x35, START_SCAN_NETWORKS = 0x36, GET_FW_VERSION_CMD = 0x37, -// GET_TEST_CMD = 0x38, + STOP_SERVER_TCP_CMD = 0x38, SEND_DATA_UDP_CMD = 0x39, GET_REMOTE_DATA_CMD = 0x3A, GET_TIME_CMD = 0x3B,