@@ -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);
@@ -386,7 +386,7 @@ nsapi_error_t OdinWiFiInterface::connect(
386
386
return NSAPI_ERROR_PARAMETER;
387
387
}
388
388
389
- if ((security == NSAPI_SECURITY_EAP_TLS) && (cert_handle->client_cert == NULL )) {
389
+ if ((security == NSAPI_SECURITY_EAP_TLS) && (cert_handle->client_cert == NULL || cert_handle-> client_prvt_key == NULL )) {
390
390
return NSAPI_ERROR_PARAMETER;
391
391
}
392
392
@@ -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_drvr_ind_pkts = true ;
920
921
handle_wlan_status_connected (&(msg->data .wlan_status_connected ));
922
+ flush_drvr_ind_pkts = 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
@@ -1655,6 +1654,7 @@ nsapi_error_t OdinWiFiInterface::wlan_connect(
1655
1654
cbRTSL_Status status = cbSTATUS_OK;
1656
1655
cbWLAN_CommonConnectParameters connect_params;
1657
1656
cbWLAN_EnterpriseConnectParameters enterpriseParams;
1657
+ static cbWLAN_Handle handle = cbWLAN_DEFAULT_HANDLE;
1658
1658
1659
1659
memset (&enterpriseParams, 0 , sizeof (cbWLAN_EnterpriseConnectParameters));
1660
1660
memset (&connect_params, 0 , sizeof (cbWLAN_CommonConnectParameters));
@@ -1739,6 +1739,8 @@ nsapi_error_t OdinWiFiInterface::wlan_ap_start(
1739
1739
cbWLAN_CommonApParameters params;
1740
1740
cbWLAN_WPAPSKApParameters wpa_params;
1741
1741
1742
+ static cbWLAN_Handle handle = cbWLAN_DEFAULT_HANDLE;
1743
+
1742
1744
char temp_passphrase[cbWLAN_MAX_PASSPHRASE_LENGTH];
1743
1745
1744
1746
memset (¶ms, 0 , sizeof (cbWLAN_CommonApParameters));
@@ -1793,7 +1795,7 @@ nsapi_error_t OdinWiFiInterface::wlan_ap_start(
1793
1795
error_code = NSAPI_ERROR_UNSUPPORTED;
1794
1796
}
1795
1797
}
1796
-
1798
+ _ap. handle = handle;
1797
1799
return error_code;
1798
1800
}
1799
1801
@@ -1832,14 +1834,16 @@ void OdinWiFiInterface::wlan_scan_indication(cbWLAN_ScanIndicationInfo *scan_inf
1832
1834
1833
1835
void OdinWiFiInterface::wlan_status_indication (cbWLAN_StatusIndicationInfo status, void *data)
1834
1836
{
1835
- struct odin_wifi_msg_s * msg = _msg_pool->alloc ();
1836
- MBED_ASSERT (msg != NULL );
1837
+ if (!flush_drvr_ind_pkts) {
1838
+ struct odin_wifi_msg_s * msg = _msg_pool->alloc ();
1839
+ MBED_ASSERT (msg != NULL );
1837
1840
1838
- msg->type = status;
1839
- 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 ));
1840
1843
1841
- osStatus ok = _in_queue.put (msg, 0 );
1842
- MBED_ASSERT (ok == osOK);
1844
+ osStatus ok = _in_queue.put (msg, 0 );
1845
+ MBED_ASSERT (ok == osOK);
1846
+ }
1843
1847
}
1844
1848
1845
1849
static nsapi_security_t convertToNSAPI_security (cbWLAN_AuthenticationSuite authSuit)
0 commit comments