3737#include "queue.h"
3838#include "user_interface.h"
3939#include "espconn.h"
40+ #include "ip_addr.h"
41+ #include "spi_flash.h"
4042#include "utils.h"
4143
4244STATIC const mp_obj_type_t esp_socket_type ;
@@ -349,6 +351,24 @@ STATIC mp_obj_t esp_socket_recvfrom(mp_obj_t self_in, mp_obj_t len_in) {
349351}
350352STATIC MP_DEFINE_CONST_FUN_OBJ_2 (esp_socket_recvfrom_obj , esp_socket_recvfrom );
351353
354+ // method socket.getpeername()
355+ STATIC mp_obj_t esp_socket_getpeername (mp_obj_t self_in ) {
356+ esp_socket_obj_t * s = self_in ;
357+
358+ if (s -> espconn -> state == ESPCONN_NONE ) {
359+ nlr_raise (mp_obj_new_exception_msg (& mp_type_OSError ,
360+ "not connected" ));
361+ }
362+
363+ mp_obj_t tuple [2 ] = {
364+ netutils_format_ipv4_addr (s -> espconn -> proto .tcp -> remote_ip , NETUTILS_BIG ),
365+ mp_obj_new_int (s -> espconn -> proto .tcp -> remote_port ),
366+ };
367+
368+ return mp_obj_new_tuple (2 , tuple );
369+ }
370+ STATIC MP_DEFINE_CONST_FUN_OBJ_1 (esp_socket_getpeername_obj , esp_socket_getpeername );
371+
352372STATIC mp_obj_t esp_socket_onconnect (mp_obj_t self_in , mp_obj_t lambda_in ) {
353373 esp_socket_obj_t * s = self_in ;
354374 s -> cb_connect = lambda_in ;
@@ -467,6 +487,7 @@ STATIC const mp_map_elem_t esp_socket_locals_dict_table[] = {
467487 { MP_OBJ_NEW_QSTR (MP_QSTR_recv ), (mp_obj_t )& esp_socket_recv_obj },
468488 { MP_OBJ_NEW_QSTR (MP_QSTR_sendto ), (mp_obj_t )& esp_socket_sendto_obj },
469489 { MP_OBJ_NEW_QSTR (MP_QSTR_recvfrom ), (mp_obj_t )& esp_socket_recvfrom_obj },
490+ { MP_OBJ_NEW_QSTR (MP_QSTR_getpeername ), (mp_obj_t )& esp_socket_getpeername_obj },
470491 { MP_OBJ_NEW_QSTR (MP_QSTR_onconnect ), (mp_obj_t )& esp_socket_onconnect_obj },
471492 { MP_OBJ_NEW_QSTR (MP_QSTR_onrecv ), (mp_obj_t )& esp_socket_onrecv_obj },
472493 { MP_OBJ_NEW_QSTR (MP_QSTR_onsent ), (mp_obj_t )& esp_socket_onsent_obj },
@@ -514,14 +535,14 @@ STATIC mp_obj_t esp_scan(mp_obj_t cb_in) {
514535}
515536STATIC MP_DEFINE_CONST_FUN_OBJ_1 (esp_scan_obj , esp_scan );
516537
517- STATIC mp_obj_t esp_connect (mp_obj_t ssid_in , mp_obj_t passwd_in ) {
538+ STATIC mp_obj_t esp_connect (mp_uint_t n_args , const mp_obj_t * args ) {
518539 struct station_config config = {{0 }};
519540 mp_uint_t len ;
520541 const char * p ;
521542
522- p = mp_obj_str_get_data (ssid_in , & len );
543+ p = mp_obj_str_get_data (args [ 0 ] , & len );
523544 memcpy (config .ssid , p , len );
524- p = mp_obj_str_get_data (passwd_in , & len );
545+ p = mp_obj_str_get_data (args [ 1 ] , & len );
525546 memcpy (config .password , p , len );
526547
527548 error_check (wifi_station_set_config (& config ), "Cannot set STA config" );
@@ -542,17 +563,87 @@ STATIC mp_obj_t esp_status() {
542563}
543564STATIC MP_DEFINE_CONST_FUN_OBJ_0 (esp_status_obj , esp_status );
544565
566+ STATIC mp_obj_t esp_phy_mode (mp_uint_t n_args , const mp_obj_t * args ) {
567+ if (n_args == 0 ) {
568+ return mp_obj_new_int (wifi_get_phy_mode ());
569+ } else {
570+ wifi_set_phy_mode (mp_obj_get_int (args [0 ]));
571+ return mp_const_none ;
572+ }
573+ }
574+ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (esp_phy_mode_obj , 0 , 1 , esp_phy_mode );
575+
576+ STATIC mp_obj_t esp_sleep_type (mp_uint_t n_args , const mp_obj_t * args ) {
577+ if (n_args == 0 ) {
578+ return mp_obj_new_int (wifi_get_sleep_type ());
579+ } else {
580+ wifi_set_sleep_type (mp_obj_get_int (args [0 ]));
581+ return mp_const_none ;
582+ }
583+ }
584+ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (esp_sleep_type_obj , 0 , 1 , esp_sleep_type );
585+
586+ STATIC mp_obj_t esp_mac (mp_uint_t n_args , const mp_obj_t * args ) {
587+ uint8_t mac [6 ];
588+ if (n_args == 0 ) {
589+ wifi_get_macaddr (STATION_IF , mac );
590+ return mp_obj_new_bytes (mac , sizeof (mac ));
591+ } else {
592+ mp_buffer_info_t bufinfo ;
593+ mp_get_buffer_raise (args [0 ], & bufinfo , MP_BUFFER_READ );
594+
595+ if (bufinfo .len != 6 ) {
596+ nlr_raise (mp_obj_new_exception_msg (& mp_type_ValueError ,
597+ "invalid buffer length" ));
598+ }
599+
600+ wifi_set_macaddr (STATION_IF , bufinfo .buf );
601+ return mp_const_none ;
602+ }
603+ }
604+ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (esp_mac_obj , 0 , 1 , esp_mac );
605+
606+ STATIC mp_obj_t esp_deepsleep (mp_uint_t n_args , const mp_obj_t * args ) {
607+ system_deep_sleep (n_args > 0 ? mp_obj_get_int (args [0 ]) : 0 );
608+ return mp_const_none ;
609+ }
610+ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (esp_deepsleep_obj , 0 , 1 , esp_deepsleep );
611+
612+ STATIC mp_obj_t esp_flash_id () {
613+ return mp_obj_new_int (spi_flash_get_id ());
614+ }
615+ STATIC MP_DEFINE_CONST_FUN_OBJ_0 (esp_flash_id_obj , esp_flash_id );
616+
545617STATIC const mp_map_elem_t esp_module_globals_table [] = {
546618 { MP_OBJ_NEW_QSTR (MP_QSTR___name__ ), MP_OBJ_NEW_QSTR (MP_QSTR_esp ) },
547619
548620 { MP_OBJ_NEW_QSTR (MP_QSTR_connect ), (mp_obj_t )& esp_connect_obj },
549621 { MP_OBJ_NEW_QSTR (MP_QSTR_disconnect ), (mp_obj_t )& esp_disconnect_obj },
550622 { MP_OBJ_NEW_QSTR (MP_QSTR_scan ), (mp_obj_t )& esp_scan_obj },
551623 { MP_OBJ_NEW_QSTR (MP_QSTR_status ), (mp_obj_t )& esp_status_obj },
624+ { MP_OBJ_NEW_QSTR (MP_QSTR_mac ), (mp_obj_t )& esp_mac_obj },
552625 { MP_OBJ_NEW_QSTR (MP_QSTR_getaddrinfo ), (mp_obj_t )& esp_getaddrinfo_obj },
626+ { MP_OBJ_NEW_QSTR (MP_QSTR_phy_mode ), (mp_obj_t )& esp_phy_mode_obj },
627+ { MP_OBJ_NEW_QSTR (MP_QSTR_sleep_type ), (mp_obj_t )& esp_sleep_type_obj },
628+ { MP_OBJ_NEW_QSTR (MP_QSTR_deepsleep ), (mp_obj_t )& esp_deepsleep_obj },
629+ { MP_OBJ_NEW_QSTR (MP_QSTR_flash_id ), (mp_obj_t )& esp_flash_id_obj },
553630 { MP_OBJ_NEW_QSTR (MP_QSTR_socket ), (mp_obj_t )& esp_socket_type },
554631
555632#if MODESP_INCLUDE_CONSTANTS
633+ { MP_OBJ_NEW_QSTR (MP_QSTR_MODE_11B ),
634+ MP_OBJ_NEW_SMALL_INT (PHY_MODE_11B ) },
635+ { MP_OBJ_NEW_QSTR (MP_QSTR_MODE_11G ),
636+ MP_OBJ_NEW_SMALL_INT (PHY_MODE_11G ) },
637+ { MP_OBJ_NEW_QSTR (MP_QSTR_MODE_11N ),
638+ MP_OBJ_NEW_SMALL_INT (PHY_MODE_11N ) },
639+
640+ { MP_OBJ_NEW_QSTR (MP_QSTR_SLEEP_NONE ),
641+ MP_OBJ_NEW_SMALL_INT (NONE_SLEEP_T ) },
642+ { MP_OBJ_NEW_QSTR (MP_QSTR_SLEEP_LIGHT ),
643+ MP_OBJ_NEW_SMALL_INT (LIGHT_SLEEP_T ) },
644+ { MP_OBJ_NEW_QSTR (MP_QSTR_SLEEP_MODEM ),
645+ MP_OBJ_NEW_SMALL_INT (MODEM_SLEEP_T ) },
646+
556647 { MP_OBJ_NEW_QSTR (MP_QSTR_STAT_IDLE ),
557648 MP_OBJ_NEW_SMALL_INT (STATION_IDLE )},
558649 { MP_OBJ_NEW_QSTR (MP_QSTR_STAT_CONNECTING ),
0 commit comments