Zephyr Project API  3.2.0
A Scalable Open Source RTOS
msg.h
Go to the documentation of this file.
1
5/*
6 * Copyright (c) 2021 Nordic Semiconductor ASA
7 *
8 * SPDX-License-Identifier: Apache-2.0
9 */
10#ifndef ZEPHYR_INCLUDE_BLUETOOTH_MESH_MSG_H_
11#define ZEPHYR_INCLUDE_BLUETOOTH_MESH_MSG_H_
12
20#include <zephyr/kernel.h>
21#include <zephyr/net/buf.h>
22
23#ifdef __cplusplus
24extern "C" {
25#endif
26
28#define BT_MESH_MIC_SHORT 4
30#define BT_MESH_MIC_LONG 8
31
37#define BT_MESH_MODEL_OP_LEN(_op) ((_op) <= 0xff ? 1 : (_op) <= 0xffff ? 2 : 3)
38
48#define BT_MESH_MODEL_BUF_LEN(_op, _payload_len) \
49 (BT_MESH_MODEL_OP_LEN(_op) + (_payload_len) + BT_MESH_MIC_SHORT)
50
60#define BT_MESH_MODEL_BUF_LEN_LONG_MIC(_op, _payload_len) \
61 (BT_MESH_MODEL_OP_LEN(_op) + (_payload_len) + BT_MESH_MIC_LONG)
62
70#define BT_MESH_MODEL_BUF_DEFINE(_buf, _op, _payload_len) \
71 NET_BUF_SIMPLE_DEFINE(_buf, BT_MESH_MODEL_BUF_LEN(_op, (_payload_len)))
72
77
80
83
86
89
92
95
98};
99
109
114 struct k_sem sem;
117 void *user_data;
118};
119
127static inline void bt_mesh_msg_ack_ctx_init(struct bt_mesh_msg_ack_ctx *ack)
128{
129 k_sem_init(&ack->sem, 0, 1);
130}
131
138static inline void bt_mesh_msg_ack_ctx_reset(struct bt_mesh_msg_ack_ctx *ack)
139{
140 k_sem_reset(&ack->sem);
141}
142
151
165 uint32_t op, uint16_t dst, void *user_data);
166
174static inline bool bt_mesh_msg_ack_ctx_busy(struct bt_mesh_msg_ack_ctx *ack)
175{
176 return (ack->op != 0);
177}
178
189
196static inline void bt_mesh_msg_ack_ctx_rx(struct bt_mesh_msg_ack_ctx *ack)
197{
198 k_sem_give(&ack->sem);
199}
200
212 uint32_t op, uint16_t addr, void **user_data);
213
214#ifdef __cplusplus
215}
216#endif
217
222#endif /* ZEPHYR_INCLUDE_BLUETOOTH_MESH_MSG_H_ */
ZTEST_BMEM int timeout
Definition: main.c:31
int bt_mesh_msg_ack_ctx_prepare(struct bt_mesh_msg_ack_ctx *ack, uint32_t op, uint16_t dst, void *user_data)
Prepare an acknowledged message context for the incoming message to wait.
static void bt_mesh_msg_ack_ctx_rx(struct bt_mesh_msg_ack_ctx *ack)
Mark a message as acknowledged.
Definition: msg.h:196
void bt_mesh_msg_ack_ctx_clear(struct bt_mesh_msg_ack_ctx *ack)
Clear parameters of an acknowledged message context.
int bt_mesh_msg_ack_ctx_wait(struct bt_mesh_msg_ack_ctx *ack, k_timeout_t timeout)
Wait for a message acknowledge.
static void bt_mesh_msg_ack_ctx_reset(struct bt_mesh_msg_ack_ctx *ack)
Reset the synchronization semaphore in an acknowledged message context.
Definition: msg.h:138
static bool bt_mesh_msg_ack_ctx_busy(struct bt_mesh_msg_ack_ctx *ack)
Check if the acknowledged message context is initialized with an opcode.
Definition: msg.h:174
void bt_mesh_model_msg_init(struct net_buf_simple *msg, uint32_t opcode)
Initialize a model message.
static void bt_mesh_msg_ack_ctx_init(struct bt_mesh_msg_ack_ctx *ack)
Initialize an acknowledged message context.
Definition: msg.h:127
bool bt_mesh_msg_ack_ctx_match(const struct bt_mesh_msg_ack_ctx *ack, uint32_t op, uint16_t addr, void **user_data)
Check if an opcode and address of a message matches the expected one.
void k_sem_reset(struct k_sem *sem)
Resets a semaphore's count to zero.
void k_sem_give(struct k_sem *sem)
Give a semaphore.
int k_sem_init(struct k_sem *sem, unsigned int initial_count, unsigned int limit)
Initialize a semaphore.
Public kernel APIs.
Buffer management.
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89
__INT8_TYPE__ int8_t
Definition: stdint.h:72
Definition: msg.h:113
uint32_t op
Definition: msg.h:115
void * user_data
Definition: msg.h:117
struct k_sem sem
Definition: msg.h:114
uint16_t dst
Definition: msg.h:116
Definition: msg.h:74
uint16_t net_idx
Definition: msg.h:76
int8_t recv_rssi
Definition: msg.h:88
bool send_rel
Definition: msg.h:94
uint16_t addr
Definition: msg.h:82
uint8_t send_ttl
Definition: msg.h:97
uint16_t app_idx
Definition: msg.h:79
uint16_t recv_dst
Definition: msg.h:85
uint8_t recv_ttl
Definition: msg.h:91
Kernel timeout type.
Definition: sys_clock.h:65
Simple network buffer representation.
Definition: buf.h:82
static void msg(uint64_t c64)
Definition: main.c:17
static const intptr_t user_data[5]
Definition: main.c:588