Skip to content

Commit

Permalink
esp32: In recv_cb, get espnow rssi from recv_info->rx_ctrl.
Browse files Browse the repository at this point in the history
IDF v5.0 provides access to rssi value for received espnow packets via
recv_info arg to recv_cb().

Signed-off-by: Glenn Moloney <glenn.moloney@gmail.com>
  • Loading branch information
glenn20 authored and dpgeorge committed Jun 23, 2023
1 parent e465012 commit 2cc3711
Showing 1 changed file with 1 addition and 16 deletions.
17 changes: 1 addition & 16 deletions ports/esp32/modespnow.c
Expand Up @@ -313,21 +313,6 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(espnow_stats_obj, espnow_stats);
// - to return unique bytestrings for each peer which supports more efficient
// application memory usage and peer handling.

// Get the RSSI value from the wifi packet header
static inline int8_t _get_rssi_from_wifi_pkt(const uint8_t *msg) {
// Warning: Secret magic to get the rssi from the wifi packet header
// See espnow.c:espnow_recv_cb() at https://github.com/espressif/esp-now/
// In the wifi packet the msg comes after a wifi_promiscuous_pkt_t
// and a espnow_frame_format_t.
// Backtrack to get a pointer to the wifi_promiscuous_pkt_t.
static const size_t sizeof_espnow_frame_format = 39;
wifi_promiscuous_pkt_t *wifi_pkt =
(wifi_promiscuous_pkt_t *)(msg - sizeof_espnow_frame_format -
sizeof(wifi_promiscuous_pkt_t));

return wifi_pkt->rx_ctrl.rssi;
}

// Lookup a peer in the peers table and return a reference to the item in the
// peers_table. Add peer to the table if it is not found (may alloc memory).
// Will not return NULL.
Expand Down Expand Up @@ -577,7 +562,7 @@ STATIC void recv_cb(const esp_now_recv_info_t *recv_info, const uint8_t *msg, in
header.magic = ESPNOW_MAGIC;
header.msg_len = msg_len;
#if MICROPY_ESPNOW_RSSI
header.rssi = _get_rssi_from_wifi_pkt(msg);
header.rssi = recv_info->rx_ctrl->rssi;
header.time_ms = mp_hal_ticks_ms();
#endif // MICROPY_ESPNOW_RSSI

Expand Down

0 comments on commit 2cc3711

Please sign in to comment.