@@ -117,7 +117,6 @@ static bool wifi_sta_connected = false;
117
117
// This function is called by the system-event task and so runs in a different
118
118
// thread to the main MicroPython task. It must not raise any Python exceptions.
119
119
static esp_err_t event_handler (void * ctx , system_event_t * event ) {
120
- ESP_LOGI ("event_handler" , "event %d" , event -> event_id );
121
120
switch (event -> event_id ) {
122
121
case SYSTEM_EVENT_STA_START :
123
122
ESP_LOGI ("wifi" , "STA_START" );
@@ -154,6 +153,7 @@ static esp_err_t event_handler(void *ctx, system_event_t *event) {
154
153
break ;
155
154
}
156
155
default :
156
+ ESP_LOGI ("wifi" , "event %d" , event -> event_id );
157
157
break ;
158
158
}
159
159
return ESP_OK ;
@@ -164,13 +164,14 @@ static esp_err_t event_handler(void *ctx, system_event_t *event) {
164
164
nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, msg));
165
165
}
166
166
}
167
+ */
167
168
168
169
STATIC void require_if (mp_obj_t wlan_if , int if_no ) {
169
170
wlan_if_obj_t * self = MP_OBJ_TO_PTR (wlan_if );
170
171
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" );
172
173
}
173
- }*/
174
+ }
174
175
175
176
STATIC mp_obj_t get_wlan (mp_uint_t n_args , const mp_obj_t * args ) {
176
177
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) {
298
299
STATIC MP_DEFINE_CONST_FUN_OBJ_1 (esp_scan_obj , esp_scan );
299
300
300
301
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 );
302
307
}
303
-
304
308
STATIC MP_DEFINE_CONST_FUN_OBJ_1 (esp_isconnected_obj , esp_isconnected );
305
309
306
310
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) {
353
357
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (esp_ifconfig_obj , 1 , 2 , esp_ifconfig );
354
358
355
359
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" ));
357
487
}
358
488
359
489
STATIC MP_DEFINE_CONST_FUN_OBJ_KW (esp_config_obj , 1 , esp_config );
0 commit comments