SPSP
Simple publish-subscribe protocol. Connects low power IoT clients to MQTT.
All Classes Files Functions Variables Typedefs Enumerations
Classes | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
SPSP::LocalLayers::ESPNOW::Adapter Class Reference

ESP-NOW adapter for ESP platform. More...

#include <espnow_adapter.hpp>

Inheritance diagram for SPSP::LocalLayers::ESPNOW::Adapter:
Inheritance graph
[legend]
Collaboration diagram for SPSP::LocalLayers::ESPNOW::Adapter:
Collaboration graph
[legend]

Classes

struct  EventFD
 Wrapper of event file descriptor. More...
 
struct  RawSocket
 Wrapper of raw socket. More...
 

Public Member Functions

 Adapter ()
 Constructs a new ESP-NOW adapter. More...
 
 ~Adapter ()
 Destroys the adapter. More...
 
void setRecvCb (AdapterRecvCb cb) noexcept
 Sets receive callback. More...
 
AdapterRecvCb getRecvCb () const noexcept
 Gets receive callback. More...
 
void setSendCb (AdapterSendCb cb) noexcept
 Sets send callback. More...
 
AdapterSendCb getSendCb () const noexcept
 Gets send callback. More...
 
void send (const LocalAddrT &dst, const std::string &data)
 Sends local message. More...
 
void addPeer (const LocalAddrT &peer)
 Adds peer to peer list. More...
 
void removePeer (const LocalAddrT &peer)
 Removes peer from peer list. More...
 
 Adapter (const std::string &ifname)
 Constructs a new ESP-NOW adapter. More...
 
 ~Adapter ()
 Destroys the adapter. More...
 
void setRecvCb (AdapterRecvCb cb) noexcept
 Sets receive callback. More...
 
AdapterRecvCb getRecvCb () const noexcept
 Gets receive callback. More...
 
void setSendCb (AdapterSendCb cb) noexcept
 Sets send callback. More...
 
AdapterSendCb getSendCb () const noexcept
 Gets send callback. More...
 
void send (const LocalAddrT &dst, const std::string &data)
 Sends local message. More...
 
void addPeer (const LocalAddrT &peer)
 Adds peer to peer list. More...
 
void removePeer (const LocalAddrT &peer)
 Removes peer from peer list. More...
 
void setRecvCb (AdapterRecvCb cb) noexcept
 Sets receive callback. More...
 
AdapterRecvCb getRecvCb () const noexcept
 Gets receive callback. More...
 
void setSendCb (AdapterSendCb cb) noexcept
 Sets send callback. More...
 
AdapterSendCb getSendCb () const noexcept
 Gets send callback. More...
 
virtual void send (const LocalAddrT &dst, const std::string &data) const
 Sends local message. More...
 
void addPeer (const LocalAddrT &peer)
 Adds peer to peer list. More...
 
void removePeer (const LocalAddrT &peer)
 Removes peer from peer list. More...
 

Protected Member Functions

void handlerThread ()
 Function of thread handling incoming packets. More...
 
void attachSocketFilter ()
 Attaches BPF filter to the socket. More...
 
void processIEEE80211RawPacket (const uint8_t *data, size_t len)
 Processes incoming raw IEEE 802.11 packet. More...
 
bool parseRadiotap (const uint8_t *data, size_t len, IEEE80211::RadiotapParsedFields &rpf)
 Parses radiotap header of IEEE 802.11 frame. More...
 
void processIEEE80211RawAction (const uint8_t *data, size_t len, int rssi)
 Processes incoming raw IEEE 802.11 action frame. More...
 
void processIEEE80211RawAck (const uint8_t *data, size_t len, int rssi)
 Processes incoming raw IEEE 802.11 acknowledgement. More...
 

Protected Attributes

RawSocket m_sock
 Socket.
 
EventFD m_eventFd
 Epoll event file descriptor.
 
int m_epollFd
 Epoll file descriptor.
 
LocalAddrT m_localAddr
 Cached local MAC address.
 
std::thread m_thread
 Handler thread.
 

Detailed Description

ESP-NOW adapter for ESP platform.

ESP-NOW adapter for testing.

ESP-NOW adapter for Linux platform.

Low level API for ESP-NOW communication.

Implements IAdapter interface.

Only one ESPNOW instance can use this at a time and there may be only one Adapter instance at a time.

Low level API for ESP-NOW communication.

Implements IAdapter interface.

Definition at line 30 of file espidf/spsp/espnow_adapter.hpp.

Constructor & Destructor Documentation

◆ Adapter() [1/2]

SPSP::LocalLayers::ESPNOW::Adapter::Adapter ( )

Constructs a new ESP-NOW adapter.

Exceptions
AdapterErrorwhen any call to underlaying library fails

◆ ~Adapter() [1/2]

SPSP::LocalLayers::ESPNOW::Adapter::~Adapter ( )

Destroys the adapter.

◆ Adapter() [2/2]

SPSP::LocalLayers::ESPNOW::Adapter::Adapter ( const std::string &  ifname)

Constructs a new ESP-NOW adapter.

Starts packet capture on 802.11 interface identified by ifname.

Parameters
ifnameInterface name (must be in monitor mode)
Exceptions
AdapterErrorwhen any call to underlaying library fails

◆ ~Adapter() [2/2]

SPSP::LocalLayers::ESPNOW::Adapter::~Adapter ( )

Destroys the adapter.

Member Function Documentation

◆ addPeer() [1/3]

void SPSP::LocalLayers::ESPNOW::Adapter::addPeer ( const LocalAddrT peer)
inlinevirtual

Adds peer to peer list.

Parameters
peerPeer address
Exceptions
AdapterErrorwhen peer can't be added

Implements SPSP::LocalLayers::ESPNOW::IAdapter.

Definition at line 93 of file testing/spsp/espnow_adapter.hpp.

◆ addPeer() [2/3]

void SPSP::LocalLayers::ESPNOW::Adapter::addPeer ( const LocalAddrT peer)
virtual

Adds peer to peer list.

Parameters
peerPeer address
Exceptions
AdapterErrorwhen peer can't be added

Implements SPSP::LocalLayers::ESPNOW::IAdapter.

◆ addPeer() [3/3]

void SPSP::LocalLayers::ESPNOW::Adapter::addPeer ( const LocalAddrT peer)
inlinevirtual

Adds peer to peer list.

Doesn't do anything on Linux plaform.

Parameters
peerPeer address

Implements SPSP::LocalLayers::ESPNOW::IAdapter.

Definition at line 131 of file linux/spsp/espnow_adapter.hpp.

◆ attachSocketFilter()

void SPSP::LocalLayers::ESPNOW::Adapter::attachSocketFilter ( )
protected

Attaches BPF filter to the socket.

Exceptions
AdapterErrorwhen any call to underlaying library fails

◆ getRecvCb() [1/3]

AdapterRecvCb SPSP::LocalLayers::ESPNOW::Adapter::getRecvCb ( ) const
inlinenoexcept

Gets receive callback.

Parameters
cbCallback

Definition at line 48 of file testing/spsp/espnow_adapter.hpp.

◆ getRecvCb() [2/3]

AdapterRecvCb SPSP::LocalLayers::ESPNOW::Adapter::getRecvCb ( ) const
noexcept

Gets receive callback.

Parameters
cbCallback

◆ getRecvCb() [3/3]

AdapterRecvCb SPSP::LocalLayers::ESPNOW::Adapter::getRecvCb ( ) const
inlinenoexcept

Gets receive callback.

Parameters
cbCallback

Definition at line 96 of file linux/spsp/espnow_adapter.hpp.

◆ getSendCb() [1/3]

AdapterSendCb SPSP::LocalLayers::ESPNOW::Adapter::getSendCb ( ) const
inlinenoexcept

Gets send callback.

Parameters
cbCallback

Definition at line 68 of file testing/spsp/espnow_adapter.hpp.

◆ getSendCb() [2/3]

AdapterSendCb SPSP::LocalLayers::ESPNOW::Adapter::getSendCb ( ) const
noexcept

Gets send callback.

Parameters
cbCallback

◆ getSendCb() [3/3]

AdapterSendCb SPSP::LocalLayers::ESPNOW::Adapter::getSendCb ( ) const
inlinenoexcept

Gets send callback.

Parameters
cbCallback

Definition at line 110 of file linux/spsp/espnow_adapter.hpp.

◆ handlerThread()

void SPSP::LocalLayers::ESPNOW::Adapter::handlerThread ( )
protected

Function of thread handling incoming packets.

◆ parseRadiotap()

bool SPSP::LocalLayers::ESPNOW::Adapter::parseRadiotap ( const uint8_t *  data,
size_t  len,
IEEE80211::RadiotapParsedFields rpf 
)
protected

Parses radiotap header of IEEE 802.11 frame.

Parameters
dataRaw data
lenData length
rpfParsed radiotap fields. Those not present are left unmodified!
Returns
true If the header is valid
false If the header is invalid

◆ processIEEE80211RawAck()

void SPSP::LocalLayers::ESPNOW::Adapter::processIEEE80211RawAck ( const uint8_t *  data,
size_t  len,
int  rssi 
)
protected

Processes incoming raw IEEE 802.11 acknowledgement.

Parameters
dataRaw data
lenData length
rssiReceived signal strength indicator (in dBm)

◆ processIEEE80211RawAction()

void SPSP::LocalLayers::ESPNOW::Adapter::processIEEE80211RawAction ( const uint8_t *  data,
size_t  len,
int  rssi 
)
protected

Processes incoming raw IEEE 802.11 action frame.

Parameters
dataRaw data
lenData length
rssiReceived signal strength indicator (in dBm)

◆ processIEEE80211RawPacket()

void SPSP::LocalLayers::ESPNOW::Adapter::processIEEE80211RawPacket ( const uint8_t *  data,
size_t  len 
)
protected

Processes incoming raw IEEE 802.11 packet.

Parameters
dataRaw data
lenData length

◆ removePeer() [1/3]

void SPSP::LocalLayers::ESPNOW::Adapter::removePeer ( const LocalAddrT peer)
virtual

Removes peer from peer list.

Parameters
peerPeer address
Exceptions
AdapterErrorwhen peer can't be removed

Implements SPSP::LocalLayers::ESPNOW::IAdapter.

◆ removePeer() [2/3]

void SPSP::LocalLayers::ESPNOW::Adapter::removePeer ( const LocalAddrT peer)
inlinevirtual

Removes peer from peer list.

Parameters
peerPeer address
Exceptions
AdapterErrorwhen peer can't be removed

Implements SPSP::LocalLayers::ESPNOW::IAdapter.

Definition at line 104 of file testing/spsp/espnow_adapter.hpp.

◆ removePeer() [3/3]

void SPSP::LocalLayers::ESPNOW::Adapter::removePeer ( const LocalAddrT peer)
inlinevirtual

Removes peer from peer list.

Doesn't do anything on Linux plaform.

Parameters
peerPeer address

Implements SPSP::LocalLayers::ESPNOW::IAdapter.

Definition at line 140 of file linux/spsp/espnow_adapter.hpp.

◆ send() [1/3]

void SPSP::LocalLayers::ESPNOW::Adapter::send ( const LocalAddrT dst,
const std::string &  data 
)
virtual

Sends local message.

Parameters
dstDestination address
dataRaw data to be sent
Exceptions
AdapterErrorwhen call to send function fails (not when packet undelivered)

Implements SPSP::LocalLayers::ESPNOW::IAdapter.

◆ send() [2/3]

void SPSP::LocalLayers::ESPNOW::Adapter::send ( const LocalAddrT dst,
const std::string &  data 
)
virtual

Sends local message.

Injects IEEE 802.11 packet onto the packet capture interface.

Parameters
dstDestination address
dataRaw data to be sent
Exceptions
AdapterErrorwhen call to send function fails (not when packet undelivered)

Implements SPSP::LocalLayers::ESPNOW::IAdapter.

◆ send() [3/3]

virtual void SPSP::LocalLayers::ESPNOW::Adapter::send ( const LocalAddrT dst,
const std::string &  data 
) const
inlinevirtual

Sends local message.

Parameters
dstDestination address
dataRaw data to be sent
Exceptions
AdapterErrorwhen call to send function fails (not when packet undelivered)

Definition at line 81 of file testing/spsp/espnow_adapter.hpp.

◆ setRecvCb() [1/3]

void SPSP::LocalLayers::ESPNOW::Adapter::setRecvCb ( AdapterRecvCb  cb)
inlinevirtualnoexcept

Sets receive callback.

Callback should be called in new thread.

Parameters
cbCallback

Implements SPSP::LocalLayers::ESPNOW::IAdapter.

Definition at line 38 of file testing/spsp/espnow_adapter.hpp.

◆ setRecvCb() [2/3]

void SPSP::LocalLayers::ESPNOW::Adapter::setRecvCb ( AdapterRecvCb  cb)
virtualnoexcept

Sets receive callback.

Callback should be called in new thread.

Parameters
cbCallback

Implements SPSP::LocalLayers::ESPNOW::IAdapter.

◆ setRecvCb() [3/3]

void SPSP::LocalLayers::ESPNOW::Adapter::setRecvCb ( AdapterRecvCb  cb)
inlinevirtualnoexcept

Sets receive callback.

Callback should be called in new thread.

Parameters
cbCallback

Implements SPSP::LocalLayers::ESPNOW::IAdapter.

Definition at line 89 of file linux/spsp/espnow_adapter.hpp.

◆ setSendCb() [1/3]

void SPSP::LocalLayers::ESPNOW::Adapter::setSendCb ( AdapterSendCb  cb)
inlinevirtualnoexcept

Sets send callback.

Parameters
cbCallback

Implements SPSP::LocalLayers::ESPNOW::IAdapter.

Definition at line 58 of file testing/spsp/espnow_adapter.hpp.

◆ setSendCb() [2/3]

void SPSP::LocalLayers::ESPNOW::Adapter::setSendCb ( AdapterSendCb  cb)
virtualnoexcept

Sets send callback.

Parameters
cbCallback

Implements SPSP::LocalLayers::ESPNOW::IAdapter.

◆ setSendCb() [3/3]

void SPSP::LocalLayers::ESPNOW::Adapter::setSendCb ( AdapterSendCb  cb)
inlinevirtualnoexcept

Sets send callback.

Parameters
cbCallback

Implements SPSP::LocalLayers::ESPNOW::IAdapter.

Definition at line 103 of file linux/spsp/espnow_adapter.hpp.


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