Bluenet  5.7.0
Bluenet, firmware for nRF52 smart home devices
Loading...
Searching...
No Matches
MeshModelMulticastAcked Class Referenceabstract

Class that: More...

#include <cs_MeshModelMulticastAcked.h>

Collaboration diagram for MeshModelMulticastAcked:

Classes

struct  cs_multicast_acked_queue_item_t
 

Public Types

typedef function< void(MeshMsgEvent &msg)> callback_msg_t
 Callback function definition. More...
 

Public Member Functions

void registerMsgHandler (const callback_msg_t &closure)
 Register a callback function that's called when a message from the mesh is received. More...
 
void init (uint16_t modelId)
 Init the model. More...
 
void configureSelf (dsm_handle_t appkeyHandle)
 Configure the model. More...
 
cs_ret_code_t addToQueue (MeshUtil::cs_mesh_queue_item_t &item)
 Add a msg to an empty spot in the queue (transmissions == 0). More...
 
cs_ret_code_t remFromQueue (cs_mesh_model_msg_type_t type, uint16_t id)
 Remove a msg from the queue. More...
 
void tick (uint32_t tickCount)
 To be called at a regular interval. More...
 
void handleMsg (const access_message_rx_t *accessMsg)
 Internal usage. More...
 

Private Member Functions

 TYPIFY (CONFIG_CROWNSTONE_ID) _ownStoneId=0
 
void cancelQueueItem (uint8_t index)
 If item at index is in progress, cancel it. More...
 
void remQueueItem (uint8_t index)
 Remove an item from the queue. More...
 
void processQueue ()
 Send messages from queue. More...
 
int getNextItemInQueue (bool priority)
 Check if there is a msg in queue with more than 0 transmissions. More...
 
bool sendMsgFromQueue ()
 Get a msg from the queue, and send it. More...
 
bool prepareForMsg (cs_multicast_acked_queue_item_t *item)
 Prepare for sending a new message. More...
 
cs_ret_code_t sendMsg (const uint8_t *data, uint16_t len)
 Send a message over the mesh via publish, without reply. More...
 
void sendReply (const access_message_rx_t *accessMsg, const uint8_t *data, uint16_t len)
 Send an ack message. More...
 
void handleReply (MeshMsgEvent &msg)
 Handle an ack message. More...
 
void checkDone ()
 Check if ack from every stone ID in the list has been received. More...
 
void retryMsg ()
 Retry sending (parts of) the message. More...
 

Private Attributes

access_model_handle_t _accessModelHandle = ACCESS_HANDLE_INVALID
 
dsm_handle_t _groupAddressHandle = DSM_HANDLE_INVALID
 
callback_msg_t _msgCallback = nullptr
 
cs_multicast_acked_queue_item_t _queue [QUEUE_SIZE]
 
uint8_t _queueIndexInProgress = QUEUE_INDEX_NONE
 Queue index of message currently being sent. More...
 
uint8_t _queueIndexNext = 0
 Next index in queue to send. More...
 
BitmaskVarSize _ackedStonesBitmask
 Bitmask of acked stones. More...
 
uint16_t _processCallsLeft
 Number of processQueue() calls left until timeout. More...
 

Static Private Attributes

static const uint8_t QUEUE_SIZE = 5
 
static const uint8_t QUEUE_INDEX_NONE = 255
 

Detailed Description

Class that:

  • Sends and receives multicast acked messages.
  • Queues messages to be sent.
  • Handles queue 1 by 1.

Member Typedef Documentation

◆ callback_msg_t

Callback function definition.

Member Function Documentation

◆ addToQueue()

cs_ret_code_t MeshModelMulticastAcked::addToQueue ( MeshUtil::cs_mesh_queue_item_t item)

Add a msg to an empty spot in the queue (transmissions == 0).

Start looking at SendIndex, then reverse iterate over the queue. Then set the new SendIndex at the newly added item, so that it will be send first. We do the reverse iterate, so that the old SendIndex should be handled early (for a large enough queue).

◆ cancelQueueItem()

void MeshModelMulticastAcked::cancelQueueItem ( uint8_t  index)
private

If item at index is in progress, cancel it.

◆ checkDone()

void MeshModelMulticastAcked::checkDone ( )
private

Check if ack from every stone ID in the list has been received.

Also check if timed out.

◆ configureSelf()

void MeshModelMulticastAcked::configureSelf ( dsm_handle_t  appkeyHandle)

Configure the model.

Subscribes, and sets publish address.

◆ getNextItemInQueue()

int MeshModelMulticastAcked::getNextItemInQueue ( bool  priority)
private

Check if there is a msg in queue with more than 0 transmissions.

If so, return that index. Start looking at index SendIndex as that item should be sent first. Returns -1 if none found.

◆ handleMsg()

void MeshModelMulticastAcked::handleMsg ( const access_message_rx_t *  accessMsg)

Internal usage.

◆ handleReply()

void MeshModelMulticastAcked::handleReply ( MeshMsgEvent msg)
private

Handle an ack message.

◆ init()

void MeshModelMulticastAcked::init ( uint16_t  modelId)

Init the model.

◆ prepareForMsg()

bool MeshModelMulticastAcked::prepareForMsg ( cs_multicast_acked_queue_item_t item)
private

Prepare for sending a new message.

◆ processQueue()

void MeshModelMulticastAcked::processQueue ( )
private

Send messages from queue.

◆ registerMsgHandler()

void MeshModelMulticastAcked::registerMsgHandler ( const callback_msg_t closure)

Register a callback function that's called when a message from the mesh is received.

◆ remFromQueue()

cs_ret_code_t MeshModelMulticastAcked::remFromQueue ( cs_mesh_model_msg_type_t  type,
uint16_t  id 
)

Remove a msg from the queue.

◆ remQueueItem()

void MeshModelMulticastAcked::remQueueItem ( uint8_t  index)
private

Remove an item from the queue.

◆ retryMsg()

void MeshModelMulticastAcked::retryMsg ( )
private

Retry sending (parts of) the message.

◆ sendMsg()

cs_ret_code_t MeshModelMulticastAcked::sendMsg ( const uint8_t *  data,
uint16_t  len 
)
private

Send a message over the mesh via publish, without reply.

◆ sendMsgFromQueue()

bool MeshModelMulticastAcked::sendMsgFromQueue ( )
private

Get a msg from the queue, and send it.

Returns true when message was sent, false when no more messages to be sent.

◆ sendReply()

void MeshModelMulticastAcked::sendReply ( const access_message_rx_t *  accessMsg,
const uint8_t *  data,
uint16_t  len 
)
private

Send an ack message.

◆ tick()

void MeshModelMulticastAcked::tick ( uint32_t  tickCount)

To be called at a regular interval.

◆ TYPIFY()

MeshModelMulticastAcked::TYPIFY ( CONFIG_CROWNSTONE_ID  )
privatepure virtual

Member Data Documentation

◆ _accessModelHandle

access_model_handle_t MeshModelMulticastAcked::_accessModelHandle = ACCESS_HANDLE_INVALID
private

◆ _ackedStonesBitmask

BitmaskVarSize MeshModelMulticastAcked::_ackedStonesBitmask
private

Bitmask of acked stones.

If the Nth bit is set, the ack of Nth stone ID in the list has been received.

◆ _groupAddressHandle

dsm_handle_t MeshModelMulticastAcked::_groupAddressHandle = DSM_HANDLE_INVALID
private

◆ _msgCallback

callback_msg_t MeshModelMulticastAcked::_msgCallback = nullptr
private

◆ _processCallsLeft

uint16_t MeshModelMulticastAcked::_processCallsLeft
private

Number of processQueue() calls left until timeout.

◆ _queue

cs_multicast_acked_queue_item_t MeshModelMulticastAcked::_queue[QUEUE_SIZE]
private

◆ _queueIndexInProgress

uint8_t MeshModelMulticastAcked::_queueIndexInProgress = QUEUE_INDEX_NONE
private

Queue index of message currently being sent.

◆ _queueIndexNext

uint8_t MeshModelMulticastAcked::_queueIndexNext = 0
private

Next index in queue to send.

◆ QUEUE_INDEX_NONE

const uint8_t MeshModelMulticastAcked::QUEUE_INDEX_NONE = 255
staticprivate

◆ QUEUE_SIZE

const uint8_t MeshModelMulticastAcked::QUEUE_SIZE = 5
staticprivate

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