Skip to content

Commit 4488c33

Browse files
committed
fix(ESP-NOW): Remove all peers on ESP_NOW.end()
1 parent 2aa4828 commit 4488c33

File tree

2 files changed

+37
-22
lines changed

2 files changed

+37
-22
lines changed

Diff for: libraries/ESP_NOW/src/ESP32_NOW.cpp

+11-1
Original file line numberDiff line numberDiff line change
@@ -190,13 +190,19 @@ bool ESP_NOW_Class::end() {
190190
if (!_esp_now_has_begun) {
191191
return true;
192192
}
193-
//remove all peers?
193+
//remove all peers
194+
for(uint8_t i = 0; i < ESP_NOW_MAX_TOTAL_PEER_NUM; i++) {
195+
if (_esp_now_peers[i] != NULL) {
196+
removePeer(*_esp_now_peers[i]);
197+
}
198+
}
194199
esp_err_t err = esp_now_deinit();
195200
if (err != ESP_OK) {
196201
log_e("esp_now_deinit failed! 0x%x", err);
197202
return false;
198203
}
199204
_esp_now_has_begun = false;
205+
//clear the peer list
200206
memset(_esp_now_peers, 0, sizeof(ESP_NOW_Peer *) * ESP_NOW_MAX_TOTAL_PEER_NUM);
201207
return true;
202208
}
@@ -262,6 +268,10 @@ void ESP_NOW_Class::onNewPeer(void (*cb)(const esp_now_recv_info_t *info, const
262268
new_arg = arg;
263269
}
264270

271+
bool ESP_NOW_Class::removePeer(ESP_NOW_Peer &peer) {
272+
return peer.remove();
273+
}
274+
265275
ESP_NOW_Class ESP_NOW;
266276

267277
/*

Diff for: libraries/ESP_NOW/src/ESP32_NOW.h

+26-21
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,31 @@
66
#include "esp32-hal-log.h"
77
#include "esp_mac.h"
88

9+
class ESP_NOW_Peer; //forward declaration for friend function
10+
11+
class ESP_NOW_Class : public Print {
12+
public:
13+
const uint8_t BROADCAST_ADDR[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
14+
15+
ESP_NOW_Class();
16+
~ESP_NOW_Class();
17+
18+
bool begin(const uint8_t *pmk = NULL /* 16 bytes */);
19+
bool end();
20+
21+
int getTotalPeerCount();
22+
int getEncryptedPeerCount();
23+
24+
int availableForWrite();
25+
size_t write(const uint8_t *data, size_t len);
26+
size_t write(uint8_t data) {
27+
return write(&data, 1);
28+
}
29+
30+
void onNewPeer(void (*cb)(const esp_now_recv_info_t *info, const uint8_t *data, int len, void *arg), void *arg);
31+
bool removePeer(ESP_NOW_Peer &peer);
32+
};
33+
934
class ESP_NOW_Peer {
1035
private:
1136
uint8_t mac[6];
@@ -47,28 +72,8 @@ class ESP_NOW_Peer {
4772
virtual void onSent(bool success) {
4873
log_i("Message transmission to peer " MACSTR " %s", MAC2STR(mac), success ? "successful" : "failed");
4974
}
50-
};
51-
52-
class ESP_NOW_Class : public Print {
53-
public:
54-
const uint8_t BROADCAST_ADDR[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
55-
56-
ESP_NOW_Class();
57-
~ESP_NOW_Class();
58-
59-
bool begin(const uint8_t *pmk = NULL /* 16 bytes */);
60-
bool end();
61-
62-
int getTotalPeerCount();
63-
int getEncryptedPeerCount();
64-
65-
int availableForWrite();
66-
size_t write(const uint8_t *data, size_t len);
67-
size_t write(uint8_t data) {
68-
return write(&data, 1);
69-
}
7075

71-
void onNewPeer(void (*cb)(const esp_now_recv_info_t *info, const uint8_t *data, int len, void *arg), void *arg);
76+
friend bool ESP_NOW_Class::removePeer(ESP_NOW_Peer&);
7277
};
7378

7479
extern ESP_NOW_Class ESP_NOW;

0 commit comments

Comments
 (0)