@@ -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