arduino-audio-tools
Loading...
Searching...
No Matches
ESPNowStream Class Reference

ESPNow as Arduino Stream. When use_send_ack is true we prevent any buffer overflows by blocking writes until the previous packet has been confirmed. When no acknowledgments are used, you might need to throttle the send speed to prevent any buffer overflow on the receiver side. More...

#include <ESPNowStream.h>

Inheritance diagram for ESPNowStream:
BaseStream Stream Stream Print Print Print Print

Public Member Functions

 ESPNowStream ()
 ~ESPNowStream ()
bool addBroadcastPeer ()
bool addPeer (const char *address)
 Adds a peer to which we can send info or from which we can receive info.
bool addPeer (const uint8_t *address)
 Adds a peer to which we can send info or from which we can receive info.
bool addPeer (esp_now_peer_info_t &peer)
 Adds a peer to which we can send info or from which we can receive info.
template<size_t size>
bool addPeers (const char *(&array)[size])
 Adds an array of peers.
template<size_t N>
bool addPeers (const uint8_t(&array)[N][6])
 Adds an array of peers.
int available () override
int availableForWrite () override
bool begin ()
 Initialization of ESPNow.
virtual bool begin (ESPNowStreamConfig cfg)
 Initialization of ESPNow incl WIFI.
bool clearPeers ()
 Deletes all registered peers.
ESPNowStreamConfig defaultConfig ()
virtual void end ()
 DeInitialization.
virtual void flush () override
virtual void flush () override
BufferRTOS< uint8_t > & getBuffer ()
 provides access to the receive buffer
float getBufferPercent ()
 provides how much the receive buffer is filled (in percent)
uint8_t getChannel ()
 Provides the WiFi Channel.
uint32_t getLastIoSuccessTime () const
 time when we were able to send or receive the last packet successfully
const char * macAddress ()
 Returns the mac address of the current ESP32.
 operator bool ()
 operator bool ()
size_t readBytes (uint8_t *data, size_t len) override
 Reeds the data from the peers.
void setChannel (uint8_t ch)
 Defines the WiFi Channel.
void setReceiveCallback (esp_now_recv_cb_t cb)
void setSendCallback (esp_now_send_cb_t cb)
 Defines an alternative send callback.
void setWriteBufferSize (int size)
void setWriteBufferSize (int size)
virtual size_t write (uint8_t ch) override
size_t write (const char *peer, const uint8_t *data, size_t len)
 Writes the data - sends it to all the indicated peer mac address string.
size_t write (const uint8_t *data, size_t len) override
 Writes the data - sends it to all registered peers.
size_t write (const uint8_t *peer, const uint8_t *data, size_t len)
 Writes the data - sends it to all the peers.

Protected Member Functions

wifi_interface_t getInterface ()
virtual void handle_recv_cb (const uint8_t *mac_addr, const uint8_t *data, int data_len, bool broadcast, uint8_t rssi)
virtual void handle_send_cb (const uint8_t *mac_addr, esp_now_send_status_t status)
bool handleQueueError (esp_err_t rc, int &retry_count)
 Handles errors when queuing packets.
bool handleTransmissionResult (int &retry_count)
 Handles the result of packet transmission (after queuing).
bool initWiFi (wifi_mode_t mode)
bool isEncrypted ()
const char * mac2str (const uint8_t *array)
void refillReadBuffer ()
 Refill small read buffer (e.g. 8 bytes) to avoid single byte reads when calling read().
void refillReadBuffer ()
 Refill small read buffer (e.g. 8 bytes) to avoid single byte reads when calling read().
void resetAvailableToWrite ()
virtual bool sendPacket (const uint8_t *data, size_t len, int &retry_count, const uint8_t *destination=nullptr)
 Sends a single packet with retry logic.
bool setup ()
 Initialization.
bool setupMAC ()
void setupReceiveBuffer ()
void setupSemaphore ()
bool setupWiFi ()
bool str2mac (const char *mac, uint8_t *values)

Static Protected Member Functions

static int bufferAvailableForWrite ()
static void default_recv_cb (const esp_now_recv_info *info, const uint8_t *data, int data_len)
static void default_send_cb (const wifi_tx_info_t *tx_info, esp_now_send_status_t status)

Protected Attributes

int _timeout = 10
volatile size_t available_to_write = 0
BufferRTOS< uint8_t > buffer {0}
ESPNowStreamConfig cfg
bool has_peers = false
bool is_broadcast = false
bool is_init = false
uint32_t last_io_success_time = 0
volatile bool last_send_success = true
bool read_ready = false
esp_now_recv_cb_t receive = default_recv_cb
esp_now_send_cb_t send = default_send_cb
RingBuffer< uint8_t > tmp_in {0}
RingBuffer< uint8_t > tmp_out {0}
int write_buffer_size = 8
SemaphoreHandle_t xSemaphore = nullptr

Detailed Description

ESPNow as Arduino Stream. When use_send_ack is true we prevent any buffer overflows by blocking writes until the previous packet has been confirmed. When no acknowledgments are used, you might need to throttle the send speed to prevent any buffer overflow on the receiver side.

Note
If multiple receivers are in range, only the first one which sends an acknowledgment will be used as coordinator.
Author
Phil Schatzmann

Constructor & Destructor Documentation

◆ ESPNowStream()

ESPNowStream ( )
inline

◆ ~ESPNowStream()

~ESPNowStream ( )
inline

Member Function Documentation

◆ addBroadcastPeer()

bool addBroadcastPeer ( )
inline

Adds the broadcast peer (FF:FF:FF:FF:FF:FF) to send to all devices in range. Note: Broadcast does not support acknowledgments

◆ addPeer() [1/3]

bool addPeer ( const char * address)
inline

Adds a peer to which we can send info or from which we can receive info.

◆ addPeer() [2/3]

bool addPeer ( const uint8_t * address)
inline

Adds a peer to which we can send info or from which we can receive info.

◆ addPeer() [3/3]

bool addPeer ( esp_now_peer_info_t & peer)
inline

Adds a peer to which we can send info or from which we can receive info.

◆ addPeers() [1/2]

template<size_t size>
bool addPeers ( const char *(&) array[size])
inline

Adds an array of peers.

◆ addPeers() [2/2]

template<size_t N>
bool addPeers ( const uint8_t(&) array[N][6])
inline

Adds an array of peers.

◆ available()

int available ( )
inlineoverridevirtual

Reimplemented from BaseStream.

◆ availableForWrite()

int availableForWrite ( )
inlineoverridevirtual

Reimplemented from BaseStream.

◆ begin() [1/2]

bool begin ( )
inlinevirtual

Initialization of ESPNow.

Reimplemented from BaseStream.

◆ begin() [2/2]

virtual bool begin ( ESPNowStreamConfig cfg)
inlinevirtual

Initialization of ESPNow incl WIFI.

◆ bufferAvailableForWrite()

int bufferAvailableForWrite ( )
inlinestaticprotected

◆ clearPeers()

bool clearPeers ( )
inline

Deletes all registered peers.

◆ default_recv_cb()

void default_recv_cb ( const esp_now_recv_info * info,
const uint8_t * data,
int data_len )
inlinestaticprotected

◆ default_send_cb()

void default_send_cb ( const wifi_tx_info_t * tx_info,
esp_now_send_status_t status )
inlinestaticprotected

◆ defaultConfig()

ESPNowStreamConfig defaultConfig ( )
inline

◆ end()

virtual void end ( )
inlinevirtual

DeInitialization.

Reimplemented from BaseStream.

◆ flush() [1/2]

◆ flush() [2/2]

◆ getBuffer()

BufferRTOS< uint8_t > & getBuffer ( )
inline

provides access to the receive buffer

◆ getBufferPercent()

float getBufferPercent ( )
inline

provides how much the receive buffer is filled (in percent)

◆ getChannel()

uint8_t getChannel ( )
inline

Provides the WiFi Channel.

◆ getInterface()

wifi_interface_t getInterface ( )
inlineprotected

◆ getLastIoSuccessTime()

uint32_t getLastIoSuccessTime ( ) const
inline

time when we were able to send or receive the last packet successfully

◆ handle_recv_cb()

virtual void handle_recv_cb ( const uint8_t * mac_addr,
const uint8_t * data,
int data_len,
bool broadcast,
uint8_t rssi )
inlineprotectedvirtual

◆ handle_send_cb()

virtual void handle_send_cb ( const uint8_t * mac_addr,
esp_now_send_status_t status )
inlineprotectedvirtual

◆ handleQueueError()

bool handleQueueError ( esp_err_t rc,
int & retry_count )
inlineprotected

Handles errors when queuing packets.

◆ handleTransmissionResult()

bool handleTransmissionResult ( int & retry_count)
inlineprotected

Handles the result of packet transmission (after queuing).

◆ initWiFi()

bool initWiFi ( wifi_mode_t mode)
inlineprotected

◆ isEncrypted()

bool isEncrypted ( )
inlineprotected

◆ mac2str()

const char * mac2str ( const uint8_t * array)
inlineprotected

◆ macAddress()

const char * macAddress ( )
inline

Returns the mac address of the current ESP32.

◆ operator bool() [1/2]

operator bool ( )
inlineinherited

◆ operator bool() [2/2]

operator bool ( )
inlineinherited

◆ readBytes()

size_t readBytes ( uint8_t * data,
size_t len )
inlineoverridevirtual

Reeds the data from the peers.

Implements BaseStream.

◆ refillReadBuffer() [1/2]

void refillReadBuffer ( )
inlineprotectedinherited

Refill small read buffer (e.g. 8 bytes) to avoid single byte reads when calling read().

◆ refillReadBuffer() [2/2]

void refillReadBuffer ( )
inlineprotectedinherited

Refill small read buffer (e.g. 8 bytes) to avoid single byte reads when calling read().

◆ resetAvailableToWrite()

void resetAvailableToWrite ( )
inlineprotected

◆ sendPacket()

virtual bool sendPacket ( const uint8_t * data,
size_t len,
int & retry_count,
const uint8_t * destination = nullptr )
inlineprotectedvirtual

Sends a single packet with retry logic.

◆ setChannel()

void setChannel ( uint8_t ch)
inline

Defines the WiFi Channel.

◆ setReceiveCallback()

void setReceiveCallback ( esp_now_recv_cb_t cb)
inline

Defines the Receive Callback - Deactivates the readBytes and available() methods!

◆ setSendCallback()

void setSendCallback ( esp_now_send_cb_t cb)
inline

Defines an alternative send callback.

◆ setup()

bool setup ( )
inlineprotected

Initialization.

◆ setupMAC()

bool setupMAC ( )
inlineprotected

◆ setupReceiveBuffer()

void setupReceiveBuffer ( )
inlineprotected

◆ setupSemaphore()

void setupSemaphore ( )
inlineprotected

◆ setupWiFi()

bool setupWiFi ( )
inlineprotected

◆ setWriteBufferSize() [1/2]

void setWriteBufferSize ( int size)
inlineinherited

◆ setWriteBufferSize() [2/2]

void setWriteBufferSize ( int size)
inlineinherited

◆ str2mac()

bool str2mac ( const char * mac,
uint8_t * values )
inlineprotected

◆ write() [1/4]

◆ write() [2/4]

size_t write ( const char * peer,
const uint8_t * data,
size_t len )
inline

Writes the data - sends it to all the indicated peer mac address string.

◆ write() [3/4]

size_t write ( const uint8_t * data,
size_t len )
inlineoverridevirtual

Writes the data - sends it to all registered peers.

Implements BaseStream.

◆ write() [4/4]

size_t write ( const uint8_t * peer,
const uint8_t * data,
size_t len )
inline

Writes the data - sends it to all the peers.

Member Data Documentation

◆ _timeout

int _timeout = 10
protectedinherited

◆ available_to_write

volatile size_t available_to_write = 0
protected

◆ buffer

BufferRTOS<uint8_t> buffer {0}
protected

◆ cfg

ESPNowStreamConfig cfg
protected

◆ has_peers

bool has_peers = false
protected

◆ is_broadcast

bool is_broadcast = false
protected

◆ is_init

bool is_init = false
protected

◆ last_io_success_time

uint32_t last_io_success_time = 0
protected

◆ last_send_success

volatile bool last_send_success = true
protected

◆ read_ready

bool read_ready = false
protected

◆ receive

esp_now_recv_cb_t receive = default_recv_cb
protected

◆ send

esp_now_send_cb_t send = default_send_cb
protected

◆ tmp_in

RingBuffer< uint8_t > tmp_in {0}
protectedinherited

◆ tmp_out

RingBuffer< uint8_t > tmp_out {0}
protectedinherited

◆ write_buffer_size

int write_buffer_size = 8
protectedinherited

◆ xSemaphore

SemaphoreHandle_t xSemaphore = nullptr
protected

The documentation for this class was generated from the following file: