【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

相关文章

一文教你如何解决Python开发总是import出错的问题

《一文教你如何解决Python开发总是import出错的问题》经常朋友碰到Python开发的过程中import包报错的问题,所以本文将和大家介绍一下可编辑安装(EditableInstall)模式,可... 目录摘要1. 可编辑安装(Editable Install)模式到底在解决什么问题?2. 原理3.

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT

Android开发环境配置避坑指南

《Android开发环境配置避坑指南》本文主要介绍了Android开发环境配置过程中遇到的问题及解决方案,包括VPN注意事项、工具版本统一、Gerrit邮箱配置、Git拉取和提交代码、MergevsR... 目录网络环境:VPN 注意事项工具版本统一:android Studio & JDKGerrit的邮

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J