全志XR806蓝牙透传(单向)测试

评测三 蓝牙透传(单向)
有时无线透传在无法布线时有很方便的效用,不妨试试蓝牙透传,效果如下:

具体是无线数据->串口数据,串口数据->无线数据,目前前者实现了,后者还有些问题未解决,

在这里插入图片描述

实现过程如下,基于工程demo/Bluetooth/peripheral_demo改成peripheral_uart_demo,同时目录下peripheral_uart_demo/gcc/defconfig文件里工程名也改成peripheral_uart_demo,然后引入串口读写独立接口即把demo/at_demo下的serial.c、serial.h、serial_debug.h复制到刚才peripheral_uart_demo工程下,由于要无线写以及串口写转无线,所以profile涉及到write_without_rsp和notify,具体配置为:
服务 特征
UUID 12345678-1234-5678-56789abcdef0 12345678-1234-5678-56789abcdef1
Properties Write no response/Notify

static struct bt_gatt_attr vnd_attrs[] = {
	/* Vendor Primary Service Declaration */
	BT_GATT_PRIMARY_SERVICE(&vnd_uuid),
	BT_GATT_CHARACTERISTIC(&vnd_enc_uuid.uuid,
	                BT_GATT_CHRC_WRITE_WITHOUT_RESP | BT_GATT_CHRC_NOTIFY,
	                BT_GATT_PERM_WRITE,
	                NULL, write_without_rsp_vnd, &vnd_value),
	BT_GATT_CCC(vnd_ccc_notify_changed, BT_GATT_PERM_READ|BT_GATT_PERM_WRITE),
};

写回调接口为:

/**********************vnd_write_cmd_uuid*****************************/
static ssize_t write_without_rsp_vnd(struct bt_conn *conn,
                const struct bt_gatt_attr *attr,
                const void *buf, uint16_t len, uint16_t offset,
                uint8_t flags)
{
	uint8_t *value = attr->user_data;

	/* Write request received. Reject it since this char only accepts
	 * Write Commands.
	 */
	if (!(flags & BT_GATT_WRITE_FLAG_CMD)) {
		return BT_GATT_ERR(BT_ATT_ERR_WRITE_REQ_REJECTED);
	}

	if (offset + len > sizeof(vnd_value)) {
		return BT_GATT_ERR(BT_ATT_ERR_INVALID_OFFSET);
	}

	memset(value, 0, sizeof(vnd_value));
	memcpy(value + offset, buf, len);
	serial_write(value + offset, len);
	*(value + offset + len) = '\0';
	printf("\r\nwrite_without_rsp_vnd");
	return len;
}

串口转无线回调(有问题):

static void vnd_notify(void)
{
	static uint8_t vnd[MAX_LONG_DATA];
	uint16_t len=0;
	if (!vnd_notif_enabled)
		return;
	printf("\r\nnotify\r\n");
	serial_read(vnd_notify_value,len);
	if(len>MAX_LONG_DATA || len==0)
		return;
	memcpy(vnd, vnd_notify_value, len);
    printf("\r\nvnd_notify\r\n");
	bt_gatt_notify(NULL, &vnd_svc.attrs[1], vnd, sizeof(vnd));
}

然后在bt_app_init函数里加入透传口UART1的初始化代码即可:

	serial_init(SERIAL_UART_ID, 115200, UART_DATA_BITS_8, UART_PARITY_NONE,
		UART_STOP_BITS_1, 0);
	serial_start();

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

每日一练:插入排序

1. 概念及原理 插入排序是一种简单直观的排序算法,其基本思想是将一个元素插入到已经排序好的部分,然后不断地重复这个过程,直到整个数组有序。下面是插入排序的算法原理: 初始状态: 数组被分为已排序和未排序两个部分…

2、RocketMQ源码分析(二)

RocketMQ的底层通信模块remoting remoting是RocketMQ的底层通信模块,RocketMQ底层通讯是使用Netty来实现的。本文通过对remoting源码进行分析,来说明remoting如何实现高性能通信的。 二、Remoting 通信模块结构 remoting 的网络通信是基于 Netty 实现&…

基于OpenCV+CNN+IOT+微信小程序智能果实采摘指导系统——深度学习算法应用(含pytho、JS工程源码)+数据集+模型(四)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境TensorFlow 环境Jupyter Notebook环境Pycharm 环境微信开发者工具OneNET云平台 模块实现1. 数据预处理2. 创建模型并编译3. 模型训练及保存1)模型训练2)模型保存 4. 上传结果1)…

刷题学习记录(文件上传)

[GXYCTF 2019]BabyUpload 知识点&#xff1a;文件上传.htaccessMIME绕过 题目直接给题目标签提示文件上传的类型 思路&#xff1a;先上传.htaccess文件&#xff0c;在上传木马文件&#xff0c;最后蚁剑连接 上传.htaccess文件 再上传一个没有<?的shell 但是要把image/pn…

生态学、种间关系、进化

这里写自定义目录标题 参考资料种间关系Lynn Margulis共生体在进化过程中形成了一种互帮互助的机制 捕食&#xff1a;收割理论 进化思想史 参考资料 Symbiotic Communications: Where Marconi Meets Darwin 普通生态学(孙儒泳)高等教育出版社1998普通生态学(尚玉昌)北京大学出…

AUTOSAR 入门

前言 AUTOSAR是什么Vector DaVinci 工具功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个注脚注释也是必…

Weblogic CVE-2023-21839(metasploit版)

Step1&#xff1a;用docker搭建环境 Step2&#xff1a;docker查看映射端口 Step3&#xff1a;访问特定端口&#xff0c;然后靶标应用。 Step4&#xff1a;用metasploit进行攻击&#xff1a; 首先&#xff0c;打开metasploit&#xff0c;然后查询需要攻击的板块&#xff0…

【绘图工具】-- Excalidraw 介绍

1、Excalidraw 的来源 Excalidraw 的作者 vjeux 是 facebook 团队的成员&#xff0c;项目在开始阶段就是就是以开源的方式推进&#xff08;现在也开源&#xff0c;只是商业版本才收费&#xff09;&#xff0c;当时作者在 Twitter 上发了一些推文介绍了&#xff0c;然后引起了许…

学习记录---kubernetes中备份和恢复etcd

一、简介 ETCD是kubernetes的重要组成部分&#xff0c;它主要用于存储kubernetes的所有元数据&#xff0c;我们在kubernetes中的所有资源(node、pod、deployment、service等)&#xff0c;如果该组件出现问题&#xff0c;则可能会导致kubernetes无法使用、资源丢失等情况。因此…

题目:分糖果(蓝桥OJ 2928)

题目描述&#xff1a; 解题思路&#xff1a; 本题采用贪心思想 题解&#xff1a; #include<bits/stdc.h> using namespace std;const int N 1e6 9; char s[N];//写字符串数组的一种方法,像数组一样***int main() {int n, x;cin >> n >> x;for(int i 1; i…

C++ vector基本操作

目录 一、介绍 二、定义 三、迭代器 四、容量操作 1、size 2、capacity 3、empty 4、resize 5、reserve 总结&#xff08;扩容机制&#xff09; 五、增删查改 1、push_back & pop_back 2、find 3、insert 4、erase 5、swap 6、operator[] 一、介绍 vector…

OpenGL ES 帧缓冲对象介绍和使用示例

一、介绍 1. 帧缓冲对象 默认情况下&#xff0c;OpenGL渲染的目标是屏幕&#xff0c;但如果你不想直接渲染到屏幕上&#xff0c;还需要对渲染结果做某些后期处理、渲染到纹理、阴影映射等操作&#xff0c;便可以使用帧缓冲对象&#xff0c;实现离屏渲染。 帧缓冲对象&#x…

Jmeter接口测试

前言&#xff1a; 本文主要针对http接口进行测试&#xff0c;使用Jmeter工具实现。 Jmter工具设计之初是用于做性能测试的&#xff0c;它在实现对各种接口的调用方面已经做的比较成熟&#xff0c;因此&#xff0c;本次直接使用Jmeter工具来完成对Http接口的测试。 1.介绍什么是…

《即时消息系统-IM核心技术》

IM 核心概念 用户&#xff1a;系统的使用者 消息&#xff1a;是指用户之间的沟通内容。通常在 IM 系统中&#xff0c;消息会有以下几类&#xff1a;文本消息、表情消息、图片消息、视频消息、文件消息等等 会话&#xff1a;通常指两个用户之间因聊天而建立起的关联 群&…

聊一聊Java中的枚举和泛型(两种强大的编程特性)

聊一聊Java中的枚举和泛型&#xff08;两种强大的编程特性&#xff09; 保持热爱&#xff0c;奔赴山海。。。。。。 Java中的枚举 在Java中&#xff0c;枚举&#xff08;Enum&#xff09;是一种特殊的数据类型&#xff0c;用于定义包含固定常量集合的数据类型。枚举类型在Jav…

猫咪瘦弱的原因是什么?适合给消瘦猫咪长肉吃的猫罐头分享

很多小猫咪吃得很多&#xff0c;但是还是很瘦&#xff0c;这让很多猫主人感到困惑&#xff0c;猫咪瘦弱的原因是什么呢&#xff1f;铲屎那么多年&#xff0c;还是有点子养猫知识在身上的。那么&#xff0c;小猫咪瘦弱的原因是什么呢&#xff1f;让我们看看是不是这些原因导致的…

LinuxBasicsForHackers笔记 -- 进程管理

进程是一个正在运行和使用资源的程序。 Linux 内核是操作系统的内核&#xff0c;几乎控制着一切&#xff0c;在创建进程时&#xff0c;它会按顺序为每个进程分配一个唯一的进程 ID (PID)。 查看进程 ps – 用于在命令行查看哪些进程处于活动状态。单独使用 ps 命令并不能真正…

使用Notepad++编辑器,安装compare比较差异插件

概述 是一款非常有特色的编辑器&#xff0c;Notepad是开源软件&#xff0c;Notepad中文版可以免费使用。 操作步骤&#xff1a; 1、在工具栏 ->“插件”选项。 2、勾选Compare选项&#xff0c;点击右上角“安装”即可。 3、 确认安装插件 4、下载插件 5、插件已安装 6、打…

微前端介绍

目录 微前端概念 微前端特性 场景演示 微前端方案 iframe 方案 qiankun 方案 micro-app 方案 EMP 方案 无界微前端 方案 无界方案 成本低 速度快 原生隔离 功能强大 总结 前言&#xff1a;微前端已经是一个非常成熟的领域了&#xff0c;但开发者不管采用哪个现…

JAVA网络编程——BIO、NIO、AIO深度解析

I/O 一直是很多Java同学难以理解的一个知识点&#xff0c;这篇帖子将会从底层原理上带你理解I/O&#xff0c;让你看清I/O相关问题的本质。 1、I/O的概念 I/O 的全称是Input/Output。虽常谈及I/O&#xff0c;但想必你也一时不能给出一个完整的定义。搜索了谷哥欠&#xff0c;发…