芯科蓝牙BG27开发笔记7-配置蓝牙参数

基础的要求

1. 设置广播参数为间隔1000ms,不停止

2. 添加广播消息,含01、03、09、FF TYPE

3. 设置蓝牙通信间隔参数为320ms、400ms、2、4000ms超时

3. 配置发射功率为较低

4. 配置GATT所有数据与原Nordic 配置一致

为了解决以上疑问,需要多看一些示例代码。目前还没有看到有价值的例程。但是可以查看代码中的API接口说明,多试几次,可以找到。

// 自定义的广播数据
uint8_t advData[] = {0x02, 0x01, 0x06, 0x03, 0x03, 0x30, 0xFF, 0x03, 0xFF, 0xAA, 0x55, 0x0B, 0x09, 0x53, 0x55, 0x4E, 0x4C, 0x41, 0x4E, 0x54, 0x30, 0x30, 0x31};//0x02 01 06 03 03 30 FF 03 FF AA 55 0B 09 53 55 4E 4C 41 4E 54 30 30 31
/**************************************************************************//*** Bluetooth stack event handler.* This overrides the dummy weak implementation.** @param[in] evt Event coming from the Bluetooth stack.*****************************************************************************/
void sl_bt_on_event(sl_bt_msg_t *evt)
{sl_status_t sc;static int cntt = 0;bd_addr address;uint8_t address_type;switch (SL_BT_MSG_ID(evt->header)) {// -------------------------------// This event indicates the device has started and the radio is ready.// Do not call any stack command before receiving this boot event!case sl_bt_evt_system_boot_id:// Extract unique ID from BT Address.sc = sl_bt_system_get_identity_address(&address, &address_type);app_assert_status(sc);app_log_info("Bluetooth %s address: %02X:%02X:%02X:%02X:%02X:%02X\n",address_type ? "static random" : "public device",address.addr[5],address.addr[4],address.addr[3],address.addr[2],address.addr[1],address.addr[0]);// Create an advertising set.sc = sl_bt_advertiser_create_set(&advertising_set_handle);app_assert_status(sc);// 查找API,可以发现多个函数可以被使用//sl_bt_advertiser_set_data(advertising_set_handle, 0, sizeof(advData), advData);//sl_bt_advertiser_set_tx_power//sl_bt_legacy_advertiser_set_data// Generate data for advertisingsc = sl_bt_legacy_advertiser_generate_data(advertising_set_handle,sl_bt_advertiser_general_discoverable);app_assert_status(sc);// Set advertising interval to 100ms.// 设置广播间隔为1000ms,一直广播不停止sc = sl_bt_advertiser_set_timing(advertising_set_handle,1600, // min. adv. interval (milliseconds * 1.6) 320ms1600, // max. adv. interval (milliseconds * 1.6) 400ms0,   // adv. duration0);  // max. num. adv. eventsapp_assert_status(sc);// 设置广播消息,放在此处有效而不能紧靠放在sl_bt_advertiser_create_set之后sc = sl_bt_legacy_advertiser_set_data(advertising_set_handle, sl_bt_advertiser_advertising_data_packet, sizeof(advData), advData);app_assert_status(sc);// Start advertising and enable connections.sc = sl_bt_legacy_advertiser_start(advertising_set_handle,sl_bt_advertiser_connectable_scannable);app_assert_status(sc);

注意,广播消息的设置,要有正确的顺序才行;

由于完整有用的例程不多,所以只能阅读【sl_bt_api.h】文件,除了函数,也需要看看结构体定义,多试是能将接口用起来。

蓝牙属性配置UI的使用

ID必须要有,不然event中找不到此信号

代码中对属性数据的设置:

在这里,似乎只能不使用Generic Attribute服务,而不能使其为空,这是UI配置工具的局限吧,具体如何设置为空暂不考虑。

蓝牙参数的初始化配置,顺便地,,看下其他所有可配置的组件:

设置连接参数

广播参数在上边代码中已经说明。那连接参数呢?

经过测试,需要放到连接打开时间中,调用“sl_bt_connection_set_parameters”

    // -------------------------------// This event indicates that a new connection was opened.case sl_bt_evt_connection_opened_id:app_log_info("Connection opened.\n");// evt_connection_opened发生之后sl_bt_connection_set_parameters(evt->data.evt_connection_opened.connection, 256, 320, 0, 400, 0, 0x7FFF); //320ms-400ms的通信间隔//sl_bt_connection_set_parameters(evt->data.evt_connection_opened.connection, 10, 20, 0, 400, 0, 0x7FFF); //12.5ms-25ms的通信间隔break;

如何验证这个链接参数设置成功呢?

借助ssv5集成的功率监控:

放大电流曲线图,可以清晰识别出通信阶段的蓝牙连接间隔。

注意,连接间隔受APP侧的控制,调试app可以调整此参数。此处设置相当于设置了一个默认值。具体的内容还有待了解。

使用app_timer

添加timer模块:

参考吞吐量例程,可知其用法:

#include "app_timer.h"static app_timer_t refresh_timer;static void refresh_timer_callback(app_timer_t *timer,void *data)
{(void)timer;(void)data;timer_on_refresh_rssi();
}/**************************************************************************//*** Start RSSI refresh timer*****************************************************************************/
void timer_refresh_rssi_start(void)
{// Start refresh timersl_status_t sc;sc = app_timer_start(&refresh_timer,THROUGHPUT_CENTRAL_REFRESH_TIMER_PERIOD,refresh_timer_callback,NULL,true);app_assert_status(sc);
}/**************************************************************************//*** Stop RSSI refresh timer*****************************************************************************/
void timer_refresh_rssi_stop(void)
{// Stop refresh timersl_status_t sc;sc = app_timer_stop(&refresh_timer);app_assert_status(sc);
}/**************************************************************************//*** Event handler for timer*****************************************************************************/
void timer_on_refresh_rssi(void)
{sl_status_t sc;if (connection_handle_central != SL_BT_INVALID_CONNECTION_HANDLE  && central_state.state != THROUGHPUT_STATE_TEST) {sc = sl_bt_connection_get_rssi(connection_handle_central);app_assert_status(sc);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/135426.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

error:03000086:digital envelope routines::initialization error问题解决

目录 问题描述:error:03000086:digital envelope routines::initialization error 问题原因:nodejs V17 版本发布了 OpenSSL3.0 对算法和秘钥大小增加了更为严格的限制,nodeJs v17 之前版本没影响,但 V17 和之后版本会出现这个错…

【大规模 MIMO 检测】基于ADMM的大型MU-MIMO无穷大范数检测研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

在MySQL中使用VARCHAR字段进行日期筛选

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

ubuntu+.net6+docker 应用部署教程

先期工作 1、本地首先安装 Docker Desktop 2、本地装linux in windows 3、生成镜像 后期工作 1、云服务器部署 生成镜像方法 1、生成Dockerfile配置文件 开发工具visual studio 2022 如果项目已经存在,可以选中项目,右键点击->选择添加Docker…

C#,数值计算——Hashtable的计算方法与源程序

1 文本格式 using System; using System.Collections; using System.Collections.Generic; namespace Legalsoft.Truffer { public abstract class Hashtable<K> { private int nhash { get; set; } private int nmax { get; set; } pr…

C# 实现迷宫游戏

智能提示&#xff1a; /// <summary>/// 迷宫/// </summary>internal class Maze : IDisposable{private MazeCell[,] cells;private readonly Stack<MazeCell> stack new Stack<MazeCell>();private readonly Random rand new Random();private int…

Nvm任意切换node版本号

前言&#xff1a; nvm&#xff08;Node Version Manager&#xff09;是一个用于管理Node.js版本的工具。它允许您在同一台计算机上同时安装和切换不同版本的Node.js。使用nvm&#xff0c;您可以轻松地在项目之间切换Node.js版本&#xff0c;而无需手动安装和卸载不同的版本。这…

简单的手机电脑无线传输方案(android@windows)

文章目录 abstractwindows浏览android文件环境准备客户端软件无线网络链接步骤其他方法 手机浏览电脑文件公网局域网everythingpython http.server abstract windows访问android文件 android访问桌面系统上的文件 windows浏览android文件 环境准备 客户端软件 android手机…

Nginx限制每秒请求次数,限制每秒连接次数,下载速度限制

Nginx限制每秒请求次数,限制每秒连接次数,下载速度限制。 为了防止网站被恶意攻击,总是需要做一些防护措施 最外层的web服务器是Nginx,于是寻找 nginx 的一些关于防护措施的配置,记录在此 一些变量 首先列举出会使用到的一些变量 限制请求数 首先需要定义限制区域,在…

leetcode 817. 链表组件(java)

链表组件 题目描述HashSet 模拟 题目描述 给定链表头结点 head&#xff0c;该链表上的每个结点都有一个 唯一的整型值 。同时给定列表 nums&#xff0c;该列表是上述链表中整型值的一个子集。 返回列表 nums 中组件的个数&#xff0c;这里对组件的定义为&#xff1a;链表中一段…

FPGA project : dht11 温湿度传感器

没有硬件&#xff0c;过几天上板测试。 module dht11(input wire sys_clk ,input wire sys_rst_n ,input wire key ,inout wire dht11 ,output wire ds ,output wire …

安卓判断是否是模拟器,适配主流雷电,MUMU,夜神,逍遥

前言 最近游戏项目组又有新的要求&#xff0c;对于数据上报和数据统计接口&#xff0c;尽可能的具体化&#xff0c;比如是否是模拟器&#xff0c;模拟器的型号&#xff0c;品牌等&#xff0c;都要求统计&#xff0c;后续模拟器玩家在活动发放&#xff0c;安全风控等方面也易于…

uniapp开发小程序中实现骨架屏

第一步&#xff1a;小程序中实现骨架屏在微信开发者工具中点击生成骨架屏&#xff1a; 第二步&#xff1a;复制html代码&#xff0c;到骨架屏vue组件汇中再把之前写的样式代码引入进去&#xff1a; import ../../pages/user/user.css; 第三步&#xff1a;组件中引入骨架屏&am…

【干货】有效削减工厂“隐性”成本的策略

导读 在资源限制条件下&#xff0c;通过企业成本管理提高资源的利用效率&#xff0c;使有限的经济资源生产出更多的产品、创造出更多的价值&#xff0c;达到节约增产的目的&#xff0c;也是企业成本管理的重要目标。通过对大多数企业进行调研&#xff0c;发现企业成本在以下方…

大数据-玩转数据-Flink CEP编程

一、Flink CEP FlinkCEP(Complex event processing for Flink) 是在Flink实现的复杂事件处理库。它可以让你在无界流中检测出特定的数据&#xff0c;有机会掌握数据中重要的那部分。 是一种基于动态环境中事件流的分析技术&#xff0c;事件在这里通常是有意义的状态变化&#…

JDK8源码阅读环境配置

说明 环境 jdk 版本&#xff1a;1.8.0_381 系统&#xff1a;macos 13.5.1 Intel 目的 学习 jdk8 源码&#xff0c;并能自定注释。 新建 java 工程 在 idea 中新建 java 工程&#xff0c;注意并非 maven 工程。如下图&#xff1a;完成后&#xff0c;如下图&#xff1a; 配置…

kali搭建vulhub漏洞靶场

安装kali 下载kali作为虚拟环境&#xff0c; Get Kali | Kali Linux 通过vmvare打开&#xff0c;默认账号密码kali/kali 修改root密码 su passwd root 如果一些配置普通用户做不了就切换kali&#xff0c;或sudo 命令 kali配置 apt换源 echo > /etc/apt/sources.list v…

JS中BigInt的使用

JS中BigInt的使用 BigInt是一种内置对象&#xff0c;它提供了一种方法来表示大于2^53 - 1的整数&#xff0c;通俗来讲就是提供了一种可以表示任意大整数的方法&#xff0c;当我们使用Number来表示一个超过了2 ^53 - 1的整数的时候&#xff0c;会出错。所以此时我们需要使用Big…

LinkedList 源码分析

LinkedList 是一个基于双向链表实现的集合类。 LinkedList 插入和删除元素的时间复杂度 头部插入/删除&#xff1a;只需要修改头结点的指针即可完成插入/删除操作&#xff0c;因此时间复杂度为 O(1)。尾部插入/删除&#xff1a;只需要修改尾结点的指针即可完成插入/删除操作…

STM32的HAL库SPI操作(master 模式)-根据时序图配置SPI

SPI相关基础知识 SPI基本概念请自行百度&#xff0c;参考&#xff1a;百度百科SPI简介.我们讲重点和要注意的地方。 master模式下要关注的地方 接线一一对应 也就是说主控的MISO,MOSI,SCLK,[CSn]分别和设备的MISO,MOSI,SCLK,[CSn]一一对应相连&#xff0c;不交叉&#xff0…