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

+136-6
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)