Bluenet  5.7.0
Bluenet, firmware for nRF52 smart home devices
Loading...
Searching...
No Matches
MeshModelUnicast Class Reference

Class that: More...

#include <cs_MeshModelUnicast.h>

Collaboration diagram for MeshModelUnicast:

Classes

struct  cs_unicast_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 the queue. 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...
 
void handleReliableStatus (access_reliable_status_t status)
 Internal usage. More...
 

Private Member Functions

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...
 
void checkDone ()
 Check if a message is done (success or timed out). More...
 
cs_ret_code_t sendMsg (const uint8_t *msg, uint16_t msgSize, uint32_t timeoutUs)
 Send a unicast message over the mesh. More...
 
cs_ret_code_t sendReply (const access_message_rx_t *accessMsg, const uint8_t *msg, uint16_t msgSize)
 Send a reply when receiving a reliable message. More...
 
cs_ret_code_t setPublishAddress (stone_id_t id)
 Sets the publish address. More...
 
cs_ret_code_t setTtl (uint8_t ttl, bool temp=false)
 Sets the TTL. More...
 
void sendFailedResultToUart (cs_unicast_queue_item_t &item, cs_ret_code_t retCode)
 

Private Attributes

access_model_handle_t _accessModelHandle = ACCESS_HANDLE_INVALID
 
dsm_handle_t _publishAddressHandle = DSM_HANDLE_INVALID
 
callback_msg_t _msgCallback = nullptr
 
access_reliable_t _accessReliableMsg
 
cs_unicast_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...
 
uint8_t _reliableStatus = 255
 Status of the reliable msg. More...
 
bool _replyReceived = false
 Whether the reply message has been received. More...
 
uint8_t _ttl = CS_MESH_DEFAULT_TTL
 

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 targeted acked messages.
  • Uses reliable segmented messages for this.
  • Queues messages to be sent.
  • Handles queue 1 by 1.

Member Typedef Documentation

◆ callback_msg_t

typedef function<void(MeshMsgEvent& msg)> MeshModelUnicast::callback_msg_t

Callback function definition.

Member Function Documentation

◆ addToQueue()

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

Add a msg the queue.

◆ cancelQueueItem()

void MeshModelUnicast::cancelQueueItem ( uint8_t  index)
private

If item at index is in progress, cancel it.

◆ checkDone()

void MeshModelUnicast::checkDone ( )
private

Check if a message is done (success or timed out).

◆ configureSelf()

void MeshModelUnicast::configureSelf ( dsm_handle_t  appkeyHandle)

Configure the model.

Subscribes, and sets publish address.

◆ getNextItemInQueue()

int MeshModelUnicast::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 MeshModelUnicast::handleMsg ( const access_message_rx_t *  accessMsg)

Internal usage.

◆ handleReliableStatus()

void MeshModelUnicast::handleReliableStatus ( access_reliable_status_t  status)

Internal usage.

◆ init()

void MeshModelUnicast::init ( uint16_t  modelId)

Init the model.

◆ processQueue()

void MeshModelUnicast::processQueue ( )
private

Send messages from queue.

◆ registerMsgHandler()

void MeshModelUnicast::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 MeshModelUnicast::remFromQueue ( cs_mesh_model_msg_type_t  type,
uint16_t  id 
)

Remove a msg from the queue.

◆ remQueueItem()

void MeshModelUnicast::remQueueItem ( uint8_t  index)
private

Remove an item from the queue.

◆ sendFailedResultToUart()

void MeshModelUnicast::sendFailedResultToUart ( cs_unicast_queue_item_t item,
cs_ret_code_t  retCode 
)
private

◆ sendMsg()

cs_ret_code_t MeshModelUnicast::sendMsg ( const uint8_t *  msg,
uint16_t  msgSize,
uint32_t  timeoutUs 
)
private

Send a unicast message over the mesh.

This message will be have to acked or timed out, before the next message can be sent.

Message data has to stay in ram until acked or timedout!

◆ sendMsgFromQueue()

bool MeshModelUnicast::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()

cs_ret_code_t MeshModelUnicast::sendReply ( const access_message_rx_t *  accessMsg,
const uint8_t *  msg,
uint16_t  msgSize 
)
private

Send a reply when receiving a reliable message.

◆ setPublishAddress()

cs_ret_code_t MeshModelUnicast::setPublishAddress ( stone_id_t  id)
private

Sets the publish address.

Do this while no message is in progress.

◆ setTtl()

cs_ret_code_t MeshModelUnicast::setTtl ( uint8_t  ttl,
bool  temp = false 
)
private

Sets the TTL.

Do this while no message is in progress.

◆ tick()

void MeshModelUnicast::tick ( uint32_t  tickCount)

To be called at a regular interval.

Member Data Documentation

◆ _accessModelHandle

access_model_handle_t MeshModelUnicast::_accessModelHandle = ACCESS_HANDLE_INVALID
private

◆ _accessReliableMsg

access_reliable_t MeshModelUnicast::_accessReliableMsg
private

◆ _msgCallback

callback_msg_t MeshModelUnicast::_msgCallback = nullptr
private

◆ _publishAddressHandle

dsm_handle_t MeshModelUnicast::_publishAddressHandle = DSM_HANDLE_INVALID
private

◆ _queue

cs_unicast_queue_item_t MeshModelUnicast::_queue[QUEUE_SIZE]
private

◆ _queueIndexInProgress

uint8_t MeshModelUnicast::_queueIndexInProgress = QUEUE_INDEX_NONE
private

Queue index of message currently being sent.

◆ _queueIndexNext

uint8_t MeshModelUnicast::_queueIndexNext = 0
private

Next index in queue to send.

◆ _reliableStatus

uint8_t MeshModelUnicast::_reliableStatus = 255
private

Status of the reliable msg.

255 for no status.

◆ _replyReceived

bool MeshModelUnicast::_replyReceived = false
private

Whether the reply message has been received.

◆ _ttl

uint8_t MeshModelUnicast::_ttl = CS_MESH_DEFAULT_TTL
private

◆ QUEUE_INDEX_NONE

const uint8_t MeshModelUnicast::QUEUE_INDEX_NONE = 255
staticprivate

◆ QUEUE_SIZE

const uint8_t MeshModelUnicast::QUEUE_SIZE = 5
staticprivate

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