@@ -158,15 +158,15 @@ struct wlan_callb_s {
158158bool OdinWiFiInterface::_wlan_initialized = false ;
159159int32_t OdinWiFiInterface::_target_id = cbMAIN_TARGET_INVALID_ID;
160160
161- OdinWiFiInterface::OdinWiFiInterface (OdinWiFiEMAC &emac , OnboardNetworkStack &stack) :
162- EMACInterface(emac , stack),
161+ OdinWiFiInterface::OdinWiFiInterface (OdinWiFiEMAC &emac_obj , OnboardNetworkStack &stack) :
162+ EMACInterface(emac_obj , stack),
163163 _thread(osPriorityNormal, 4096 )
164164{
165165 init (false );
166166}
167167
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),
170170 _thread(osPriorityNormal, 4096 )
171171{
172172 init (debug);
@@ -386,7 +386,7 @@ nsapi_error_t OdinWiFiInterface::connect(
386386 return NSAPI_ERROR_PARAMETER;
387387 }
388388
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 )) {
390390 return NSAPI_ERROR_PARAMETER;
391391 }
392392
@@ -757,7 +757,7 @@ OdinWiFiInterface::OdinWifiState OdinWiFiInterface::entry_connect_fail_wait_disc
757757 cbRTSL_Status error_code;
758758
759759 cbMAIN_driverLock ();
760- error_code = cbWLAN_disconnect (handle);
760+ error_code = cbWLAN_disconnect (_wlan_status_connected_info. handle );
761761 cbMAIN_driverUnlock ();
762762
763763 MBED_ASSERT (error_code == cbSTATUS_OK);
@@ -778,7 +778,7 @@ OdinWiFiInterface::OdinWifiState OdinWiFiInterface::entry_wait_disconnect()
778778 cbRTSL_Status error_code;
779779
780780 cbMAIN_driverLock ();
781- error_code = cbWLAN_disconnect (handle);
781+ error_code = cbWLAN_disconnect (_wlan_status_disconnected_info. handle );
782782 cbMAIN_driverUnlock ();
783783
784784 MBED_ASSERT (error_code == cbSTATUS_OK);
@@ -802,7 +802,7 @@ OdinWiFiInterface::OdinWifiState OdinWiFiInterface::entry_ap_started()
802802OdinWiFiInterface::OdinWifiState OdinWiFiInterface::entry_ap_wait_stop ()
803803{
804804 cbMAIN_driverLock ();
805- cbRTSL_Status status = cbWLAN_apStop (handle);
805+ cbRTSL_Status status = cbWLAN_apStop (_ap. handle );
806806 cbMAIN_driverUnlock ();
807807
808808 MBED_ASSERT (status == cbSTATUS_OK);
@@ -813,7 +813,7 @@ OdinWiFiInterface::OdinWifiState OdinWiFiInterface::entry_ap_wait_stop()
813813OdinWiFiInterface::OdinWifiState OdinWiFiInterface::entry_ap_fail_wait_stop ()
814814{
815815 cbMAIN_driverLock ();
816- cbRTSL_Status status = cbWLAN_apStop (handle);
816+ cbRTSL_Status status = cbWLAN_apStop (_ap. handle );
817817 cbMAIN_driverUnlock ();
818818
819819 MBED_ASSERT (status == cbSTATUS_OK);
@@ -917,7 +917,9 @@ void OdinWiFiInterface::handle_in_msg(void)
917917 break ;
918918
919919 case cbWLAN_STATUS_CONNECTED:
920+ flush_drvr_ind_pkts = true ;
920921 handle_wlan_status_connected (&(msg->data .wlan_status_connected ));
922+ flush_drvr_ind_pkts = false ;
921923 break ;
922924
923925 case cbWLAN_SCAN_INDICATION:
@@ -1024,11 +1026,6 @@ void OdinWiFiInterface::handle_user_connect(user_connect_s *user_connect)
10241026 }
10251027
10261028 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-
10321029 _state_sta = entry_wait_connect ();
10331030 }
10341031 else
@@ -1045,6 +1042,7 @@ void OdinWiFiInterface::handle_user_disconnect(void)
10451042 switch (_state_sta) {
10461043 case S_STA_CONNECTED:
10471044 case S_STA_DISCONNECTED_WAIT_CONNECT:
1045+ emac.set_wifi_emac_handle (_wlan_status_disconnected_info.handle );
10481046 _state_sta = entry_wait_disconnect ();
10491047 break ;
10501048
@@ -1123,6 +1121,7 @@ void OdinWiFiInterface::handle_user_connect_timeout()
11231121 }
11241122 _timer.stop ();
11251123
1124+ emac.set_wifi_emac_handle (_wlan_status_connected_info.handle );
11261125 _state_sta = entry_connect_fail_wait_disconnect ();
11271126 }
11281127 }
@@ -1314,9 +1313,10 @@ void OdinWiFiInterface::handle_wlan_status_connected(wlan_status_connected_s *wl
13141313 _gateway[0 ] ? _gateway : 0 ,
13151314 DEFAULT_STACK);
13161315
1316+ memcpy (&_wlan_status_connected_info, &(wlan_connect->info ), sizeof (cbWLAN_StatusConnectedInfo));
1317+ emac.set_wifi_emac_handle (_wlan_status_connected_info.handle );
13171318
13181319 if (error_code == NSAPI_ERROR_OK || error_code == NSAPI_ERROR_IS_CONNECTED) {
1319- memcpy (&_wlan_status_connected_info, &(wlan_connect->info ), sizeof (cbWLAN_StatusConnectedInfo));
13201320 if (_state_sta != S_STA_CONNECTED){
13211321 _state_sta = S_STA_CONNECTED;
13221322 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
13511351 }
13521352
13531353 memcpy (&_wlan_status_disconnected_info, &(connect_failure->info ), sizeof (cbWLAN_StatusDisconnectedInfo));
1354+ emac.set_wifi_emac_handle (_wlan_status_disconnected_info.handle );
13541355
13551356 switch (_state_sta) {
13561357 case S_STA_WAIT_CONNECT:
@@ -1383,7 +1384,7 @@ void OdinWiFiInterface::handle_wlan_status_connection_failure(wlan_status_connec
13831384
13841385void OdinWiFiInterface::handle_wlan_status_disconnected (void )
13851386{
1386- nsapi_error_t error_code;
1387+ nsapi_error_t error_code = NSAPI_ERROR_OK ;
13871388
13881389 if (_debug) {
13891390 printf (" WLAN STATUS DISCONNECTED\r\n " );
@@ -1404,24 +1405,19 @@ void OdinWiFiInterface::handle_wlan_status_disconnected(void)
14041405
14051406 case S_STA_CONNECTION_FAIL_WAIT_DISCONNECT:
14061407 _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 ;
14251421 }
14261422 send_user_response_msg (ODIN_WIFI_MSG_USER_CONNECT, error_code);
14271423 break ;
@@ -1564,6 +1560,9 @@ void OdinWiFiInterface::init(bool debug = false)
15641560 memset (_mac_addr_str, 0 , ODIN_WIFI_MAX_MAC_ADDR_STR);
15651561 memset (&_wlan_status_connected_info, 0 , sizeof (cbWLAN_StatusConnectedInfo));
15661562 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;
15671566
15681567 _msg_pool = new MemoryPool<odin_wifi_msg_s, 11 >();
15691568
@@ -1655,6 +1654,7 @@ nsapi_error_t OdinWiFiInterface::wlan_connect(
16551654 cbRTSL_Status status = cbSTATUS_OK;
16561655 cbWLAN_CommonConnectParameters connect_params;
16571656 cbWLAN_EnterpriseConnectParameters enterpriseParams;
1657+ static cbWLAN_Handle handle = cbWLAN_DEFAULT_HANDLE;
16581658
16591659 memset (&enterpriseParams, 0 , sizeof (cbWLAN_EnterpriseConnectParameters));
16601660 memset (&connect_params, 0 , sizeof (cbWLAN_CommonConnectParameters));
@@ -1739,6 +1739,8 @@ nsapi_error_t OdinWiFiInterface::wlan_ap_start(
17391739 cbWLAN_CommonApParameters params;
17401740 cbWLAN_WPAPSKApParameters wpa_params;
17411741
1742+ static cbWLAN_Handle handle = cbWLAN_DEFAULT_HANDLE;
1743+
17421744 char temp_passphrase[cbWLAN_MAX_PASSPHRASE_LENGTH];
17431745
17441746 memset (¶ms, 0 , sizeof (cbWLAN_CommonApParameters));
@@ -1793,7 +1795,7 @@ nsapi_error_t OdinWiFiInterface::wlan_ap_start(
17931795 error_code = NSAPI_ERROR_UNSUPPORTED;
17941796 }
17951797 }
1796-
1798+ _ap. handle = handle;
17971799 return error_code;
17981800}
17991801
@@ -1832,14 +1834,16 @@ void OdinWiFiInterface::wlan_scan_indication(cbWLAN_ScanIndicationInfo *scan_inf
18321834
18331835void OdinWiFiInterface::wlan_status_indication (cbWLAN_StatusIndicationInfo status, void *data)
18341836{
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 );
18371840
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 ));
18401843
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+ }
18431847}
18441848
18451849static nsapi_security_t convertToNSAPI_security (cbWLAN_AuthenticationSuite authSuit)
0 commit comments