Skip to content

Commit 286ced4

Browse files
atxpfalcon
authored andcommitted
esp8266: Add a bunch of miscellaneous methods
1 parent 25a8a42 commit 286ced4

3 files changed

Lines changed: 117 additions & 3 deletions

File tree

esp8266/modesp.c

Lines changed: 94 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
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

4244
STATIC 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
}
350352
STATIC 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+
352372
STATIC 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
}
515536
STATIC 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
}
543564
STATIC 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+
545617
STATIC 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),

esp8266/modpyb.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,12 @@ STATIC mp_obj_t pyb_hard_reset(void) {
149149
}
150150
STATIC MP_DEFINE_CONST_FUN_OBJ_0(pyb_hard_reset_obj, pyb_hard_reset);
151151

152+
STATIC mp_obj_t pyb_unique_id(void) {
153+
uint32_t id = system_get_chip_id();
154+
return mp_obj_new_bytes((byte *)&id, sizeof(id));
155+
}
156+
STATIC MP_DEFINE_CONST_FUN_OBJ_0(pyb_unique_id_obj, pyb_unique_id);
157+
152158
STATIC const mp_map_elem_t pyb_module_globals_table[] = {
153159
{ MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_pyb) },
154160

esp8266/qstrdefsport.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ Q(delay)
4040
Q(udelay)
4141
Q(sync)
4242
Q(hard_reset)
43+
Q(unique_id)
4344

4445
// uos module
4546
Q(uos)
@@ -57,6 +58,15 @@ Q(connect)
5758
Q(disconnect)
5859
Q(scan)
5960
Q(status)
61+
Q(phy_mode)
62+
Q(sleep_type)
63+
Q(deepsleep)
64+
Q(adc)
65+
Q(vdd33)
66+
Q(chip_id)
67+
Q(flash_id)
68+
Q(sdk_version)
69+
Q(mac)
6070
Q(getaddrinfo)
6171
Q(send)
6272
Q(sendto)
@@ -70,6 +80,7 @@ Q(setblocking)
7080
Q(setsockopt)
7181
Q(close)
7282
Q(protocol)
83+
Q(getpeername)
7384
Q(onconnect)
7485
Q(onrecv)
7586
Q(onsent)
@@ -80,6 +91,12 @@ Q(STAT_WRONG_PASSWORD)
8091
Q(STAT_NO_AP_FOUND)
8192
Q(STAT_CONNECT_FAIL)
8293
Q(STAT_GOT_IP)
94+
Q(MODE_11B)
95+
Q(MODE_11G)
96+
Q(MODE_11N)
97+
Q(SLEEP_NONE)
98+
Q(SLEEP_LIGHT)
99+
Q(SLEEP_MODEM)
83100

84101
// Pin class
85102
Q(Pin)

0 commit comments

Comments
 (0)