@@ -78,8 +78,9 @@ typedef struct _wlan_obj_t {
78
78
mp_obj_base_t base ;
79
79
SlWlanMode_t mode ;
80
80
uint32_t status ;
81
- uint8_t macAddr [SL_MAC_ADDR_LEN ];
82
- uint8_t ssid_name [33 ];
81
+ uint8_t security ;
82
+ uint8_t mac [SL_MAC_ADDR_LEN ];
83
+ uint8_t ssid [33 ];
83
84
uint8_t bssid [6 ];
84
85
85
86
// IPVv4 data
@@ -186,7 +187,7 @@ void SimpleLinkWlanEventHandler(SlWlanEvent_t *pWlanEvent)
186
187
slWlanConnectAsyncResponse_t * pEventData = & pWlanEvent -> EventData .STAandP2PModeWlanConnected ;
187
188
188
189
// Copy new connection SSID and BSSID to global parameters
189
- memcpy (wlan_obj .ssid_name , pEventData -> ssid_name , pEventData -> ssid_len );
190
+ memcpy (wlan_obj .ssid , pEventData -> ssid_name , pEventData -> ssid_len );
190
191
memcpy (wlan_obj .bssid , pEventData -> bssid , SL_BSSID_LENGTH );
191
192
}
192
193
break ;
@@ -207,7 +208,7 @@ void SimpleLinkWlanEventHandler(SlWlanEvent_t *pWlanEvent)
207
208
else {
208
209
209
210
}
210
- memset (wlan_obj .ssid_name , 0 , sizeof (wlan_obj .ssid_name ));
211
+ memset (wlan_obj .ssid , 0 , sizeof (wlan_obj .ssid ));
211
212
memset (wlan_obj .bssid , 0 , sizeof (wlan_obj .bssid ));
212
213
}
213
214
break ;
@@ -253,7 +254,7 @@ void SimpleLinkNetAppEventHandler(SlNetAppEvent_t *pNetAppEvent)
253
254
// Ip Acquired Event Data
254
255
pEventData = & pNetAppEvent -> EventData .ipAcquiredV4 ;
255
256
256
- // Get the IP addresses
257
+ // Get ip, gateway and dns
257
258
wlan_obj .gateway = ntohl (pEventData -> gateway );
258
259
wlan_obj .ip = ntohl (pEventData -> ip );
259
260
wlan_obj .dns = ntohl (pEventData -> dns );
@@ -348,7 +349,7 @@ void wlan_init0 (void) {
348
349
// Set the mode to an invalid one
349
350
wlan_obj .mode = -1 ;
350
351
wlan_obj .base .type = NULL ;
351
- memset (wlan_obj .macAddr , 0 , SL_MAC_ADDR_LEN );
352
+ memset (wlan_obj .mac , 0 , SL_MAC_ADDR_LEN );
352
353
ASSERT (OSI_OK == sl_LockObjCreate (& wlan_LockObj , "WlanLock" ));
353
354
wlan_initialize_data ();
354
355
}
@@ -398,6 +399,7 @@ modwlan_Status_t wlan_sl_enable (SlWlanMode_t mode, const char *ssid, uint8_t ss
398
399
399
400
// clear wlan data after checking any of the status flags
400
401
wlan_initialize_data ();
402
+ wlan_obj .security = sec ;
401
403
402
404
// Set connection policy to Auto + SmartConfig (Device's default connection policy)
403
405
ASSERT_ON_ERROR (sl_WlanPolicySet (SL_POLICY_CONNECTION , SL_CONNECTION_POLICY (1 , 0 , 0 , 0 , 1 ), NULL , 0 ));
@@ -434,7 +436,7 @@ modwlan_Status_t wlan_sl_enable (SlWlanMode_t mode, const char *ssid, uint8_t ss
434
436
ASSERT_ON_ERROR (sl_WlanSet (SL_WLAN_CFG_GENERAL_PARAM_ID , WLAN_GENERAL_PARAM_OPT_AP_TX_POWER , sizeof (ucPower ),
435
437
(unsigned char * )& ucPower ));
436
438
ASSERT_ON_ERROR (sl_WlanSet (SL_WLAN_CFG_AP_ID , WLAN_AP_OPT_SSID , ssid_len , (unsigned char * )ssid ));
437
- memcpy (wlan_obj .ssid_name , (unsigned char * )ssid , ssid_len );
439
+ memcpy (wlan_obj .ssid , (unsigned char * )ssid , ssid_len );
438
440
ASSERT_ON_ERROR (sl_WlanSet (SL_WLAN_CFG_AP_ID , WLAN_AP_OPT_SECURITY_TYPE , sizeof (uint8_t ), & sec ));
439
441
ASSERT_ON_ERROR (sl_WlanSet (SL_WLAN_CFG_AP_ID , WLAN_AP_OPT_PASSWORD , key_len , (unsigned char * )key ));
440
442
_u8 * country = (_u8 * )"EU" ;
@@ -491,21 +493,31 @@ void wlan_update(void) {
491
493
#endif
492
494
}
493
495
494
- void wlan_sl_disable (void ) {
496
+ // call this function to disable the complete WLAN subsystem in order to save power
497
+ void wlan_stop (void ) {
495
498
if (wlan_obj .mode >= 0 ) {
496
499
sl_LockObjLock (& wlan_LockObj , SL_OS_WAIT_FOREVER );
497
500
wlan_obj .mode = -1 ;
498
501
sl_Stop (SL_STOP_TIMEOUT );
499
502
}
500
503
}
501
504
505
+ // cal this function to reenable the WLAN susbsystem after a previous call to wlan_sl_disable()
506
+ // WLAN will remain configured as it was before being disabled
507
+ void wlan_start (void ) {
508
+ if (wlan_obj .mode < 0 ) {
509
+ wlan_obj .mode = sl_Start (0 , 0 , 0 );
510
+ sl_LockObjUnlock (& wlan_LockObj );
511
+ }
512
+ }
513
+
502
514
SlWlanMode_t wlan_get_mode (void ) {
503
515
return wlan_obj .mode ;
504
516
}
505
517
506
518
void wlan_get_mac (uint8_t * macAddress ) {
507
519
if (macAddress ) {
508
- memcpy (macAddress , wlan_obj .macAddr , SL_MAC_ADDR_LEN );
520
+ memcpy (macAddress , wlan_obj .mac , SL_MAC_ADDR_LEN );
509
521
}
510
522
}
511
523
@@ -519,7 +531,7 @@ void wlan_set_pm_policy (uint8_t policy) {
519
531
ASSERT_ON_ERROR (sl_WlanPolicySet (SL_POLICY_PM , policy , NULL , 0 ));
520
532
}
521
533
522
- void wlan_servers_stop (void ) {
534
+ void wlan_stop_servers (void ) {
523
535
servers_disable ();
524
536
do {
525
537
HAL_Delay (5 );
@@ -535,7 +547,8 @@ STATIC void wlan_initialize_data (void) {
535
547
wlan_obj .dns = 0 ;
536
548
wlan_obj .gateway = 0 ;
537
549
wlan_obj .ip = 0 ;
538
- memset (wlan_obj .ssid_name , 0 , sizeof (wlan_obj .ssid_name ));
550
+ wlan_obj .security = SL_SEC_TYPE_OPEN ;
551
+ memset (wlan_obj .ssid , 0 , sizeof (wlan_obj .ssid ));
539
552
memset (wlan_obj .bssid , 0 , sizeof (wlan_obj .bssid ));
540
553
}
541
554
@@ -549,8 +562,8 @@ STATIC void wlan_reenable (SlWlanMode_t mode) {
549
562
ASSERT (wlan_obj .mode == mode );
550
563
}
551
564
552
- STATIC modwlan_Status_t wlan_do_connect (const char * ssid , uint32_t ssid_len , const char * bssid , uint8_t sec , const char * key , uint32_t key_len )
553
- {
565
+ STATIC modwlan_Status_t wlan_do_connect (const char * ssid , uint32_t ssid_len , const char * bssid , uint8_t sec ,
566
+ const char * key , uint32_t key_len ) {
554
567
SlSecParams_t secParams ;
555
568
556
569
secParams .Key = (_i8 * )key ;
@@ -580,7 +593,7 @@ STATIC modwlan_Status_t wlan_do_connect (const char* ssid, uint32_t ssid_len, co
580
593
STATIC void wlan_get_sl_mac (void ) {
581
594
// Get the MAC address
582
595
uint8_t macAddrLen = SL_MAC_ADDR_LEN ;
583
- sl_NetCfgGet (SL_MAC_ADDRESS_GET ,NULL , & macAddrLen , wlan_obj .macAddr );
596
+ sl_NetCfgGet (SL_MAC_ADDRESS_GET , NULL , & macAddrLen , wlan_obj .mac );
584
597
}
585
598
586
599
/// \method init(mode, ssid=myWlan, security=wlan.WPA_WPA2, key=myWlanKey)
@@ -647,7 +660,7 @@ STATIC mp_obj_t wlan_make_new (mp_obj_t type_in, mp_uint_t n_args, mp_uint_t n_k
647
660
// Stop all other processes using the wlan engine
648
661
bool servers_enabled ;
649
662
if ( (servers_enabled = servers_are_enabled ()) ) {
650
- wlan_servers_stop ();
663
+ wlan_stop_servers ();
651
664
}
652
665
if (mode == ROLE_AP ) {
653
666
// start the peripheral
@@ -682,34 +695,17 @@ STATIC mp_obj_t wlan_make_new (mp_obj_t type_in, mp_uint_t n_args, mp_uint_t n_k
682
695
683
696
STATIC void wlan_print (void (* print )(void * env , const char * fmt , ...), void * env , mp_obj_t self_in , mp_print_kind_t kind ) {
684
697
wlan_obj_t * self = self_in ;
685
- print (env , "wlan(mode=%u, status=%u" , self -> mode , self -> status );
686
- print (env , ", mac=%02x:%02x:%02x:%02x:%02x:%02x" , self -> macAddr [0 ], self -> macAddr [1 ], self -> macAddr [2 ],
687
- self -> macAddr [3 ], self -> macAddr [4 ], self -> macAddr [5 ]);
688
-
689
- // Only print the ssid if in station or ap mode
690
- if (self -> mode == ROLE_STA || self -> mode == ROLE_AP ) {
691
- print (env , ", ssid=%s" , self -> ssid_name );
692
-
693
- // Only print the bssid if in station mode
694
- if (self -> mode == ROLE_STA ) {
695
- print (env , ", bssid=%02x:%02x:%02x:%02x:%02x:%02x" , self -> bssid [0 ], self -> bssid [1 ], self -> bssid [2 ],
696
- self -> bssid [3 ], self -> bssid [4 ], self -> bssid [5 ]);
697
- }
698
+ print (env , "<WLAN mode=%u" , self -> mode );
698
699
699
- char ip_str [IPV4_ADDR_STR_LEN_MAX ];
700
- uint8_t * ip = (uint8_t * )& self -> ip ;
701
- snprintf (ip_str , 16 , "%u.%u.%u.%u" , ip [0 ], ip [1 ], ip [2 ], ip [3 ]);
702
- print (env , ", ip=%s" , ip_str );
703
- ip = (uint8_t * )& self -> gateway ;
704
- snprintf (ip_str , 16 , "%u.%u.%u.%u" , ip [0 ], ip [1 ], ip [2 ], ip [3 ]);
705
- print (env , ", gateway=%s" , ip_str );
706
- ip = (uint8_t * )& self -> dns ;
707
- snprintf (ip_str , 16 , "%u.%u.%u.%u" , ip [0 ], ip [1 ], ip [2 ], ip [3 ]);
708
- print (env , ", dns=%s)" , ip_str );
700
+ // only print the bssid if in station mode
701
+ if (self -> mode != ROLE_AP && GET_STATUS_BIT (self -> status , STATUS_BIT_CONNECTION )) {
702
+ print (env , ", connected to: ssid=%s, bssid=%02x:%02x:%02x:%02x:%02x:%02x" , self -> ssid ,
703
+ self -> bssid [0 ], self -> bssid [1 ], self -> bssid [2 ], self -> bssid [3 ], self -> bssid [4 ], self -> bssid [5 ]);
709
704
}
710
705
else {
711
- print (env , ")" );
706
+ print (env , ", ssid=%s" , self -> ssid );
712
707
}
708
+ print (env , ", security=%u>" , self -> security );
713
709
}
714
710
715
711
/// \method mode()
@@ -803,6 +799,7 @@ STATIC mp_obj_t wlan_connect(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_
803
799
else if (status == MODWLAN_ERROR_INVALID_PARAMS ) {
804
800
nlr_raise (mp_obj_new_exception_msg (& mp_type_ValueError , mpexception_value_invalid_arguments ));
805
801
}
802
+ wlan_obj .security = sec ;
806
803
807
804
return mp_const_none ;
808
805
}
@@ -829,20 +826,41 @@ STATIC mp_obj_t wlan_isconnected(mp_obj_t self_in) {
829
826
}
830
827
STATIC MP_DEFINE_CONST_FUN_OBJ_1 (wlan_isconnected_obj , wlan_isconnected );
831
828
832
- /// \method getip()
833
- /// return the ip address or None if not connected
834
- ///
835
- STATIC mp_obj_t wlan_getip (mp_obj_t self_in ) {
836
- uint32_t ip ;
837
- wlan_get_ip (& ip );
838
- if (ip ) {
839
- return mod_network_format_ipv4_addr ((uint8_t * )& ip );
829
+ STATIC mp_obj_t wlan_ifconfig (mp_obj_t self_in ) {
830
+
831
+ unsigned char len = sizeof (SlNetCfgIpV4Args_t );
832
+ unsigned char dhcpIsOn ;
833
+ SlNetCfgIpV4Args_t ipV4 ;
834
+
835
+ sl_NetCfgGet (SL_IPV4_STA_P2P_CL_GET_INFO , & dhcpIsOn , & len , (uint8_t * )& ipV4 );
836
+ // shift byte order
837
+ ipV4 .ipV4Mask = ntohl (ipV4 .ipV4Mask );
838
+
839
+ mp_obj_t ifconfig = mp_obj_new_dict (0 );
840
+ mp_obj_dict_store (ifconfig , mp_obj_new_str ("ip" , strlen ("ip" ), false), mod_network_format_ipv4_addr ((uint8_t * )& wlan_obj .ip ));
841
+ mp_obj_dict_store (ifconfig , mp_obj_new_str ("subnet" , strlen ("subnet" ), false), mod_network_format_ipv4_addr ((uint8_t * )& ipV4 .ipV4Mask ));
842
+ mp_obj_dict_store (ifconfig , mp_obj_new_str ("gateway" , strlen ("gateway" ), false), mod_network_format_ipv4_addr ((uint8_t * )& wlan_obj .gateway ));
843
+ mp_obj_dict_store (ifconfig , mp_obj_new_str ("dns" , strlen ("dns" ), false), mod_network_format_ipv4_addr ((uint8_t * )& wlan_obj .dns ));
844
+ char mac_str [18 ];
845
+ mp_uint_t mac_len = snprintf (mac_str , sizeof (mac_str ), "%02x:%02x:%02x:%02x:%02x:%02x" , wlan_obj .mac [0 ], wlan_obj .mac [1 ], wlan_obj .mac [2 ],
846
+ wlan_obj .mac [3 ], wlan_obj .mac [4 ], wlan_obj .mac [5 ]);
847
+ mp_obj_dict_store (ifconfig , mp_obj_new_str ("mac" , strlen ("mac" ), false), mp_obj_new_str (mac_str , mac_len , false));
848
+ char * mode_str ;
849
+ if (wlan_obj .mode == ROLE_STA ) {
850
+ mode_str = "station" ;
851
+ }
852
+ else if (wlan_obj .mode == ROLE_AP ) {
853
+ mode_str = "ap" ;
840
854
}
841
855
else {
842
- return mp_const_none ;
856
+ mode_str = "p2p" ;
843
857
}
858
+ mp_obj_dict_store (ifconfig , mp_obj_new_str ("mode" , strlen ("mode" ), false), mp_obj_new_str (mode_str , strlen (mode_str ), false));
859
+ mp_obj_dict_store (ifconfig , mp_obj_new_str ("ssid" , strlen ("ssid" ), false), mp_obj_new_str ((const char * )wlan_obj .ssid , strlen ((const char * )wlan_obj .ssid ), false));
860
+
861
+ return ifconfig ;
844
862
}
845
- STATIC MP_DEFINE_CONST_FUN_OBJ_1 (wlan_getip_obj , wlan_getip );
863
+ STATIC MP_DEFINE_CONST_FUN_OBJ_1 (wlan_ifconfig_obj , wlan_ifconfig );
846
864
847
865
STATIC mp_obj_t wlan_urn (uint n_args , const mp_obj_t * args ) {
848
866
char urn [MAX_DEVICE_URN_LEN ];
@@ -917,15 +935,15 @@ STATIC mp_obj_t wlan_serversstart(mp_obj_t self_in) {
917
935
STATIC MP_DEFINE_CONST_FUN_OBJ_1 (wlan_serversstart_obj , wlan_serversstart );
918
936
919
937
STATIC mp_obj_t wlan_serversstop (mp_obj_t self_in ) {
920
- wlan_servers_stop ();
938
+ wlan_stop_servers ();
921
939
return mp_const_none ;
922
940
}
923
941
STATIC MP_DEFINE_CONST_FUN_OBJ_1 (wlan_serversstop_obj , wlan_serversstop );
924
942
925
- STATIC mp_obj_t wlan_areserversenabled (mp_obj_t self_in ) {
943
+ STATIC mp_obj_t wlan_serversenabled (mp_obj_t self_in ) {
926
944
return MP_BOOL (servers_are_enabled ());
927
945
}
928
- STATIC MP_DEFINE_CONST_FUN_OBJ_1 (wlan_areserversenabled_obj , wlan_areserversenabled );
946
+ STATIC MP_DEFINE_CONST_FUN_OBJ_1 (wlan_serversenabled_obj , wlan_serversenabled );
929
947
930
948
STATIC mp_obj_t wlan_serversuserpass (mp_obj_t self_in , mp_obj_t user , mp_obj_t pass ) {
931
949
const char * _user = mp_obj_str_get_str (user );
@@ -937,16 +955,16 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_3(wlan_serversuserpass_obj, wlan_serversuserpass)
937
955
938
956
STATIC const mp_map_elem_t wlan_locals_dict_table [] = {
939
957
{ MP_OBJ_NEW_QSTR (MP_QSTR_connect ), (mp_obj_t )& wlan_connect_obj },
940
- { MP_OBJ_NEW_QSTR (MP_QSTR_get_mode ), (mp_obj_t )& wlan_getmode_obj },
941
- { MP_OBJ_NEW_QSTR (MP_QSTR_set_pm ), (mp_obj_t )& wlan_setpm_obj },
958
+ { MP_OBJ_NEW_QSTR (MP_QSTR_getmode ), (mp_obj_t )& wlan_getmode_obj },
959
+ { MP_OBJ_NEW_QSTR (MP_QSTR_setpm ), (mp_obj_t )& wlan_setpm_obj },
942
960
{ MP_OBJ_NEW_QSTR (MP_QSTR_scan ), (mp_obj_t )& wlan_scan_obj },
943
961
{ MP_OBJ_NEW_QSTR (MP_QSTR_disconnect ), (mp_obj_t )& wlan_disconnect_obj },
944
- { MP_OBJ_NEW_QSTR (MP_QSTR_is_connected ), (mp_obj_t )& wlan_isconnected_obj },
945
- { MP_OBJ_NEW_QSTR (MP_QSTR_get_ip ), (mp_obj_t )& wlan_getip_obj },
962
+ { MP_OBJ_NEW_QSTR (MP_QSTR_isconnected ), (mp_obj_t )& wlan_isconnected_obj },
963
+ { MP_OBJ_NEW_QSTR (MP_QSTR_ifconfig ), (mp_obj_t )& wlan_ifconfig_obj },
946
964
{ MP_OBJ_NEW_QSTR (MP_QSTR_urn ), (mp_obj_t )& wlan_urn_obj },
947
965
{ MP_OBJ_NEW_QSTR (MP_QSTR_start_servers ), (mp_obj_t )& wlan_serversstart_obj },
948
966
{ MP_OBJ_NEW_QSTR (MP_QSTR_stop_servers ), (mp_obj_t )& wlan_serversstop_obj },
949
- { MP_OBJ_NEW_QSTR (MP_QSTR_are_servers_enabled ), (mp_obj_t )& wlan_areserversenabled_obj },
967
+ { MP_OBJ_NEW_QSTR (MP_QSTR_servers_enabled ), (mp_obj_t )& wlan_serversenabled_obj },
950
968
{ MP_OBJ_NEW_QSTR (MP_QSTR_servers_userpass ), (mp_obj_t )& wlan_serversuserpass_obj },
951
969
952
970
// class constants
0 commit comments