From f44a0aa487c21e51ec91ff05d909bb14f3f56a78 Mon Sep 17 00:00:00 2001 From: pennam Date: Mon, 21 Oct 2024 11:28:41 +0200 Subject: [PATCH 1/3] WiFi: add setTimeout() --- libraries/WiFi/src/WiFi.cpp | 5 +++++ libraries/WiFi/src/WiFi.h | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/libraries/WiFi/src/WiFi.cpp b/libraries/WiFi/src/WiFi.cpp index 37e2aa4c0..a68c9679a 100644 --- a/libraries/WiFi/src/WiFi.cpp +++ b/libraries/WiFi/src/WiFi.cpp @@ -75,6 +75,7 @@ int arduino::WiFiClass::begin(const char* ssid, const char* passphrase, wl_enc_t wifi_if->set_network(_ip, _netmask, _gateway); } + wifi_if->set_timeout(_timeout); nsapi_error_t result = wifi_if->connect(ssid, passphrase, _security); if(result == NSAPI_ERROR_IS_CONNECTED) { @@ -297,6 +298,10 @@ unsigned long arduino::WiFiClass::getTime() { return 0; } +void arduino::WiFiClass::setTimeout(unsigned long timeout) { + _timeout = timeout; +} + void arduino::WiFiClass::statusCallback(nsapi_event_t status, intptr_t param) { if (((param == NSAPI_STATUS_DISCONNECTED) || diff --git a/libraries/WiFi/src/WiFi.h b/libraries/WiFi/src/WiFi.h index 807b40f8b..9fae11c40 100644 --- a/libraries/WiFi/src/WiFi.h +++ b/libraries/WiFi/src/WiFi.h @@ -168,6 +168,11 @@ class WiFiClass : public MbedSocketClass { unsigned long getTime(); + /* + * Configure WiFi join timeout in milliseconds. Default value is 7s. + */ + void setTimeout(unsigned long timeout); + friend class WiFiClient; friend class WiFiServer; friend class WiFiUDP; @@ -183,6 +188,7 @@ class WiFiClass : public MbedSocketClass { WiFiAccessPoint* ap_list = nullptr; uint8_t connected_ap; nsapi_security_t _security; + unsigned long _timeout = 7000; int setSSID(const char* ssid); void ensureDefaultAPNetworkConfiguration(); static void* handleAPEvents(whd_interface_t ifp, const whd_event_header_t* event_header, const uint8_t* event_data, void* handler_user_data); From e47254c422cbbb28cdee4f8ed89768adcc70d0bf Mon Sep 17 00:00:00 2001 From: pennam Date: Mon, 21 Oct 2024 11:29:21 +0200 Subject: [PATCH 2/3] WiFi: scan Networks only if security type is unknown --- libraries/WiFi/src/WiFi.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/libraries/WiFi/src/WiFi.cpp b/libraries/WiFi/src/WiFi.cpp index a68c9679a..6ad89d619 100644 --- a/libraries/WiFi/src/WiFi.cpp +++ b/libraries/WiFi/src/WiFi.cpp @@ -53,20 +53,20 @@ int arduino::WiFiClass::begin(const char* ssid, const char* passphrase, wl_enc_t wifi_if->attach(&arduino::WiFiClass::statusCallback); - scanNetworks(); - - if (isVisible(ssid)) { - // Set the network security mode from the scan result. - _security = ap_list[connected_ap].get_security(); - } else { - // For hidden networks, the security mode must be set explicitly. - // if ENC_TYPE_UNKNOWN this means that is the default value and so the user - // has not set it... no worth trying, it is probably an unknown (not hidden) - // interface - if(security == ENC_TYPE_UNKNOWN) { + if(security == ENC_TYPE_UNKNOWN) { + scanNetworks(); + if (isVisible(ssid)) { + // Set the network security mode from the scan result. + _security = ap_list[connected_ap].get_security(); + } else { + // For hidden networks, the security mode must be set explicitly. + // if ENC_TYPE_UNKNOWN this means that is the default value and so the user + // has not set it... no worth trying, it is probably an unknown (not hidden) + // interface _currentNetworkStatus = WL_CONNECT_FAILED; return _currentNetworkStatus; } + } else { _security = enum2sec(security); } From 9280863aab03f5e7944caa87a87fc5c46637b577 Mon Sep 17 00:00:00 2001 From: pennam Date: Mon, 21 Oct 2024 14:40:56 +0200 Subject: [PATCH 3/3] patches: WHD add wifi join timeout --- ...eout-parameter-to-WiFiSTAInterface-a.patch | 152 ++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 patches/0239-WHD-add-join-timeout-parameter-to-WiFiSTAInterface-a.patch diff --git a/patches/0239-WHD-add-join-timeout-parameter-to-WiFiSTAInterface-a.patch b/patches/0239-WHD-add-join-timeout-parameter-to-WiFiSTAInterface-a.patch new file mode 100644 index 000000000..9c5b688a2 --- /dev/null +++ b/patches/0239-WHD-add-join-timeout-parameter-to-WiFiSTAInterface-a.patch @@ -0,0 +1,152 @@ +From efd54c8990ba5b437eb4eb8b786b7e48941b03f1 Mon Sep 17 00:00:00 2001 +From: pennam +Date: Mon, 21 Oct 2024 11:27:36 +0200 +Subject: [PATCH] WHD: add join timeout parameter to WiFiSTAInterface and + drivers + +--- + .../emac/COMPONENT_WHD/interface/WhdSTAInterface.cpp | 7 ++++--- + .../emac/COMPONENT_WHD/interface/WhdSTAInterface.h | 6 ++++++ + .../COMPONENT_WHD/wifi-host-driver/inc/whd_wifi_api.h | 2 +- + .../COMPONENT_WHD/wifi-host-driver/src/whd_wifi_api.c | 9 ++++++--- + connectivity/netsocket/include/netsocket/WiFiInterface.h | 7 +++++++ + 5 files changed, 24 insertions(+), 7 deletions(-) + +diff --git a/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.cpp b/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.cpp +index c933203d36..f7631a0583 100644 +--- a/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.cpp ++++ b/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.cpp +@@ -211,7 +211,8 @@ WhdSTAInterface::WhdSTAInterface(WHD_EMAC &emac, OnboardNetworkStack &stack, Olm + _security(NSAPI_SECURITY_NONE), + _whd_emac(emac), + _olm(&olm), +- _iface_shared(shared) ++ _iface_shared(shared), ++ _timeout(7000) + { + } + +@@ -334,7 +335,7 @@ nsapi_error_t WhdSTAInterface::connect() + res = (whd_result_t)whd_wifi_join(_whd_emac.ifp, + &ssid, + security, +- (const uint8_t *)_pass, strlen(_pass)); ++ (const uint8_t *)_pass, strlen(_pass), _timeout); + } + else + { +@@ -345,7 +346,7 @@ nsapi_error_t WhdSTAInterface::connect() + res = (whd_result_t)whd_wifi_join(_whd_emac.ifp, + &ssid, + security, +- (const uint8_t *)_pass, key_length); ++ (const uint8_t *)_pass, key_length, _timeout); + } + if (res == WHD_SUCCESS) { + break; +diff --git a/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.h b/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.h +index 4dd1098947..bfe933bac7 100644 +--- a/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.h ++++ b/connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.h +@@ -119,6 +119,11 @@ public: + return 0; + } + ++ nsapi_error_t set_timeout(uint32_t timeout) ++ { ++ _timeout = timeout; ++ } ++ + /** Set blocking status of interface. + * Nonblocking mode unsupported. + * +@@ -257,6 +262,7 @@ private: + nsapi_security_t _security; + WHD_EMAC &_whd_emac; + OlmInterface *_olm; ++ uint32_t _timeout; + whd_interface_shared_info_t &_iface_shared; + }; + +diff --git a/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/inc/whd_wifi_api.h b/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/inc/whd_wifi_api.h +index f3b73214cb..291bd23de8 100755 +--- a/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/inc/whd_wifi_api.h ++++ b/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/inc/whd_wifi_api.h +@@ -281,7 +281,7 @@ extern uint32_t whd_wifi_stop_scan(whd_interface_t ifp); + * Error code if an error occurred + */ + extern uint32_t whd_wifi_join(whd_interface_t ifp, const whd_ssid_t *ssid, whd_security_t auth_type, +- const uint8_t *security_key, uint8_t key_length); ++ const uint8_t *security_key, uint8_t key_length, uint32_t timeout); + + /** Joins a specific Wi-Fi network + * +diff --git a/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/src/whd_wifi_api.c b/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/src/whd_wifi_api.c +index 5294104ab4..8a8f411ef9 100755 +--- a/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/src/whd_wifi_api.c ++++ b/connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/src/whd_wifi_api.c +@@ -294,6 +294,8 @@ static const uint16_t mcs_data_rate_lookup_table[32][2][2] = + }, + }; + ++static whd_wifi_join_timeout = DEFAULT_JOIN_ATTEMPT_TIMEOUT; ++ + + /****************************************************** + * Static Function prototypes +@@ -1334,7 +1336,7 @@ static uint32_t whd_wifi_join_wait_for_complete(whd_interface_t ifp, cy_semaphor + + while (!done) + { +- result = cy_rtos_get_semaphore(semaphore, DEFAULT_JOIN_ATTEMPT_TIMEOUT / 10, WHD_FALSE); ++ result = cy_rtos_get_semaphore(semaphore, whd_wifi_join_timeout / 10, WHD_FALSE); + whd_assert("Get semaphore failed", (result == CY_RSLT_SUCCESS) || (result == CY_RTOS_TIMEOUT) ); + REFERENCE_DEBUG_ONLY_VARIABLE(result); + +@@ -1345,7 +1347,7 @@ static uint32_t whd_wifi_join_wait_for_complete(whd_interface_t ifp, cy_semaphor + } + + cy_rtos_get_time(¤t_time); +- done = (whd_bool_t)( (current_time - start_time) >= DEFAULT_JOIN_ATTEMPT_TIMEOUT ); ++ done = (whd_bool_t)( (current_time - start_time) >= whd_wifi_join_timeout ); + } + + if (result != WHD_SUCCESS) +@@ -1574,7 +1576,7 @@ uint32_t whd_wifi_join_specific(whd_interface_t ifp, const whd_scan_result_t *ap + } + + uint32_t whd_wifi_join(whd_interface_t ifp, const whd_ssid_t *ssid, whd_security_t auth_type, +- const uint8_t *security_key, uint8_t key_length) ++ const uint8_t *security_key, uint8_t key_length, uint32_t timeout) + { + cy_semaphore_t join_sema; + whd_result_t result; +@@ -1616,6 +1618,7 @@ uint32_t whd_wifi_join(whd_interface_t ifp, const whd_ssid_t *ssid, whd_security + ssid_params->SSID_len = htod32(ssid->length); + memcpy(ssid_params->SSID, ssid->value, ssid_params->SSID_len); + result = whd_cdc_send_ioctl(ifp, CDC_SET, WLC_SET_SSID, buffer, 0); ++ whd_wifi_join_timeout = timeout; + + if (result == WHD_SUCCESS) + { +diff --git a/connectivity/netsocket/include/netsocket/WiFiInterface.h b/connectivity/netsocket/include/netsocket/WiFiInterface.h +index 4fd7fc6fb8..c13cab4312 100644 +--- a/connectivity/netsocket/include/netsocket/WiFiInterface.h ++++ b/connectivity/netsocket/include/netsocket/WiFiInterface.h +@@ -59,6 +59,13 @@ public: + */ + virtual nsapi_error_t set_channel(uint8_t channel) = 0; + ++ /** Set the Wi-Fi network join timeout. ++ * ++ * @param timeout joint timeout in milliseconds (Default: 7000). ++ * @return NSAPI_ERROR_OK on success, or error code on failure. ++ */ ++ virtual nsapi_error_t set_timeout(uint32_t timeout) = 0; ++ + /** Get the current radio signal strength for active connection. + * + * @return Connection strength in dBm (negative value), +-- +2.45.2 + pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy