Skip to content

Commit b0ff8be

Browse files
committed
Merge branch 'esp32' of github.com:micropython/micropython-esp32 into esp32
2 parents b6da15e + ea4febe commit b0ff8be

File tree

1 file changed

+136
-6
lines changed

1 file changed

+136
-6
lines changed

esp32/modnetwork.c

Lines changed: 136 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,6 @@ static bool wifi_sta_connected = false;
117117
// This function is called by the system-event task and so runs in a different
118118
// thread to the main MicroPython task. It must not raise any Python exceptions.
119119
static esp_err_t event_handler(void *ctx, system_event_t *event) {
120-
ESP_LOGI("event_handler", "event %d", event->event_id);
121120
switch(event->event_id) {
122121
case SYSTEM_EVENT_STA_START:
123122
ESP_LOGI("wifi", "STA_START");
@@ -154,6 +153,7 @@ static esp_err_t event_handler(void *ctx, system_event_t *event) {
154153
break;
155154
}
156155
default:
156+
ESP_LOGI("wifi", "event %d", event->event_id);
157157
break;
158158
}
159159
return ESP_OK;
@@ -164,13 +164,14 @@ static esp_err_t event_handler(void *ctx, system_event_t *event) {
164164
nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, msg));
165165
}
166166
}
167+
*/
167168

168169
STATIC void require_if(mp_obj_t wlan_if, int if_no) {
169170
wlan_if_obj_t *self = MP_OBJ_TO_PTR(wlan_if);
170171
if (self->if_id != if_no) {
171-
error_check(false, if_no == WIFI_IF_STA ? "STA required" : "AP required");
172+
mp_raise_msg(&mp_type_OSError, if_no == WIFI_IF_STA ? "STA required" : "AP required");
172173
}
173-
}*/
174+
}
174175

175176
STATIC mp_obj_t get_wlan(mp_uint_t n_args, const mp_obj_t *args) {
176177
int idx = (n_args > 0) ? mp_obj_get_int(args[0]) : WIFI_IF_STA;
@@ -298,9 +299,12 @@ STATIC mp_obj_t esp_scan(mp_obj_t self_in) {
298299
STATIC MP_DEFINE_CONST_FUN_OBJ_1(esp_scan_obj, esp_scan);
299300

300301
STATIC mp_obj_t esp_isconnected(mp_obj_t self_in) {
301-
return mp_const_none;
302+
wlan_if_obj_t *self = MP_OBJ_TO_PTR(self_in);
303+
require_if(self_in, WIFI_IF_STA);
304+
tcpip_adapter_ip_info_t info;
305+
tcpip_adapter_get_ip_info(self->if_id, &info);
306+
return mp_obj_new_bool(info.ip.addr != 0);
302307
}
303-
304308
STATIC MP_DEFINE_CONST_FUN_OBJ_1(esp_isconnected_obj, esp_isconnected);
305309

306310
STATIC mp_obj_t esp_ifconfig(size_t n_args, const mp_obj_t *args) {
@@ -353,7 +357,133 @@ STATIC mp_obj_t esp_ifconfig(size_t n_args, const mp_obj_t *args) {
353357
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(esp_ifconfig_obj, 1, 2, esp_ifconfig);
354358

355359
STATIC mp_obj_t esp_config(size_t n_args, const mp_obj_t *args, mp_map_t *kwargs) {
356-
return mp_const_none;
360+
if (n_args != 1 && kwargs->used != 0) {
361+
nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError,
362+
"either pos or kw args are allowed"));
363+
}
364+
365+
wlan_if_obj_t *self = MP_OBJ_TO_PTR(args[0]);
366+
367+
// get the config for the interface
368+
wifi_config_t cfg;
369+
ESP_EXCEPTIONS(esp_wifi_get_config(self->if_id, &cfg));
370+
371+
if (kwargs->used != 0) {
372+
373+
for (size_t i = 0; i < kwargs->alloc; i++) {
374+
if (MP_MAP_SLOT_IS_FILLED(kwargs, i)) {
375+
int req_if = -1;
376+
377+
#define QS(x) (uintptr_t)MP_OBJ_NEW_QSTR(x)
378+
switch ((uintptr_t)kwargs->table[i].key) {
379+
case QS(MP_QSTR_mac): {
380+
mp_buffer_info_t bufinfo;
381+
mp_get_buffer_raise(kwargs->table[i].value, &bufinfo, MP_BUFFER_READ);
382+
if (bufinfo.len != 6) {
383+
nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError,
384+
"invalid buffer length"));
385+
}
386+
ESP_EXCEPTIONS(esp_wifi_set_mac(self->if_id, bufinfo.buf));
387+
break;
388+
}
389+
case QS(MP_QSTR_essid): {
390+
req_if = WIFI_IF_AP;
391+
mp_uint_t len;
392+
const char *s = mp_obj_str_get_data(kwargs->table[i].value, &len);
393+
len = MIN(len, sizeof(cfg.ap.ssid));
394+
memcpy(cfg.ap.ssid, s, len);
395+
cfg.ap.ssid_len = len;
396+
break;
397+
}
398+
case QS(MP_QSTR_hidden): {
399+
req_if = WIFI_IF_AP;
400+
cfg.ap.ssid_hidden = mp_obj_is_true(kwargs->table[i].value);
401+
break;
402+
}
403+
case QS(MP_QSTR_authmode): {
404+
req_if = WIFI_IF_AP;
405+
cfg.ap.authmode = mp_obj_get_int(kwargs->table[i].value);
406+
break;
407+
}
408+
case QS(MP_QSTR_password): {
409+
req_if = WIFI_IF_AP;
410+
mp_uint_t len;
411+
const char *s = mp_obj_str_get_data(kwargs->table[i].value, &len);
412+
len = MIN(len, sizeof(cfg.ap.password) - 1);
413+
memcpy(cfg.ap.password, s, len);
414+
cfg.ap.password[len] = 0;
415+
break;
416+
}
417+
case QS(MP_QSTR_channel): {
418+
req_if = WIFI_IF_AP;
419+
cfg.ap.channel = mp_obj_get_int(kwargs->table[i].value);
420+
break;
421+
}
422+
default:
423+
goto unknown;
424+
}
425+
#undef QS
426+
427+
// We post-check interface requirements to save on code size
428+
if (req_if >= 0) {
429+
require_if(args[0], req_if);
430+
}
431+
}
432+
}
433+
434+
ESP_EXCEPTIONS(esp_wifi_set_config(self->if_id, &cfg));
435+
436+
return mp_const_none;
437+
}
438+
439+
// Get config
440+
441+
if (n_args != 2) {
442+
nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError,
443+
"can query only one param"));
444+
}
445+
446+
int req_if = -1;
447+
mp_obj_t val;
448+
449+
#define QS(x) (uintptr_t)MP_OBJ_NEW_QSTR(x)
450+
switch ((uintptr_t)args[1]) {
451+
case QS(MP_QSTR_mac): {
452+
uint8_t mac[6];
453+
ESP_EXCEPTIONS(esp_wifi_get_mac(self->if_id, mac));
454+
return mp_obj_new_bytes(mac, sizeof(mac));
455+
}
456+
case QS(MP_QSTR_essid):
457+
req_if = WIFI_IF_AP;
458+
val = mp_obj_new_str((char*)cfg.ap.ssid, cfg.ap.ssid_len, false);
459+
break;
460+
case QS(MP_QSTR_hidden):
461+
req_if = WIFI_IF_AP;
462+
val = mp_obj_new_bool(cfg.ap.ssid_hidden);
463+
break;
464+
case QS(MP_QSTR_authmode):
465+
req_if = WIFI_IF_AP;
466+
val = MP_OBJ_NEW_SMALL_INT(cfg.ap.authmode);
467+
break;
468+
case QS(MP_QSTR_channel):
469+
req_if = WIFI_IF_AP;
470+
val = MP_OBJ_NEW_SMALL_INT(cfg.ap.channel);
471+
break;
472+
default:
473+
goto unknown;
474+
}
475+
#undef QS
476+
477+
// We post-check interface requirements to save on code size
478+
if (req_if >= 0) {
479+
require_if(args[0], req_if);
480+
}
481+
482+
return val;
483+
484+
unknown:
485+
nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError,
486+
"unknown config param"));
357487
}
358488

359489
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(esp_config_obj, 1, esp_config);

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy