@@ -156,15 +156,15 @@ struct wlan_callb_s {
156
156
bool OdinWiFiInterface::_wlan_initialized = false ;
157
157
int32_t OdinWiFiInterface::_target_id = cbMAIN_TARGET_INVALID_ID;
158
158
159
- OdinWiFiInterface::OdinWiFiInterface (OdinWiFiEMAC &emac , OnboardNetworkStack &stack) :
160
- EMACInterface(emac , stack),
159
+ OdinWiFiInterface::OdinWiFiInterface (OdinWiFiEMAC &emac_obj , OnboardNetworkStack &stack) :
160
+ EMACInterface(emac_obj , stack),
161
161
_thread(osPriorityNormal, 4096 )
162
162
{
163
163
init (false );
164
164
}
165
165
166
- OdinWiFiInterface::OdinWiFiInterface (bool debug, OdinWiFiEMAC &emac , OnboardNetworkStack &stack) :
167
- EMACInterface(emac , stack),
166
+ OdinWiFiInterface::OdinWiFiInterface (bool debug, OdinWiFiEMAC &emac_obj , OnboardNetworkStack &stack) :
167
+ EMACInterface(emac_obj , stack),
168
168
_thread(osPriorityNormal, 4096 )
169
169
{
170
170
init (debug);
@@ -755,7 +755,7 @@ OdinWiFiInterface::OdinWifiState OdinWiFiInterface::entry_connect_fail_wait_disc
755
755
cbRTSL_Status error_code;
756
756
757
757
cbMAIN_driverLock ();
758
- error_code = cbWLAN_disconnect (handle);
758
+ error_code = cbWLAN_disconnect (_wlan_status_connected_info. handle );
759
759
cbMAIN_driverUnlock ();
760
760
761
761
MBED_ASSERT (error_code == cbSTATUS_OK);
@@ -776,7 +776,7 @@ OdinWiFiInterface::OdinWifiState OdinWiFiInterface::entry_wait_disconnect()
776
776
cbRTSL_Status error_code;
777
777
778
778
cbMAIN_driverLock ();
779
- error_code = cbWLAN_disconnect (handle);
779
+ error_code = cbWLAN_disconnect (_wlan_status_disconnected_info. handle );
780
780
cbMAIN_driverUnlock ();
781
781
782
782
MBED_ASSERT (error_code == cbSTATUS_OK);
@@ -800,7 +800,7 @@ OdinWiFiInterface::OdinWifiState OdinWiFiInterface::entry_ap_started()
800
800
OdinWiFiInterface::OdinWifiState OdinWiFiInterface::entry_ap_wait_stop ()
801
801
{
802
802
cbMAIN_driverLock ();
803
- cbRTSL_Status status = cbWLAN_apStop (handle);
803
+ cbRTSL_Status status = cbWLAN_apStop (_ap. handle );
804
804
cbMAIN_driverUnlock ();
805
805
806
806
MBED_ASSERT (status == cbSTATUS_OK);
@@ -811,7 +811,7 @@ OdinWiFiInterface::OdinWifiState OdinWiFiInterface::entry_ap_wait_stop()
811
811
OdinWiFiInterface::OdinWifiState OdinWiFiInterface::entry_ap_fail_wait_stop ()
812
812
{
813
813
cbMAIN_driverLock ();
814
- cbRTSL_Status status = cbWLAN_apStop (handle);
814
+ cbRTSL_Status status = cbWLAN_apStop (_ap. handle );
815
815
cbMAIN_driverUnlock ();
816
816
817
817
MBED_ASSERT (status == cbSTATUS_OK);
@@ -915,7 +915,9 @@ void OdinWiFiInterface::handle_in_msg(void)
915
915
break ;
916
916
917
917
case cbWLAN_STATUS_CONNECTED:
918
+ flush_while_wlan_status_connected = true ;
918
919
handle_wlan_status_connected (&(msg->data .wlan_status_connected ));
920
+ flush_while_wlan_status_connected = false ;
919
921
break ;
920
922
921
923
case cbWLAN_SCAN_INDICATION:
@@ -1022,11 +1024,6 @@ void OdinWiFiInterface::handle_user_connect(user_connect_s *user_connect)
1022
1024
}
1023
1025
1024
1026
if (error_code == NSAPI_ERROR_OK) {
1025
- memset (&_wlan_status_connected_info, 0 , sizeof (cbWLAN_StatusConnectedInfo));
1026
- memset (&_wlan_status_disconnected_info, 0 , sizeof (cbWLAN_StatusDisconnectedInfo));
1027
- _wlan_status_disconnected_info.handle = cbWLAN_DEFAULT_HANDLE;
1028
- _wlan_status_connected_info.handle = cbWLAN_DEFAULT_HANDLE;
1029
-
1030
1027
_state_sta = entry_wait_connect ();
1031
1028
}
1032
1029
else
@@ -1043,6 +1040,7 @@ void OdinWiFiInterface::handle_user_disconnect(void)
1043
1040
switch (_state_sta) {
1044
1041
case S_STA_CONNECTED:
1045
1042
case S_STA_DISCONNECTED_WAIT_CONNECT:
1043
+ emac.set_wifi_emac_handle (_wlan_status_disconnected_info.handle );
1046
1044
_state_sta = entry_wait_disconnect ();
1047
1045
break ;
1048
1046
@@ -1121,6 +1119,7 @@ void OdinWiFiInterface::handle_user_connect_timeout()
1121
1119
}
1122
1120
_timer.stop ();
1123
1121
1122
+ emac.set_wifi_emac_handle (_wlan_status_connected_info.handle );
1124
1123
_state_sta = entry_connect_fail_wait_disconnect ();
1125
1124
}
1126
1125
}
@@ -1312,9 +1311,10 @@ void OdinWiFiInterface::handle_wlan_status_connected(wlan_status_connected_s *wl
1312
1311
_gateway[0 ] ? _gateway : 0 ,
1313
1312
DEFAULT_STACK);
1314
1313
1314
+ memcpy (&_wlan_status_connected_info, &(wlan_connect->info ), sizeof (cbWLAN_StatusConnectedInfo));
1315
+ emac.set_wifi_emac_handle (_wlan_status_connected_info.handle );
1315
1316
1316
1317
if (error_code == NSAPI_ERROR_OK || error_code == NSAPI_ERROR_IS_CONNECTED) {
1317
- memcpy (&_wlan_status_connected_info, &(wlan_connect->info ), sizeof (cbWLAN_StatusConnectedInfo));
1318
1318
if (_state_sta != S_STA_CONNECTED){
1319
1319
_state_sta = S_STA_CONNECTED;
1320
1320
send_user_response_msg (ODIN_WIFI_MSG_USER_CONNECT, NSAPI_ERROR_OK);
@@ -1349,6 +1349,7 @@ void OdinWiFiInterface::handle_wlan_status_connection_failure(wlan_status_connec
1349
1349
}
1350
1350
1351
1351
memcpy (&_wlan_status_disconnected_info, &(connect_failure->info ), sizeof (cbWLAN_StatusDisconnectedInfo));
1352
+ emac.set_wifi_emac_handle (_wlan_status_disconnected_info.handle );
1352
1353
1353
1354
switch (_state_sta) {
1354
1355
case S_STA_WAIT_CONNECT:
@@ -1381,7 +1382,7 @@ void OdinWiFiInterface::handle_wlan_status_connection_failure(wlan_status_connec
1381
1382
1382
1383
void OdinWiFiInterface::handle_wlan_status_disconnected (void )
1383
1384
{
1384
- nsapi_error_t error_code;
1385
+ nsapi_error_t error_code = NSAPI_ERROR_OK ;
1385
1386
1386
1387
if (_debug) {
1387
1388
printf (" WLAN STATUS DISCONNECTED\r\n " );
@@ -1402,24 +1403,19 @@ void OdinWiFiInterface::handle_wlan_status_disconnected(void)
1402
1403
1403
1404
case S_STA_CONNECTION_FAIL_WAIT_DISCONNECT:
1404
1405
_state_sta = S_STA_IDLE;
1405
- if (_wlan_status_disconnected_info.handle == cbWLAN_DEFAULT_HANDLE){
1406
- switch (_wlan_status_disconnected_info.reason ) {
1407
- error_code = NSAPI_ERROR_NO_SSID;
1408
- break ;
1409
-
1410
- case cbWLAN_STATUS_DISCONNECTED_AUTH_FAILURE:
1411
- case cbWLAN_STATUS_DISCONNECTED_ASSOC_FAILURE:
1412
- case cbWLAN_STATUS_DISCONNECTED_MIC_FAILURE:
1413
- error_code = NSAPI_ERROR_AUTH_FAILURE;
1414
- break ;
1415
- case cbWLAN_STATUS_DISCONNECTED_NO_BSSID_FOUND:
1416
- case cbWLAN_STATUS_DISCONNECTED_UNKNOWN:
1417
- error_code = NSAPI_ERROR_NO_CONNECTION;
1418
- break ;
1419
- default :
1420
- error_code = NSAPI_ERROR_DEVICE_ERROR;
1421
- break ;
1422
- }
1406
+ switch (_wlan_status_disconnected_info.reason ) {
1407
+ case cbWLAN_STATUS_DISCONNECTED_AUTH_FAILURE:
1408
+ case cbWLAN_STATUS_DISCONNECTED_ASSOC_FAILURE:
1409
+ case cbWLAN_STATUS_DISCONNECTED_MIC_FAILURE:
1410
+ error_code = NSAPI_ERROR_AUTH_FAILURE;
1411
+ break ;
1412
+ case cbWLAN_STATUS_DISCONNECTED_NO_BSSID_FOUND:
1413
+ case cbWLAN_STATUS_DISCONNECTED_UNKNOWN:
1414
+ error_code = NSAPI_ERROR_NO_CONNECTION;
1415
+ break ;
1416
+ default :
1417
+ error_code = NSAPI_ERROR_DEVICE_ERROR;
1418
+ break ;
1423
1419
}
1424
1420
send_user_response_msg (ODIN_WIFI_MSG_USER_CONNECT, error_code);
1425
1421
break ;
@@ -1562,6 +1558,9 @@ void OdinWiFiInterface::init(bool debug = false)
1562
1558
memset (_mac_addr_str, 0 , ODIN_WIFI_MAX_MAC_ADDR_STR);
1563
1559
memset (&_wlan_status_connected_info, 0 , sizeof (cbWLAN_StatusConnectedInfo));
1564
1560
memset (&_wlan_status_disconnected_info, 0 , sizeof (cbWLAN_StatusDisconnectedInfo));
1561
+ _wlan_status_connected_info.handle = cbWLAN_DEFAULT_HANDLE;
1562
+ _wlan_status_disconnected_info.handle = cbWLAN_DEFAULT_HANDLE;
1563
+ _ap.handle = cbWLAN_DEFAULT_HANDLE;
1565
1564
1566
1565
_msg_pool = new MemoryPool<odin_wifi_msg_s, 11 >();
1567
1566
@@ -1660,6 +1659,8 @@ nsapi_error_t OdinWiFiInterface::wlan_connect(
1660
1659
strncpy ((char *)connect_params.ssid .ssid , ssid, cbWLAN_SSID_MAX_LENGTH);
1661
1660
connect_params.ssid .ssidLength = strlen ((const char *)connect_params.ssid .ssid );
1662
1661
1662
+ static cbWLAN_Handle handle;
1663
+
1663
1664
switch (security)
1664
1665
{
1665
1666
case NSAPI_SECURITY_NONE:
@@ -1717,6 +1718,7 @@ nsapi_error_t OdinWiFiInterface::wlan_connect(
1717
1718
break ;
1718
1719
}
1719
1720
1721
+ // emac.set_wifi_emac_handle(handle); // Eliminated this because upcoming state will update the handle before it is used anywhere - to be tested
1720
1722
if (status != cbSTATUS_OK || handle == cbWLAN_INVALID_HANDLE) {
1721
1723
error_code = NSAPI_ERROR_UNSUPPORTED;
1722
1724
}
@@ -1752,6 +1754,8 @@ nsapi_error_t OdinWiFiInterface::wlan_ap_start(
1752
1754
status = cbWLAN_ioctl (cbWLAN_IOCTL_SET_AP_BEACON_INTERVAL, (void *)&beacon_interval);
1753
1755
cbMAIN_driverUnlock ();
1754
1756
1757
+ static cbWLAN_Handle handle;
1758
+
1755
1759
if (status != cbSTATUS_OK) {
1756
1760
error_code = NSAPI_ERROR_PARAMETER;
1757
1761
} else {
@@ -1791,7 +1795,7 @@ nsapi_error_t OdinWiFiInterface::wlan_ap_start(
1791
1795
error_code = NSAPI_ERROR_UNSUPPORTED;
1792
1796
}
1793
1797
}
1794
-
1798
+ _ap. handle = handle;
1795
1799
return error_code;
1796
1800
}
1797
1801
@@ -1830,14 +1834,16 @@ void OdinWiFiInterface::wlan_scan_indication(cbWLAN_ScanIndicationInfo *scan_inf
1830
1834
1831
1835
void OdinWiFiInterface::wlan_status_indication (cbWLAN_StatusIndicationInfo status, void *data)
1832
1836
{
1833
- struct odin_wifi_msg_s * msg = _msg_pool->alloc ();
1834
- MBED_ASSERT (msg != NULL );
1837
+ if (!flush_while_wlan_status_connected) {
1838
+ struct odin_wifi_msg_s * msg = _msg_pool->alloc ();
1839
+ MBED_ASSERT (msg != NULL );
1835
1840
1836
- msg->type = status;
1837
- memcpy (&(msg->data ), data, sizeof (odin_wifi_msg_s::data_t ));
1841
+ msg->type = status;
1842
+ memcpy (&(msg->data ), data, sizeof (odin_wifi_msg_s::data_t ));
1838
1843
1839
- osStatus ok = _in_queue.put (msg, 0 );
1840
- MBED_ASSERT (ok == osOK);
1844
+ osStatus ok = _in_queue.put (msg, 0 );
1845
+ MBED_ASSERT (ok == osOK);
1846
+ }
1841
1847
}
1842
1848
1843
1849
static nsapi_security_t convertToNSAPI_security (cbWLAN_AuthenticationSuite authSuit)
0 commit comments