Bluenet  5.7.0
Bluenet, firmware for nRF52 smart home devices
Loading...
Searching...
No Matches
cs_MeshModelUnicast.h
Go to the documentation of this file.
1/*
2 * Author: Crownstone Team
3 * Copyright: Crownstone (https://crownstone.rocks)
4 * Date: Mar 10, 2020
5 * License: LGPLv3+, Apache License 2.0, and/or MIT (triple-licensed)
6 */
7
8#pragma once
9
10#include <cfg/cs_Config.h>
11#include <mesh/cs_MeshCommon.h>
13#include <third/std/function.h>
14
15extern "C" {
16#include <access_reliable.h>
17}
18
27public:
29 typedef function<void(MeshMsgEvent& msg)> callback_msg_t;
30
34 void registerMsgHandler(const callback_msg_t& closure);
35
39 void init(uint16_t modelId);
40
46 void configureSelf(dsm_handle_t appkeyHandle);
47
52
57
61 void tick(uint32_t tickCount);
62
64 void handleMsg(const access_message_rx_t* accessMsg);
65
67 void handleReliableStatus(access_reliable_status_t status);
68
69private:
70 const static uint8_t QUEUE_SIZE = 5;
71
72 const static uint8_t QUEUE_INDEX_NONE = 255;
73
74 struct __attribute__((__packed__)) cs_unicast_queue_item_t {
78 uint8_t msgSize;
79 uint8_t* msgPtr = nullptr;
80 };
81
82 access_model_handle_t _accessModelHandle = ACCESS_HANDLE_INVALID;
83
84 dsm_handle_t _publishAddressHandle = DSM_HANDLE_INVALID;
85
87
88 access_reliable_t _accessReliableMsg;
89
90#if MESH_MODEL_TEST_MSG == 2
91 uint32_t _acked = 0;
92 uint32_t _timedout = 0;
93 uint32_t _canceled = 0;
94#endif
95
97
102
106 uint8_t _queueIndexNext = 0;
107
112 uint8_t _reliableStatus = 255;
113
117 bool _replyReceived = false;
118
120
124 void cancelQueueItem(uint8_t index);
125
129 void remQueueItem(uint8_t index);
130
135
142 int getNextItemInQueue(bool priority);
143
149
153 void checkDone();
154
163 cs_ret_code_t sendMsg(const uint8_t* msg, uint16_t msgSize, uint32_t timeoutUs);
164
168 cs_ret_code_t sendReply(const access_message_rx_t* accessMsg, const uint8_t* msg, uint16_t msgSize);
169
176
182 cs_ret_code_t setTtl(uint8_t ttl, bool temp = false);
183
185};
Class that:
Definition: cs_MeshModelUnicast.h:26
cs_ret_code_t addToQueue(MeshUtil::cs_mesh_queue_item_t &item)
Add a msg the queue.
void handleMsg(const access_message_rx_t *accessMsg)
Internal usage.
uint8_t _reliableStatus
Status of the reliable msg.
Definition: cs_MeshModelUnicast.h:112
void handleReliableStatus(access_reliable_status_t status)
Internal usage.
dsm_handle_t _publishAddressHandle
Definition: cs_MeshModelUnicast.h:84
void remQueueItem(uint8_t index)
Remove an item from the queue.
access_model_handle_t _accessModelHandle
Definition: cs_MeshModelUnicast.h:82
void registerMsgHandler(const callback_msg_t &closure)
Register a callback function that's called when a message from the mesh is received.
void cancelQueueItem(uint8_t index)
If item at index is in progress, cancel it.
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.
function< void(MeshMsgEvent &msg)> callback_msg_t
Callback function definition.
Definition: cs_MeshModelUnicast.h:29
cs_ret_code_t setPublishAddress(stone_id_t id)
Sets the publish address.
uint8_t _ttl
Definition: cs_MeshModelUnicast.h:119
static const uint8_t QUEUE_SIZE
Definition: cs_MeshModelUnicast.h:70
void tick(uint32_t tickCount)
To be called at a regular interval.
uint8_t _queueIndexNext
Next index in queue to send.
Definition: cs_MeshModelUnicast.h:106
bool sendMsgFromQueue()
Get a msg from the queue, and send it.
void processQueue()
Send messages from queue.
void configureSelf(dsm_handle_t appkeyHandle)
Configure the model.
cs_unicast_queue_item_t _queue[QUEUE_SIZE]
Definition: cs_MeshModelUnicast.h:96
cs_ret_code_t setTtl(uint8_t ttl, bool temp=false)
Sets the TTL.
cs_ret_code_t sendMsg(const uint8_t *msg, uint16_t msgSize, uint32_t timeoutUs)
Send a unicast message over the mesh.
void checkDone()
Check if a message is done (success or timed out).
int getNextItemInQueue(bool priority)
Check if there is a msg in queue with more than 0 transmissions.
callback_msg_t _msgCallback
Definition: cs_MeshModelUnicast.h:86
void sendFailedResultToUart(cs_unicast_queue_item_t &item, cs_ret_code_t retCode)
cs_ret_code_t remFromQueue(cs_mesh_model_msg_type_t type, uint16_t id)
Remove a msg from the queue.
bool _replyReceived
Whether the reply message has been received.
Definition: cs_MeshModelUnicast.h:117
access_reliable_t _accessReliableMsg
Definition: cs_MeshModelUnicast.h:88
void init(uint16_t modelId)
Init the model.
static const uint8_t QUEUE_INDEX_NONE
Definition: cs_MeshModelUnicast.h:72
uint8_t _queueIndexInProgress
Queue index of message currently being sent.
Definition: cs_MeshModelUnicast.h:101
Definition: cs_MeshMsgEvent.h:71
#define CS_MESH_DEFAULT_TTL
Definition: cs_Config.h:211
cs_mesh_model_msg_type_t
Definition: cs_MeshModelPackets.h:61
uint16_t cs_control_cmd_t
Definition: cs_Typedefs.h:22
uint8_t stone_id_t
Definition: cs_Typedefs.h:23
uint16_t cs_ret_code_t
Definition: cs_Typedefs.h:21
Definition: cs_MeshModelUnicast.h:74
cs_control_cmd_t controlCommand
Definition: cs_MeshModelUnicast.h:77
stone_id_t targetId
Definition: cs_MeshModelUnicast.h:76
uint8_t msgSize
Definition: cs_MeshModelUnicast.h:78
MeshUtil::cs_mesh_queue_item_meta_data_t metaData
Definition: cs_MeshModelUnicast.h:75
Data needed in each model queue.
Definition: cs_MeshCommon.h:22
Struct to queue an item.
Definition: cs_MeshCommon.h:48