【BLE】TLSR8258开发记录之5--SDK添加自定义服务

2023-10-10 17:30

本文主要是介绍【BLE】TLSR8258开发记录之5--SDK添加自定义服务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、说明

在SDK V3.4 BLE sample中添加自定义服务,前期使用昇润APP,故需要符合他的server UUID。
实现打印功能需要先实现模拟串口的添加。服务说明

2、操作

A.在gatt_uuid.h中,添加定义服务定义

//MG add
#define SERVICE_UUID_MG_TMHR                                      0x1000//MG add
#define CHARACTERISTIC_UUID_MG_TMHR_RX                            0x1001
#define CHARACTERISTIC_UUID_MG_TMHR_TX                            0x1002

B.在app_config.h中,在ATT Handle define添加枚举定义

    //MG addTMHR /**********************************************************************************************/MG_TMHR_PS_H,MG_INCLUDE_H,                            MG_TMHR_INPUT_CD_H,MG_TMHR_INPUT_DP_H,MG_TMHR_OUTPUT_CD_H,MG_TMHR_OUTPUT_DP_H,MG_TMHR_INPUT_CCB_H,

C.在app_att.c中添加UUID定义

 MG TMHR /
static const u16 MG_TMHR_Service_UUID     = SERVICE_UUID_MG_TMHR;
static const u16 MG_TMHR_RX_CharUUID      = CHARACTERISTIC_UUID_MG_TMHR_RX;
static const u16 MG_TMHR_TX_CharUUID      = CHARACTERISTIC_UUID_MG_TMHR_TX;

添加数据缓冲区(输入输出)

//MG add
static u8 MG_TMHR_In[2];
static u8 MG_TMHR_InCCC[2];
static u8 MG_TMHR_Out[2];

添加特征值定义

//MG add
static const u8 MG_TMHR_CharVal_RX[5] = {CHAR_PROP_READ | CHAR_PROP_WRITE_WITHOUT_RSP | CHAR_PROP_NOTIFY,U16_LO(MG_TMHR_INPUT_DP_H),U16_HI(MG_TMHR_INPUT_DP_H),U16_LO(CHARACTERISTIC_UUID_MG_TMHR_RX),U16_HI(CHARACTERISTIC_UUID_MG_TMHR_RX)
};
static const u8 MG_TMHR_CharVal_TX[5] = {CHAR_PROP_READ | CHAR_PROP_NOTIFY,U16_LO(MG_TMHR_OUTPUT_DP_H),U16_HI(MG_TMHR_OUTPUT_DP_H),U16_LO(CHARACTERISTIC_UUID_MG_TMHR_TX),U16_HI(CHARACTERISTIC_UUID_MG_TMHR_TX)
};

添加自定义include服务

static const u16 MG_include[3] = {MG_TMHR_PS_H,MG_TMHR_INPUT_CCB_H,SERVICE_UUID_MG_TMHR};

在my_Attributes添加属性,其中“MG_TMHR_Write_CB”为写回调函数,即APP下发数据过来后,从机接收到数据后会进入该回调函数
以下代码添加的位置须与ATT Handle define中的"MG_TMHRxx"枚举位置相对应

//    // MG TMHR ///TMHR data service{6,ATT_PERMISSIONS_READ,2,2,(u8*)(&my_primaryServiceUUID), (u8*)(&MG_TMHR_Service_UUID),0},//   include MG service{0,ATT_PERMISSIONS_READ,2,sizeof(MG_include),(u8*)(&hidIncludeUUID),     (u8*)(MG_include), 0},//data RX{0,ATT_PERMISSIONS_READ,2,sizeof(MG_TMHR_CharVal_RX),(u8*)(&my_characterUUID), (u8*)(MG_TMHR_CharVal_RX), 0},    //prop{0,ATT_PERMISSIONS_RDWR,2,2,(u8*)(&MG_TMHR_RX_CharUUID),     (u8*)(MG_TMHR_Out), &MG_TMHR_Write_CB},    //value//data TX{0,ATT_PERMISSIONS_READ,2,sizeof(MG_TMHR_CharVal_TX),(u8*)(&my_characterUUID), (u8*)(MG_TMHR_CharVal_TX), 0},    //prop{0,ATT_PERMISSIONS_READ,2, 2,(u8*)(&MG_TMHR_TX_CharUUID),     (u8*)(MG_TMHR_In), 0},    //value{0,ATT_PERMISSIONS_RDWR,2,sizeof(MG_TMHR_InCCC),(u8*)(&clientCharacterCfgUUID),     (u8*)(MG_TMHR_InCCC), 0}

回调函数定义如下:(测试用)

//写回调函数
//static unsigned char led_status= 0;
int MG_TMHR_Write_CB(void *p)
{rf_packet_att_data_t *pw = (rf_packet_att_data_t*)p;int len = pw->l2cap - 3;int i=0;//打印数据for(i=0; i<len; i++){printf("Data[%d] is: %d \r\n",i,pw->dat[i]);}//io翻转//gpio_toggle(GPIO_PD2);//回复数据bls_att_pushNotifyData(MG_TMHR_OUTPUT_DP_H,&pw->dat,len);return 1;
}

3、现象

打开手机调试APP(这里用的昇润APP,用其他的第三方软件也可以),连接上之后选择在发送端口发送:0506,可以在串口助手看到8258转发的0506

这篇关于【BLE】TLSR8258开发记录之5--SDK添加自定义服务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/181993

相关文章

关于DNS域名解析服务

《关于DNS域名解析服务》:本文主要介绍关于DNS域名解析服务,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录DNS系统的作用及类型DNS使用的协议及端口号DNS系统的分布式数据结构DNS的分布式互联网解析库域名体系结构两种查询方式DNS服务器类型统计构建DNS域

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

一文详解Java Stream的sorted自定义排序

《一文详解JavaStream的sorted自定义排序》Javastream中的sorted方法是用于对流中的元素进行排序的方法,它可以接受一个comparator参数,用于指定排序规则,sorte... 目录一、sorted 操作的基础原理二、自定义排序的实现方式1. Comparator 接口的 Lam

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间