Skip to content

Commit 6c54bc9

Browse files
committed
more espnow changes
- improve docs - use existing list methods - change `recv` to `read`
1 parent c0a9c71 commit 6c54bc9

File tree

6 files changed

+46
-110
lines changed

6 files changed

+46
-110
lines changed

ports/espressif/bindings/espnow/Communicate.c

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,17 @@
3636
//| """Provides methods and statistics related to communication
3737
//| with the ESP-NOW peers.
3838
//|
39-
//| Dictionary:
39+
//| Terminology:
4040
//| * "Send" = "Transmit" = ``TX``
41-
//| * "Recv" = "Receive" = ``RX``
41+
//| * "Read" = ``RX``
4242
//| """
4343
//|
4444
//| def __init__(self) -> None:
4545
//| """You cannot create an instance of `Communicate`."""
4646
//| ...
4747

4848
//| job: str
49-
//| """Used to decide whether to call `__send` or `__recv`. (read-only)"""
49+
//| """Used to decide whether to call `__send` or `__read`. (read-only)"""
5050
//|
5151
STATIC mp_obj_t espnow_com_get_job(const mp_obj_t self_in) {
5252
espnow_com_obj_t *self = MP_OBJ_TO_PTR(self_in);
@@ -97,9 +97,11 @@ MP_PROPERTY_GETTER(espnow_com_failure_obj,
9797
//| self,
9898
//| message: ReadableBuffer,
9999
//| peer: Peer,
100-
//| ) -> bool:
100+
//| ) -> None:
101101
//| """Send a message to the peer's mac address.
102102
//|
103+
//| This blocks until a timeout of ``2`` seconds if the ESP-NOW internal buffers are full.
104+
//|
103105
//| :param ReadableBuffer message: The message to send (length <= 250 bytes).
104106
//| :param Peer peer: Send message to this peer. If `None`, send to all registered peers.
105107
//| """
@@ -131,18 +133,20 @@ STATIC mp_obj_t espnow_com___send(size_t n_args, const mp_obj_t *pos_args, mp_ma
131133
}
132134
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(espnow_com___send_obj, 2, espnow_com___send);
133135

134-
//| def __recv(self) -> Optional[ESPNowPacket]:
135-
//| """Receive a message from the peer(s).
136+
//| def __read(self) -> Optional[ESPNowPacket]:
137+
//| """Read a packet from the receive buffer.
138+
//|
139+
//| This is non-blocking, the packet is received asynchronously from the peer(s).
136140
//|
137141
//| :returns: An `ESPNowPacket` if available in the buffer, otherwise `None`."""
138142
//| ...
139-
STATIC mp_obj_t espnow_com___recv(mp_obj_t self_in) {
143+
STATIC mp_obj_t espnow_com___read(mp_obj_t self_in) {
140144
espnow_obj_t *self = MP_OBJ_TO_PTR(self_in);
141145
common_hal_espnow_check_for_deinit(self);
142146

143-
return common_hal_espnow_recv(self);
147+
return common_hal_espnow_read(self);
144148
}
145-
STATIC MP_DEFINE_CONST_FUN_OBJ_1(espnow_com___recv_obj, espnow_com___recv);
149+
STATIC MP_DEFINE_CONST_FUN_OBJ_1(espnow_com___read_obj, espnow_com___read);
146150

147151
STATIC const mp_rom_map_elem_t espnow_com_locals_dict_table[] = {
148152
// Config parameters
@@ -153,14 +157,14 @@ STATIC const mp_rom_map_elem_t espnow_com_locals_dict_table[] = {
153157
{ MP_ROM_QSTR(MP_QSTR_failure), MP_ROM_PTR(&espnow_com_failure_obj) },
154158

155159
// Communication methods
156-
{ MP_ROM_QSTR(MP_QSTR___send), MP_ROM_PTR(&espnow_com___send_obj) },
157-
{ MP_ROM_QSTR(MP_QSTR___recv), MP_ROM_PTR(&espnow_com___recv_obj) },
160+
{ MP_ROM_QSTR(MP_QSTR___send), MP_ROM_PTR(&espnow_com___send_obj) },
161+
{ MP_ROM_QSTR(MP_QSTR___read), MP_ROM_PTR(&espnow_com___read_obj) },
158162
};
159163
STATIC MP_DEFINE_CONST_DICT(espnow_com_locals_dict, espnow_com_locals_dict_table);
160164

161165
//| def __call__(self, *args: Optional[Any], **kwargs: Optional[Any]) -> Optional[Any]:
162-
//| """Calls the private `__send` or `__recv` methods with the supplied ``args`` and ``kwargs``
163-
//| based on whether the job parameter is set to ``send`` or ``recv``."""
166+
//| """Calls the private `__send` or `__read` methods with the supplied ``args`` and ``kwargs``
167+
//| based on whether the job parameter is set to ``send`` or ``read``."""
164168
//| ...
165169
//|
166170
STATIC mp_obj_t espnow_com_call(mp_obj_t self_in, size_t n_args, size_t n_kw, const mp_obj_t *args) {
@@ -170,8 +174,8 @@ STATIC mp_obj_t espnow_com_call(mp_obj_t self_in, size_t n_args, size_t n_kw, co
170174
case MP_QSTR_send:
171175
meth = MP_OBJ_FROM_PTR(&espnow_com___send_obj);
172176
break;
173-
case MP_QSTR_recv:
174-
meth = MP_OBJ_FROM_PTR(&espnow_com___recv_obj);
177+
case MP_QSTR_read:
178+
meth = MP_OBJ_FROM_PTR(&espnow_com___read_obj);
175179
break;
176180
default:
177181
break;

ports/espressif/bindings/espnow/ESPNow.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -165,20 +165,20 @@ STATIC mp_obj_t espnow_get_send(mp_obj_t self_in) {
165165
}
166166
STATIC MP_DEFINE_CONST_FUN_OBJ_1(espnow_get_send_obj, espnow_get_send);
167167

168-
MP_PROPERTY_GETTER(espnow_send_call_obj,
168+
MP_PROPERTY_GETTER(espnow_send_obj,
169169
(mp_obj_t)&espnow_get_send_obj);
170170

171-
//| recv: Communicate
172-
//| """A `Communicate` object with ``job`` set to ``recv``. (read-only)"""
171+
//| read: Communicate
172+
//| """A `Communicate` object with ``job`` set to ``read``. (read-only)"""
173173
//|
174-
STATIC mp_obj_t espnow_get_recv(mp_obj_t self_in) {
174+
STATIC mp_obj_t espnow_get_read(mp_obj_t self_in) {
175175
espnow_obj_t *self = MP_OBJ_TO_PTR(self_in);
176-
return MP_OBJ_FROM_PTR(self->recv);
176+
return MP_OBJ_FROM_PTR(self->read);
177177
}
178-
STATIC MP_DEFINE_CONST_FUN_OBJ_1(espnow_get_recv_obj, espnow_get_recv);
178+
STATIC MP_DEFINE_CONST_FUN_OBJ_1(espnow_get_read_obj, espnow_get_read);
179179

180-
MP_PROPERTY_GETTER(espnow_recv_call_obj,
181-
(mp_obj_t)&espnow_get_recv_obj);
180+
MP_PROPERTY_GETTER(espnow_read_obj,
181+
(mp_obj_t)&espnow_get_read_obj);
182182

183183
// --- Peer Related Properties ---
184184

@@ -208,8 +208,8 @@ STATIC const mp_rom_map_elem_t espnow_locals_dict_table[] = {
208208
{ MP_ROM_QSTR(MP_QSTR_phy_rate), MP_ROM_PTR(&espnow_phy_rate_obj) },
209209

210210
// Send and receive messages
211-
{ MP_ROM_QSTR(MP_QSTR_send), MP_ROM_PTR(&espnow_send_call_obj) },
212-
{ MP_ROM_QSTR(MP_QSTR_recv), MP_ROM_PTR(&espnow_recv_call_obj) },
211+
{ MP_ROM_QSTR(MP_QSTR_send), MP_ROM_PTR(&espnow_send_obj) },
212+
{ MP_ROM_QSTR(MP_QSTR_read), MP_ROM_PTR(&espnow_read_obj) },
213213

214214
// Peer related properties
215215
{ MP_ROM_QSTR(MP_QSTR_peers), MP_ROM_PTR(&espnow_peers_obj) },

ports/espressif/bindings/espnow/Peers.c

Lines changed: 8 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
// TODO: Check for deinit
3939

4040
//| class Peers:
41-
//| """A class that provides peer managment functions. Sequence[Peer]."""
41+
//| """Maintains a `list` of `Peer` internally and only exposes a subset of `list` methods."""
4242
//|
4343
//| def __init__(self) -> None:
4444
//| """You cannot create an instance of `Peers`."""
@@ -86,22 +86,7 @@ STATIC MP_DEFINE_CONST_DICT(espnow_peers_locals_dict, espnow_peers_locals_dict_t
8686
STATIC void espnow_peers_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
8787
espnow_peers_obj_t *self = MP_OBJ_TO_PTR(self_in);
8888
mp_obj_list_t *list = MP_OBJ_TO_PTR(self->list);
89-
const char *item_separator = ", ";
90-
if (!(MICROPY_PY_UJSON && kind == PRINT_JSON)) {
91-
kind = PRINT_REPR;
92-
} else {
93-
#if MICROPY_PY_UJSON_SEPARATORS
94-
item_separator = MP_PRINT_GET_EXT(print)->item_separator;
95-
#endif
96-
}
97-
mp_print_str(print, "[");
98-
for (size_t i = 0; i < list->len; i++) {
99-
if (i > 0) {
100-
mp_print_str(print, item_separator);
101-
}
102-
mp_obj_print_helper(print, list->items[i], kind);
103-
}
104-
mp_print_str(print, "]");
89+
return list->base.type->print(print, self->list, kind);
10590
}
10691

10792
/******************************************************************************/
@@ -110,20 +95,7 @@ STATIC void espnow_peers_print(const mp_print_t *print, mp_obj_t self_in, mp_pri
11095
STATIC mp_obj_t espnow_peers_unary_op(mp_unary_op_t op, mp_obj_t self_in) {
11196
espnow_peers_obj_t *self = MP_OBJ_TO_PTR(self_in);
11297
mp_obj_list_t *list = MP_OBJ_TO_PTR(self->list);
113-
switch (op) {
114-
case MP_UNARY_OP_BOOL:
115-
return mp_obj_new_bool(list->len != 0);
116-
case MP_UNARY_OP_LEN:
117-
return MP_OBJ_NEW_SMALL_INT(list->len);
118-
#if MICROPY_PY_SYS_GETSIZEOF
119-
case MP_UNARY_OP_SIZEOF: {
120-
size_t sz = sizeof(*list) + sizeof(mp_obj_t) * list->alloc;
121-
return MP_OBJ_NEW_SMALL_INT(sz);
122-
}
123-
#endif
124-
default:
125-
return MP_OBJ_NULL; // op not supported
126-
}
98+
return list->base.type->ext->unary_op(op, self->list);
12799
}
128100

129101
/******************************************************************************/
@@ -133,58 +105,18 @@ STATIC mp_obj_t espnow_peers_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t v
133105
if (value != MP_OBJ_SENTINEL) {
134106
return MP_OBJ_NULL; // op not supported
135107
}
136-
137108
espnow_peers_obj_t *self = MP_OBJ_TO_PTR(self_in);
138109
mp_obj_list_t *list = MP_OBJ_TO_PTR(self->list);
139-
140-
// load
141-
#if MICROPY_PY_BUILTINS_SLICE
142-
if (mp_obj_is_type(index, &mp_type_slice)) {
143-
mp_bound_slice_t slice;
144-
if (!mp_seq_get_fast_slice_indexes(list->len, index, &slice)) {
145-
return mp_seq_extract_slice(list->len, list->items, &slice);
146-
}
147-
148-
mp_obj_list_t *res = MP_OBJ_TO_PTR(mp_obj_new_list(slice.stop - slice.start, NULL));
149-
mp_seq_copy(res->items, list->items + slice.start, res->len, mp_obj_t);
150-
return MP_OBJ_FROM_PTR(res);
151-
}
152-
#endif
153-
size_t index_val = mp_get_index(list->base.type, list->len, index, false);
154-
return list->items[index_val];
110+
return list->base.type->ext->subscr(self->list, index, value);
155111
}
156112

157113
/******************************************************************************/
158114
/* peers iterator */
159115

160-
typedef struct _espnow_peers_it_t {
161-
mp_obj_base_t base;
162-
mp_fun_1_t iternext;
163-
mp_obj_t peers;
164-
size_t cur;
165-
} espnow_peers_it_t;
166-
167-
STATIC mp_obj_t espnow_peers_it_iternext(mp_obj_t self_in) {
168-
espnow_peers_it_t *self = MP_OBJ_TO_PTR(self_in);
169-
espnow_peers_obj_t *peers = MP_OBJ_TO_PTR(self->peers);
170-
mp_obj_list_t *list = MP_OBJ_TO_PTR(peers->list);
171-
if (self->cur < list->len) {
172-
mp_obj_t o_out = list->items[self->cur];
173-
self->cur += 1;
174-
return o_out;
175-
} else {
176-
return MP_OBJ_STOP_ITERATION;
177-
}
178-
}
179-
180-
STATIC mp_obj_t espnow_peers_getiter(mp_obj_t o_in, mp_obj_iter_buf_t *iter_buf) {
181-
assert(sizeof(espnow_peers_it_t) <= sizeof(mp_obj_iter_buf_t));
182-
espnow_peers_it_t *o = (espnow_peers_it_t *)iter_buf;
183-
o->base.type = &mp_type_polymorph_iter;
184-
o->iternext = espnow_peers_it_iternext;
185-
o->peers = o_in;
186-
o->cur = 0;
187-
return MP_OBJ_FROM_PTR(o);
116+
STATIC mp_obj_t espnow_peers_getiter(mp_obj_t self_in, mp_obj_iter_buf_t *iter_buf) {
117+
espnow_peers_obj_t *self = MP_OBJ_TO_PTR(self_in);
118+
mp_obj_list_t *list = MP_OBJ_TO_PTR(self->list);
119+
return list->base.type->ext->getiter(self->list, iter_buf);
188120
}
189121

190122
espnow_peers_obj_t *espnow_peers_new(void) {

ports/espressif/bindings/espnow/__init__.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
//|
6565
//| while True:
6666
//| if e:
67-
//| packet = e.recv()
67+
//| packet = e.read()
6868
//| packets.append(packet)
6969
//| if packet.msg == b'end':
7070
//| break

ports/espressif/common-hal/espnow/ESPNow.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ static void recv_cb(const uint8_t *mac, const uint8_t *msg, int msg_len) {
9393
ringbuf_t *buf = self->recv_buffer;
9494

9595
if (sizeof(espnow_packet_t) + msg_len > ringbuf_num_empty(buf)) {
96-
self->recv->failure++;
96+
self->read->failure++;
9797
return;
9898
}
9999

@@ -120,7 +120,7 @@ static void recv_cb(const uint8_t *mac, const uint8_t *msg, int msg_len) {
120120
ringbuf_put_n(buf, mac, ESP_NOW_ETH_ALEN);
121121
ringbuf_put_n(buf, msg, msg_len);
122122

123-
self->recv->success++;
123+
self->read->success++;
124124
}
125125

126126
bool common_hal_espnow_deinited(espnow_obj_t *self) {
@@ -133,7 +133,7 @@ void common_hal_espnow_construct(espnow_obj_t *self, mp_int_t buffer_size, mp_in
133133
common_hal_espnow_set_phy_rate(self, phy_rate);
134134

135135
self->send = espnow_com_new(MP_QSTR_send);
136-
self->recv = espnow_com_new(MP_QSTR_recv);
136+
self->read = espnow_com_new(MP_QSTR_read);
137137

138138
self->peers = espnow_peers_new();
139139

@@ -166,7 +166,7 @@ void common_hal_espnow_init(espnow_obj_t *self) {
166166
}
167167

168168
// De-initialize the ESP-NOW software stack,
169-
// disable callbacks and deallocate the recv data buffers.
169+
// disable callbacks and deallocate the recv data buffer.
170170
void common_hal_espnow_deinit(espnow_obj_t *self) {
171171
if (common_hal_espnow_deinited(self)) {
172172
return;
@@ -214,7 +214,7 @@ mp_obj_t common_hal_espnow_send(espnow_obj_t *self, const mp_buffer_info_t *mess
214214
return mp_const_none;
215215
}
216216

217-
mp_obj_t common_hal_espnow_recv(espnow_obj_t *self) {
217+
mp_obj_t common_hal_espnow_read(espnow_obj_t *self) {
218218
if (!ringbuf_num_filled(self->recv_buffer)) {
219219
return mp_const_none;
220220
}

ports/espressif/common-hal/espnow/ESPNow.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ typedef struct _espnow_obj_t {
4040
ringbuf_t *recv_buffer; // A buffer for received packets
4141
size_t recv_buffer_size; // The size of the recv_buffer
4242
wifi_phy_rate_t phy_rate; // The ESP-NOW physical layer rate.
43-
espnow_com_obj_t *send; // The tx packet stats
44-
espnow_com_obj_t *recv; // The rx packet stats
43+
espnow_com_obj_t *send; // For keeping tx stats
44+
espnow_com_obj_t *read; // For keeping rx stats
4545
espnow_peers_obj_t *peers; // The sequence of peers
4646
} espnow_obj_t;
4747

@@ -57,4 +57,4 @@ extern void common_hal_espnow_set_phy_rate(espnow_obj_t *self, mp_int_t value);
5757
extern void common_hal_espnow_set_pmk(espnow_obj_t *self, const uint8_t *key);
5858

5959
extern mp_obj_t common_hal_espnow_send(espnow_obj_t *self, const mp_buffer_info_t *message, const uint8_t *mac);
60-
extern mp_obj_t common_hal_espnow_recv(espnow_obj_t *self);
60+
extern mp_obj_t common_hal_espnow_read(espnow_obj_t *self);

0 commit comments

Comments
 (0)