当前位置: 首页 > news >正文

【沁恒蓝牙mesh】数据收发接口与应用层模型传递

本文主要描述了沁恒蓝牙mesh SDK的蓝牙数据收发接口,以及应用层的回调函数解析以及模型传递

这里写目录标题

  • 1. 数据收发接口
    • 1.1【发送数据】
    • 1.2 【数据接收】
  • 2. 应用层模型分析

1. 数据收发接口

1.1【发送数据】

/*=====================(1)接口1 ==================================*/
/*接口一:沁恒厂家封装的函数接口*/
int vendor_model_srv_send(uint16_t addr, uint8_t *pData, uint16_t len);  //  目的地址、数据、长度-> vendor_message_srv_send_trans(); // 只发送,无应答-> adv_srv_trans_send();-> bt_mesh_model_send();  // lib 库,数据发送
/*
注意通过调用 vendor_model_srv_send 函数,可以将数据发送给指定地址,可以是组地址,也可以是单播地址。
例程的应用层发送次数为 5 次,如果实际使用环境较复杂,可以提高发送次数,保证传输成功率TTL 是默认是 3,如果网络较大,应把默认值根据需要转发的次数改大。
*//*=====================(2)接口2 ==================================*/
/*接口二:蓝牙 mesh 协议栈 lib库接口*/
int bt_mesh_model_send( struct bt_mesh_model *model,struct bt_mesh_msg_ctx *ctx, struct net_buf_simple *msg,const struct bt_mesh_send_cb *cb, void *cb_data );

1.2 【数据接收】

当模型收到数据,首先进入初始化模型的操作码对应处理函数,随后会在处理函数中调用回调函数上报给应用层

  • 接收 MESH 数据 :协议栈收到 MESH 数据后,会调用 vendor_model_srv_rsp_handler 回调函数通知应用

以demo为例,自定义模型以及初始化的过程为: 以 adv_vendor工程为例

<font color='blue'> ****</font>/*(1)定义模型应用密钥和订阅地址----注意:组地址的范围是0xc000-0xffff*/
uint16_t vnd_model_srv_keys[CONFIG_MESH_MOD_KEY_COUNT_DEF] = {BLE_MESH_KEY_UNUSED};   /*一个模型一个key*/
uint16_t vnd_model_srv_groups[CONFIG_MESH_MOD_GROUP_COUNT_DEF] = {BLE_MESH_ADDR_UNASSIGNED};  /*一个模型可被分到6个组中*//*(2)定义透传模型的op操作码*/
#define OP_VENDOR_MESSAGE_TRANSPARENT_CFM    BLE_MESH_MODEL_OP_3(0xCB, CID_WCH)   /*0xcb07d7*/
#define OP_VENDOR_MESSAGE_TRANSPARENT_WRT    BLE_MESH_MODEL_OP_3(0xCC, CID_WCH)   /*0xcc07d7*/
#define OP_VENDOR_MESSAGE_TRANSPARENT_ACK    BLE_MESH_MODEL_OP_3(0xCD, CID_WCH)	  /*0xcd07d7*/
#define OP_VENDOR_MESSAGE_TRANSPARENT_IND    BLE_MESH_MODEL_OP_3(0xCE, CID_WCH)
#define OP_VENDOR_MESSAGE_TRANSPARENT_MSG    BLE_MESH_MODEL_OP_3(0xCF, CID_WCH)/*(3)定义op对应的处理函数*/
const struct bt_mesh_model_op vnd_model_srv_op[] = {{OP_VENDOR_MESSAGE_TRANSPARENT_MSG, 0, vendor_message_srv_trans}, /*长度为0表示数据的长度非固定值,op操作码以及对应的处理函数*/{OP_VENDOR_MESSAGE_TRANSPARENT_WRT, 0, vendor_message_srv_write},{OP_VENDOR_MESSAGE_TRANSPARENT_ACK, 0, vendor_message_srv_ack},BLE_MESH_MODEL_OP_END,
};/*(4) 定义模型配置字 */
struct bt_mesh_vendor_model_srv vendor_model_srv = {.srv_tid.trans_tid = 0xFF,/*应用层注册的此模型内操作码回调函数,收到op的数据后,执行op对应的处理函数,处理完数据后,应用层注册的此模型内操作码回调函数*/ .handler = vendor_model_srv_rsp_handler, 
};/*(5)自定义加载模型*/
struct bt_mesh_model vnd_models[] = {BLE_MESH_MODEL_VND_CB(CID_WCH, BLE_MESH_MODEL_ID_WCH_SRV, vnd_model_srv_op,          /* op对应的处理函数*/NULL, vnd_model_srv_keys,		   /* 模型应用密钥 */vnd_model_srv_groups, 	   /* 和订阅地址 */&vendor_model_srv,         /* 模型配置字 */NULL),
};/*(6)初始化以及模型数据传递的过程*/
void App_Init();-> vendor_model_srv_init(vnd_models);   {vendor_model_srv->model = vnd_models} /*将自定义的模型传递到 vendor_model_srv->model 中*/

1️⃣ 接收到的数据是如何通知到应用层的?

  1. 应用层初始化中注册应用层事件处理函数
    void App_Init() {
    App_TaskID = TMOS_ProcessEventRegister(App_ProcessEvent);
    }
  2. 通过模型以及代码框架配置,mesh网络节点收到数据时会调用应用层注册的回调函数 vendor_model_srv_rsp_handler(),在该回调函数中解析收到的蓝牙数据包指令,根据解析的结果有不同事件,从而启动不同的 服务函数。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-US4A4CtM-1690340820581)(pic/image-20230721165027864.png)]

2. 应用层模型分析

自定义模型结构体:bt_mesh_model

自定义模型加载接口为结构体数组:vnd_models[],其中 vnd_models[7] 的元素 =
vendor_model_srv,在 vendor_model_srv中定义了 handler 函数 模型服务回调函数 vendor_model_srv_rsp_handler

在这里插入图片描述

相关文章:

【沁恒蓝牙mesh】数据收发接口与应用层模型传递

本文主要描述了沁恒蓝牙mesh SDK的蓝牙数据收发接口&#xff0c;以及应用层的回调函数解析以及模型传递 这里写目录标题 1. 数据收发接口1.1【发送数据】1.2 【数据接收】 2. 应用层模型分析 1. 数据收发接口 1.1【发送数据】 /*&#xff08;1&#xff09;接口1 */ /*接口一&…...

Java类关系之代理(代理模式)

在Java中&#xff0c;如果一个类需要使用另一个类的方法&#xff0c;我们可以使用继承的方式实现&#xff0c;那么问题来了&#xff0c;如果这个类恰恰在逻辑关系上不能使用继承怎么办呢&#xff1f;比如说&#xff0c;飞机和控制台这两个类&#xff0c;控制台的方法有上下左右…...

java: 无法访问redis.clients.jedis.JedisPoolConfig

问题描述: 在编译java springboot程序的时候报错 java: 无法访问redis.clients.jedis.JedisPoolConfig 找不到redis.clients.jedis.JedisPoolConfig的类文件 问题分析 该问题是由于找不到JedisPoolConfig包导致的,很可能是没有添加相关的依赖 问题解决 在pom文件中添加依赖项…...

基于java中学教务管理系统设计与实现

摘要 随着现代技术的不断发展&#xff0c;计算机已经深度的应用到了当下的各个行业之中&#xff0c;教育行业也不例外。计算机对教育行业中的教务管理等内容的帮助&#xff0c;使得教职工从传统的手工办公像计算机辅助阶段迈进&#xff0c;并且实现了非常好的发展。现在的学校在…...

vscode设置java -Xmx最大堆内存

如果在vscode中直接运行java程序&#xff0c;想要改下每次运行的最大堆内存&#xff0c;按照如下修改 一、vscode安装java插件 当然前提是vscode在应用管理中已经安装了java语言的插件&#xff0c;Debugger for Java,如下图所示 二、CommandShiftP打开配置搜索框 三、搜索…...

组件开发系列--Apache Commons Chain

一、前言 Commons-chain是apache commons中的一个子项目,主要被使用在"责任链"的场景中,struts中action的调用过程,就是使用了"chain"框架做支撑.如果你的项目中,也有基于此种场景的需求,可以考虑使用它. 在责任链模式里&#xff0c;很多对象由每一个对象对…...

60 # http 的基本概念

什么是 HTTP&#xff1f; 通常的网络是在 TCP/IP 协议族的基础上来运作的&#xff0c;HTTP 是一个子集。http 基于 tcp 的协议&#xff0c;在 tcp 的基础上增加了一些规范&#xff0c;就是 header&#xff0c;学习 http 就是学习每个 header 它有什么作用。 TCP/IP 协议族 协…...

云计算迎来中场战役,MaaS或将成为弯道超车“新赛点”

科技云报道原创。 没有人能预见未来&#xff0c;但我们可以因循常识&#xff0c;去捕捉技术创新演进的节奏韵脚。 2023年最火的风口莫过于大模型。 2022年底&#xff0c;由美国初创企业OpenAI开发的聊天应用ChatGPT引爆市场&#xff0c;生成式AI成为科技市场热点&#xff0c…...

最新基于Citespace、vosviewer、R语言的文献计量学可视化分析技术及全流程文献可视化SCI论文高效写作方法

文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技术手段和方法的运用&#xff0c;可直观的展示主题的研究发展历程、研究现状、研究…...

Hive调优集锦(2)

3.8 Join 优化 Join优化整体原则&#xff1a; 1、优先过滤后再进行 join 操作&#xff0c;最大限度的减少参与 join 的数据量 2、小表 join 大表&#xff0c;最好启动 mapjoin&#xff0c;hive 自动启用 mapjoin, 小表不能超过25M&#xff0c;可以更改 3、Join on的条件相同的…...

一文谈谈Git

"And if forever lasts till now Alright" 为什么要有git&#xff1f; 想象一下&#xff0c;现如今你的老师同时叫你和张三&#xff0c;各自写一份下半年的学习计划交给他。 可是你的老师是一个极其"较真"的人&#xff0c;发现你俩写的学习计划太"水&…...

嵌入式数据库之SQLite

1.SQLite简介 轻量化&#xff0c;易用的嵌入式数据库&#xff0c;用于设备端的数据管理&#xff0c;可以理解成单点的数据库。传统服务器型数据 库用于管理多端设备&#xff0c;更加复杂。 SQLite是一个无服务器的数据库&#xff0c;是自包含的。这也称为嵌入式数据库&#x…...

idea下tomcat运行乱码问题解决方法

idea虚拟机选项添加-Dfile.encodingUTF-8...

人工智能TensorFlow MNIST手写数字识别——实战篇

上期文章TensorFlow手写数字-训练篇,我们训练了我们的神经网络,本期使用上次训练的模型,来识别手写数字(本期构建TensorFlow神经网络代码为上期文章分享代码) http://scs.ryerson.ca/~aharley/vis/conv/ 0、插入第三方库 from PIL import Image# 处理图片 import tensorf…...

Vue 本地应用-计数器

逻辑是在点击按钮的时候执行&#xff0c;那么要为按钮绑定点击事件&#xff0c;整体语法如下&#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>首页</title><link href"" type"text/c…...

深入了解HTTP代理在网络爬虫与SEO实践中的角色

随着互联网的不断发展&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;成为各大企业和网站重要的推广手段。然而&#xff0c;传统的SEO方法已经难以应对日益复杂和智能化的搜索引擎算法。在这样的背景下&#xff0c;HTTP代理爬虫作为一种重要的工具&#xff0c;正在逐渐被…...

使用docker搭建nacos

使用docker搭建nacos docker搭建最新版nacosMySQL下简历nacos配置数据表拉取镜像创建挂载目录启动容器访问nacos docker搭建nacos 2.0版本 docker搭建最新版nacos 最近想在自己服务器上搭建一个nacos服务&#xff0c;以前一直在本地的windows上使用&#xff0c;而且使用着naco…...

flask中的常用装饰器

flask中的常用装饰器 Flask 框架中提供了一些内置的装饰器&#xff0c;这些装饰器可以帮助我们更方便地开发 Web 应用。以下是一些常用的 Flask 装饰器&#xff1a; app.route()&#xff1a;这可能是 Flask 中最常用的装饰器。它用于将 URL 路由绑定到一个 Python 函数&#x…...

SQL基础语法 | 增删改查、分组、排序、limit

Shell命令框和Navicat联合使用 一、数据库层面 创建数据库 postgres# CREATE DATABASE runoobdb;查看数据库 postgres# \l选择数据库 postgres# \c runoobdb删除数据库 postgres# DROP DATABASE runoobdb;二、表格层面 创建表格 CREATE TABLE table_name(字段名称 字段数据类型…...

QT: 用定时器完成闹钟的实现

闹钟项目&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimerEvent> #include <QTime> #include <QDebug> #include <QTextToSpeech> #include <QMessageBox> #include <QTimer>QT_BEGIN…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...