Skip to content

Commit 88b7f52

Browse files
committed
cc3200: Replace WLAN.get_ip() with WLAN.ifconfig().
Also change other methods' names to make them consistent.
1 parent 626ee90 commit 88b7f52

File tree

5 files changed

+88
-70
lines changed

5 files changed

+88
-70
lines changed

cc3200/mods/modpyb.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ extern OsiTaskHandle xSimpleLinkSpawnTaskHndl;
7777
/// button.
7878
STATIC mp_obj_t pyb_hard_reset(void) {
7979
// disable wlan services
80-
wlan_servers_stop();
81-
wlan_sl_disable();
80+
wlan_stop_servers();
81+
wlan_stop();
8282
// perform a SoC reset
8383
PRCMSOCReset();
8484
return mp_const_none;

cc3200/mods/modwlan.c

+75-57
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,9 @@ typedef struct _wlan_obj_t {
7878
mp_obj_base_t base;
7979
SlWlanMode_t mode;
8080
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];
8384
uint8_t bssid[6];
8485

8586
// IPVv4 data
@@ -186,7 +187,7 @@ void SimpleLinkWlanEventHandler(SlWlanEvent_t *pWlanEvent)
186187
slWlanConnectAsyncResponse_t *pEventData = &pWlanEvent->EventData.STAandP2PModeWlanConnected;
187188

188189
// 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);
190191
memcpy(wlan_obj.bssid, pEventData->bssid, SL_BSSID_LENGTH);
191192
}
192193
break;
@@ -207,7 +208,7 @@ void SimpleLinkWlanEventHandler(SlWlanEvent_t *pWlanEvent)
207208
else {
208209

209210
}
210-
memset(wlan_obj.ssid_name, 0, sizeof(wlan_obj.ssid_name));
211+
memset(wlan_obj.ssid, 0, sizeof(wlan_obj.ssid));
211212
memset(wlan_obj.bssid, 0, sizeof(wlan_obj.bssid));
212213
}
213214
break;
@@ -253,7 +254,7 @@ void SimpleLinkNetAppEventHandler(SlNetAppEvent_t *pNetAppEvent)
253254
// Ip Acquired Event Data
254255
pEventData = &pNetAppEvent->EventData.ipAcquiredV4;
255256

256-
// Get the IP addresses
257+
// Get ip, gateway and dns
257258
wlan_obj.gateway = ntohl(pEventData->gateway);
258259
wlan_obj.ip = ntohl(pEventData->ip);
259260
wlan_obj.dns = ntohl(pEventData->dns);
@@ -348,7 +349,7 @@ void wlan_init0 (void) {
348349
// Set the mode to an invalid one
349350
wlan_obj.mode = -1;
350351
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);
352353
ASSERT(OSI_OK == sl_LockObjCreate(&wlan_LockObj, "WlanLock"));
353354
wlan_initialize_data ();
354355
}
@@ -398,6 +399,7 @@ modwlan_Status_t wlan_sl_enable (SlWlanMode_t mode, const char *ssid, uint8_t ss
398399

399400
// clear wlan data after checking any of the status flags
400401
wlan_initialize_data ();
402+
wlan_obj.security = sec;
401403

402404
// Set connection policy to Auto + SmartConfig (Device's default connection policy)
403405
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
434436
ASSERT_ON_ERROR(sl_WlanSet(SL_WLAN_CFG_GENERAL_PARAM_ID, WLAN_GENERAL_PARAM_OPT_AP_TX_POWER, sizeof(ucPower),
435437
(unsigned char *)&ucPower));
436438
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);
438440
ASSERT_ON_ERROR(sl_WlanSet(SL_WLAN_CFG_AP_ID, WLAN_AP_OPT_SECURITY_TYPE, sizeof(uint8_t), &sec));
439441
ASSERT_ON_ERROR(sl_WlanSet(SL_WLAN_CFG_AP_ID, WLAN_AP_OPT_PASSWORD, key_len, (unsigned char *)key));
440442
_u8* country = (_u8*)"EU";
@@ -491,21 +493,31 @@ void wlan_update(void) {
491493
#endif
492494
}
493495

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) {
495498
if (wlan_obj.mode >= 0) {
496499
sl_LockObjLock (&wlan_LockObj, SL_OS_WAIT_FOREVER);
497500
wlan_obj.mode = -1;
498501
sl_Stop(SL_STOP_TIMEOUT);
499502
}
500503
}
501504

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+
502514
SlWlanMode_t wlan_get_mode (void) {
503515
return wlan_obj.mode;
504516
}
505517

506518
void wlan_get_mac (uint8_t *macAddress) {
507519
if (macAddress) {
508-
memcpy (macAddress, wlan_obj.macAddr, SL_MAC_ADDR_LEN);
520+
memcpy (macAddress, wlan_obj.mac, SL_MAC_ADDR_LEN);
509521
}
510522
}
511523

@@ -519,7 +531,7 @@ void wlan_set_pm_policy (uint8_t policy) {
519531
ASSERT_ON_ERROR(sl_WlanPolicySet(SL_POLICY_PM, policy, NULL, 0));
520532
}
521533

522-
void wlan_servers_stop (void) {
534+
void wlan_stop_servers (void) {
523535
servers_disable();
524536
do {
525537
HAL_Delay (5);
@@ -535,7 +547,8 @@ STATIC void wlan_initialize_data (void) {
535547
wlan_obj.dns = 0;
536548
wlan_obj.gateway = 0;
537549
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));
539552
memset(wlan_obj.bssid, 0, sizeof(wlan_obj.bssid));
540553
}
541554

@@ -549,8 +562,8 @@ STATIC void wlan_reenable (SlWlanMode_t mode) {
549562
ASSERT (wlan_obj.mode == mode);
550563
}
551564

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) {
554567
SlSecParams_t secParams;
555568

556569
secParams.Key = (_i8*)key;
@@ -580,7 +593,7 @@ STATIC modwlan_Status_t wlan_do_connect (const char* ssid, uint32_t ssid_len, co
580593
STATIC void wlan_get_sl_mac (void) {
581594
// Get the MAC address
582595
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);
584597
}
585598

586599
/// \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
647660
// Stop all other processes using the wlan engine
648661
bool servers_enabled;
649662
if ( (servers_enabled = servers_are_enabled()) ) {
650-
wlan_servers_stop();
663+
wlan_stop_servers();
651664
}
652665
if (mode == ROLE_AP) {
653666
// 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
682695

683696
STATIC void wlan_print(void (*print)(void *env, const char *fmt, ...), void *env, mp_obj_t self_in, mp_print_kind_t kind) {
684697
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);
698699

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]);
709704
}
710705
else {
711-
print(env, ")");
706+
print(env, ", ssid=%s", self->ssid);
712707
}
708+
print(env, ", security=%u>", self->security);
713709
}
714710

715711
/// \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_
803799
else if (status == MODWLAN_ERROR_INVALID_PARAMS) {
804800
nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, mpexception_value_invalid_arguments));
805801
}
802+
wlan_obj.security = sec;
806803

807804
return mp_const_none;
808805
}
@@ -829,20 +826,41 @@ STATIC mp_obj_t wlan_isconnected(mp_obj_t self_in) {
829826
}
830827
STATIC MP_DEFINE_CONST_FUN_OBJ_1(wlan_isconnected_obj, wlan_isconnected);
831828

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";
840854
}
841855
else {
842-
return mp_const_none;
856+
mode_str = "p2p";
843857
}
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;
844862
}
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);
846864

847865
STATIC mp_obj_t wlan_urn (uint n_args, const mp_obj_t *args) {
848866
char urn[MAX_DEVICE_URN_LEN];
@@ -917,15 +935,15 @@ STATIC mp_obj_t wlan_serversstart(mp_obj_t self_in) {
917935
STATIC MP_DEFINE_CONST_FUN_OBJ_1(wlan_serversstart_obj, wlan_serversstart);
918936

919937
STATIC mp_obj_t wlan_serversstop(mp_obj_t self_in) {
920-
wlan_servers_stop();
938+
wlan_stop_servers();
921939
return mp_const_none;
922940
}
923941
STATIC MP_DEFINE_CONST_FUN_OBJ_1(wlan_serversstop_obj, wlan_serversstop);
924942

925-
STATIC mp_obj_t wlan_areserversenabled(mp_obj_t self_in) {
943+
STATIC mp_obj_t wlan_serversenabled(mp_obj_t self_in) {
926944
return MP_BOOL(servers_are_enabled());
927945
}
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);
929947

930948
STATIC mp_obj_t wlan_serversuserpass(mp_obj_t self_in, mp_obj_t user, mp_obj_t pass) {
931949
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)
937955

938956
STATIC const mp_map_elem_t wlan_locals_dict_table[] = {
939957
{ 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 },
942960
{ MP_OBJ_NEW_QSTR(MP_QSTR_scan), (mp_obj_t)&wlan_scan_obj },
943961
{ 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 },
946964
{ MP_OBJ_NEW_QSTR(MP_QSTR_urn), (mp_obj_t)&wlan_urn_obj },
947965
{ MP_OBJ_NEW_QSTR(MP_QSTR_start_servers), (mp_obj_t)&wlan_serversstart_obj },
948966
{ 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 },
950968
{ MP_OBJ_NEW_QSTR(MP_QSTR_servers_userpass), (mp_obj_t)&wlan_serversuserpass_obj },
951969

952970
// class constants

cc3200/mods/modwlan.h

+4-4
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@
3636
/******************************************************************************
3737
DEFINE TYPES
3838
******************************************************************************/
39-
typedef enum
40-
{
39+
typedef enum {
4140
MODWLAN_OK = 0,
4241
MODWLAN_ERROR_INVALID_PARAMS = -1,
4342
MODWLAN_ERROR_TIMEOUT = -2,
@@ -56,11 +55,12 @@ extern _SlLockObj_t wlan_LockObj;
5655
extern void wlan_init0 (void);
5756
extern modwlan_Status_t wlan_sl_enable (SlWlanMode_t mode, const char *ssid, uint8_t ssid_len, uint8_t sec,
5857
const char *key, uint8_t key_len, uint8_t channel);
59-
extern void wlan_sl_disable (void);
58+
extern void wlan_stop (void);
59+
extern void wlan_start (void);
6060
extern SlWlanMode_t wlan_get_mode (void);
6161
extern void wlan_get_mac (uint8_t *macAddress);
6262
extern void wlan_get_ip (uint32_t *ip);
6363
extern void wlan_set_pm_policy (uint8_t policy);
64-
extern void wlan_servers_stop (void);
64+
extern void wlan_stop_servers (void);
6565

6666
#endif /* SIMPLELINKTASK_H_ */

cc3200/mptask.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -232,8 +232,8 @@ void TASK_Micropython (void *pvParameters) {
232232
printf("PYB: soft reboot\n");
233233

234234
// disable wlan services
235-
wlan_servers_stop();
236-
wlan_sl_disable();
235+
wlan_stop_servers();
236+
wlan_stop();
237237

238238
// wait for all bus transfers to complete
239239
HAL_Delay(50);

cc3200/qstrdefsport.h

+5-5
Original file line numberDiff line numberDiff line change
@@ -224,16 +224,16 @@ Q(ssid)
224224
Q(bssid)
225225
Q(scan)
226226
Q(connect)
227-
Q(is_connected)
227+
Q(isconnected)
228228
Q(disconnect)
229-
Q(get_mode)
229+
Q(getmode)
230230
Q(channel)
231-
Q(get_ip)
231+
Q(ifconfig)
232232
Q(urn)
233-
Q(set_pm)
233+
Q(setpm)
234234
Q(start_servers)
235235
Q(stop_servers)
236-
Q(are_servers_enabled)
236+
Q(servers_enabled)
237237
Q(servers_userpass)
238238
Q(STA)
239239
Q(AP)

0 commit comments

Comments
 (0)