Skip to content

Commit efd54c8

Browse files
committed
WHD: add join timeout parameter to WiFiSTAInterface and drivers
1 parent e959ae0 commit efd54c8

File tree

5 files changed

+24
-7
lines changed

5 files changed

+24
-7
lines changed

connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,8 @@ WhdSTAInterface::WhdSTAInterface(WHD_EMAC &emac, OnboardNetworkStack &stack, Olm
211211
_security(NSAPI_SECURITY_NONE),
212212
_whd_emac(emac),
213213
_olm(&olm),
214-
_iface_shared(shared)
214+
_iface_shared(shared),
215+
_timeout(7000)
215216
{
216217
}
217218

@@ -334,7 +335,7 @@ nsapi_error_t WhdSTAInterface::connect()
334335
res = (whd_result_t)whd_wifi_join(_whd_emac.ifp,
335336
&ssid,
336337
security,
337-
(const uint8_t *)_pass, strlen(_pass));
338+
(const uint8_t *)_pass, strlen(_pass), _timeout);
338339
}
339340
else
340341
{
@@ -345,7 +346,7 @@ nsapi_error_t WhdSTAInterface::connect()
345346
res = (whd_result_t)whd_wifi_join(_whd_emac.ifp,
346347
&ssid,
347348
security,
348-
(const uint8_t *)_pass, key_length);
349+
(const uint8_t *)_pass, key_length, _timeout);
349350
}
350351
if (res == WHD_SUCCESS) {
351352
break;

connectivity/drivers/emac/COMPONENT_WHD/interface/WhdSTAInterface.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,11 @@ class WhdSTAInterface : public WiFiInterface, public EMACInterface {
119119
return 0;
120120
}
121121

122+
nsapi_error_t set_timeout(uint32_t timeout)
123+
{
124+
_timeout = timeout;
125+
}
126+
122127
/** Set blocking status of interface.
123128
* Nonblocking mode unsupported.
124129
*
@@ -257,6 +262,7 @@ class WhdSTAInterface : public WiFiInterface, public EMACInterface {
257262
nsapi_security_t _security;
258263
WHD_EMAC &_whd_emac;
259264
OlmInterface *_olm;
265+
uint32_t _timeout;
260266
whd_interface_shared_info_t &_iface_shared;
261267
};
262268

connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/inc/whd_wifi_api.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ extern uint32_t whd_wifi_stop_scan(whd_interface_t ifp);
281281
* Error code if an error occurred
282282
*/
283283
extern uint32_t whd_wifi_join(whd_interface_t ifp, const whd_ssid_t *ssid, whd_security_t auth_type,
284-
const uint8_t *security_key, uint8_t key_length);
284+
const uint8_t *security_key, uint8_t key_length, uint32_t timeout);
285285

286286
/** Joins a specific Wi-Fi network
287287
*

connectivity/drivers/wifi/COMPONENT_WHD/wifi-host-driver/src/whd_wifi_api.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,8 @@ static const uint16_t mcs_data_rate_lookup_table[32][2][2] =
294294
},
295295
};
296296

297+
static whd_wifi_join_timeout = DEFAULT_JOIN_ATTEMPT_TIMEOUT;
298+
297299

298300
/******************************************************
299301
* Static Function prototypes
@@ -1334,7 +1336,7 @@ static uint32_t whd_wifi_join_wait_for_complete(whd_interface_t ifp, cy_semaphor
13341336

13351337
while (!done)
13361338
{
1337-
result = cy_rtos_get_semaphore(semaphore, DEFAULT_JOIN_ATTEMPT_TIMEOUT / 10, WHD_FALSE);
1339+
result = cy_rtos_get_semaphore(semaphore, whd_wifi_join_timeout / 10, WHD_FALSE);
13381340
whd_assert("Get semaphore failed", (result == CY_RSLT_SUCCESS) || (result == CY_RTOS_TIMEOUT) );
13391341
REFERENCE_DEBUG_ONLY_VARIABLE(result);
13401342

@@ -1345,7 +1347,7 @@ static uint32_t whd_wifi_join_wait_for_complete(whd_interface_t ifp, cy_semaphor
13451347
}
13461348

13471349
cy_rtos_get_time(&current_time);
1348-
done = (whd_bool_t)( (current_time - start_time) >= DEFAULT_JOIN_ATTEMPT_TIMEOUT );
1350+
done = (whd_bool_t)( (current_time - start_time) >= whd_wifi_join_timeout );
13491351
}
13501352

13511353
if (result != WHD_SUCCESS)
@@ -1574,7 +1576,7 @@ uint32_t whd_wifi_join_specific(whd_interface_t ifp, const whd_scan_result_t *ap
15741576
}
15751577

15761578
uint32_t whd_wifi_join(whd_interface_t ifp, const whd_ssid_t *ssid, whd_security_t auth_type,
1577-
const uint8_t *security_key, uint8_t key_length)
1579+
const uint8_t *security_key, uint8_t key_length, uint32_t timeout)
15781580
{
15791581
cy_semaphore_t join_sema;
15801582
whd_result_t result;
@@ -1616,6 +1618,7 @@ uint32_t whd_wifi_join(whd_interface_t ifp, const whd_ssid_t *ssid, whd_security
16161618
ssid_params->SSID_len = htod32(ssid->length);
16171619
memcpy(ssid_params->SSID, ssid->value, ssid_params->SSID_len);
16181620
result = whd_cdc_send_ioctl(ifp, CDC_SET, WLC_SET_SSID, buffer, 0);
1621+
whd_wifi_join_timeout = timeout;
16191622

16201623
if (result == WHD_SUCCESS)
16211624
{

connectivity/netsocket/include/netsocket/WiFiInterface.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,13 @@ class WiFiInterface: public virtual NetworkInterface {
5959
*/
6060
virtual nsapi_error_t set_channel(uint8_t channel) = 0;
6161

62+
/** Set the Wi-Fi network join timeout.
63+
*
64+
* @param timeout joint timeout in milliseconds (Default: 7000).
65+
* @return NSAPI_ERROR_OK on success, or error code on failure.
66+
*/
67+
virtual nsapi_error_t set_timeout(uint32_t timeout) = 0;
68+
6269
/** Get the current radio signal strength for active connection.
6370
*
6471
* @return Connection strength in dBm (negative value),

0 commit comments

Comments
 (0)