Bluenet  5.7.0
Bluenet, firmware for nRF52 smart home devices
Loading...
Searching...
No Matches
cs_MeshModelMulticast.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 <mesh/cs_MeshCommon.h>
11#include <third/std/function.h>
12
13extern "C" {
14#include <access.h>
15}
16
24public:
26 typedef function<void(MeshMsgEvent& msg)> callback_msg_t;
27
31 void registerMsgHandler(const callback_msg_t& closure);
32
36 void init(uint16_t modelId);
37
43 void configureSelf(dsm_handle_t appkeyHandle);
44
52
57
61 void tick(uint32_t tickCount);
62
64 void handleMsg(const access_message_rx_t* accessMsg);
65
66private:
67 const static uint8_t _queueSize = 20;
68
69 struct __attribute__((__packed__)) cs_multicast_queue_item_t {
71 uint8_t msgSize;
73 };
74
75 access_model_handle_t _accessModelHandle = ACCESS_HANDLE_INVALID;
76
77 dsm_handle_t _groupAddressHandle = DSM_HANDLE_INVALID;
78
80
82
86 uint8_t _queueIndexNext = 0;
87
92
99 int getNextItemInQueue(bool priority);
100
106
110 cs_ret_code_t sendMsg(const uint8_t* data, uint16_t len);
111};
Class that:
Definition: cs_MeshModelMulticast.h:23
void registerMsgHandler(const callback_msg_t &closure)
Register a callback function that's called when a message from the mesh is received.
callback_msg_t _msgCallback
Definition: cs_MeshModelMulticast.h:79
uint8_t _queueIndexNext
Next index in queue to send.
Definition: cs_MeshModelMulticast.h:86
void init(uint16_t modelId)
Init the model.
function< void(MeshMsgEvent &msg)> callback_msg_t
Callback function definition.
Definition: cs_MeshModelMulticast.h:26
void handleMsg(const access_message_rx_t *accessMsg)
Internal usage.
cs_ret_code_t addToQueue(MeshUtil::cs_mesh_queue_item_t &item)
Add a msg to an empty spot in the queue (transmissions == 0).
cs_multicast_queue_item_t _queue[_queueSize]
Definition: cs_MeshModelMulticast.h:81
void configureSelf(dsm_handle_t appkeyHandle)
Configure the model.
cs_ret_code_t sendMsg(const uint8_t *data, uint16_t len)
Send a message over the mesh via publish, without reply.
int getNextItemInQueue(bool priority)
Check if there is a msg in queue with more than 0 transmissions.
static const uint8_t _queueSize
Definition: cs_MeshModelMulticast.h:67
bool sendMsgFromQueue()
Get a msg from the queue, and send it.
cs_ret_code_t remFromQueue(cs_mesh_model_msg_type_t type, uint16_t id)
Remove a msg from the queue.
dsm_handle_t _groupAddressHandle
Definition: cs_MeshModelMulticast.h:77
access_model_handle_t _accessModelHandle
Definition: cs_MeshModelMulticast.h:75
void processQueue()
Send messages from queue.
void tick(uint32_t tickCount)
To be called at a regular interval.
Definition: cs_MeshMsgEvent.h:71
cs_mesh_model_msg_type_t
Definition: cs_MeshModelPackets.h:61
static constexpr uint8_t MAX_MESH_MSG_NON_SEGMENTED_SIZE
Definition: cs_MeshModelPackets.h:51
uint16_t cs_ret_code_t
Definition: cs_Typedefs.h:21
Definition: cs_MeshModelMulticast.h:69
MeshUtil::cs_mesh_queue_item_meta_data_t metaData
Definition: cs_MeshModelMulticast.h:70
uint8_t msgSize
Definition: cs_MeshModelMulticast.h:71
Data needed in each model queue.
Definition: cs_MeshCommon.h:22
Struct to queue an item.
Definition: cs_MeshCommon.h:48