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