Skip to content

Commit c9a4923

Browse files
authored
[Espnow] modify the peers management. (#2302)
* add extra addPeer() * remove the disabling the use_send_ack while sending broadcast messages. * add clearPeers() method.
1 parent 48c8879 commit c9a4923

File tree

1 file changed

+33
-14
lines changed

1 file changed

+33
-14
lines changed

src/AudioTools/Communication/ESPNowStream.h

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -216,41 +216,60 @@ class ESPNowStream : public BaseStream {
216216
return result;
217217
}
218218

219-
/// Adds a peer to which we can send info or from which we can receive info
220-
bool addPeer(const char* address) {
219+
/// Adds a peer to which we can send info or from which we can receive info
220+
bool addPeer(const uint8_t* address) {
221221
esp_now_peer_info_t peer;
222-
peer.channel = cfg.channel;
222+
memcpy(peer.peer_addr, address, ESP_NOW_ETH_ALEN);
223223

224+
peer.channel = cfg.channel;
224225
peer.ifidx = getInterface();
225226
peer.encrypt = false;
226227

227-
if (StrView(address).equals(cfg.mac_address)) {
228-
LOGW("Did not add own address as peer");
229-
return true;
230-
}
231-
232228
if (isEncrypted()) {
233229
peer.encrypt = true;
234230
strncpy((char*)peer.lmk, cfg.local_master_key, 16);
235231
}
232+
return addPeer(peer);
233+
}
234+
235+
/// Adds a peer to which we can send info or from which we can receive info
236+
bool addPeer(const char* address) {
237+
if (StrView(address).equals(cfg.mac_address)) {
238+
LOGW("Did not add own address as peer");
239+
return true;
240+
}
236241

237-
if (!str2mac(address, peer.peer_addr)) {
242+
uint8_t mac[] = {0,0,0,0,0,0};
243+
if (!str2mac(address, (uint8_t *) &mac)) {
238244
LOGE("addPeer - Invalid address: %s", address);
239245
return false;
240246
}
241-
return addPeer(peer);
247+
return addPeer((const uint8_t*) &mac);
242248
}
243249

244250
/// Adds the broadcast peer (FF:FF:FF:FF:FF:FF) to send to all devices in
245251
/// range. Note: Broadcast does not support acknowledgments
246252
bool addBroadcastPeer() {
247-
if (cfg.use_send_ack) {
248-
LOGW("Broadcast peer does not support use_send_ack");
249-
cfg.use_send_ack = false;
253+
return addPeer(BROADCAST_MAC);
254+
}
255+
256+
bool clearPeers() {
257+
esp_now_peer_info_t peer;
258+
uint8_t breakout_counter = 0;
259+
while ((esp_now_fetch_peer(true, &peer) == ESP_OK) &&
260+
(breakout_counter < ESP_NOW_MAX_TOTAL_PEER_NUM + 1) ) {
261+
esp_now_del_peer(peer.peer_addr);
262+
breakout_counter ++;
250263
}
251-
return addPeer(BROADCAST_MAC_STR);
264+
265+
if (breakout_counter == ESP_NOW_MAX_TOTAL_PEER_NUM+1) {
266+
LOGE("Not all Peers seems to be removed.");
267+
}
268+
// return true when all peers are removed.
269+
return breakout_counter <= ESP_NOW_MAX_TOTAL_PEER_NUM ;
252270
}
253271

272+
254273
/// Writes the data - sends it to all registered peers
255274
size_t write(const uint8_t* data, size_t len) override {
256275
// nullptr means send to all registered peers

0 commit comments

Comments
 (0)