回答

收藏

[评测分享] 【TL7218X开发板】五、更换UUID 与 蓝牙数据收发

#板卡评测 #板卡评测 1087 人阅读 | 0 人回复 | 2025-03-07

本帖最后由 dvacos 于 2025-3-7 18:47 编辑

1、修改UUID

太长的UUID看起来不爽,于是修改为短UUID

修改的是SPP的UUID


修改的效果如下,UUID按照蓝牙规范显示短UUID了


2、打印APP下发的数据
找到注册服务时候代码,向左拖动可以看到,手机下发数据时触发的回调函数


跳转过后,新增打印代码,将接收到的数据打印出来,代码如下:
  1. int spp_onReceiveData(u16 connHandle, ble_rf_packet_att_write_t *p)
  2. {
  3.     (void)connHandle;
  4.     u8 len = p->l2capLen - 3;

  5.     tlk_printf("len = %u \r\n",len);

  6.     if (len > 0) {
  7.             for(int i=0;i<len;i++){
  8.                     tlk_printf( "%02x ", *(i+(u8*)&(p->value)) );
  9.             }
  10.     }

  11.     tlk_printf("\r\n");
  12.    
  13.     return 0;
  14. }
复制代码

实际的实验效果,LOG打印出了,接收的字节数 与 数据本身。


3、上报数据
蓝牙嵌入式设备通常使用Notify 的方式来上报数据给手机,下面就是具体的流程。

3.1、查阅资料
继续参考 B91M的文档


继续搜索“blc_gatt_pushHandleValueNotify”关键字还能看到详细的说明,如:

以slave为例,简要说明MTU和DataLength的作用。用户在APP层设置要发送的长包数据,通过blc_gatt_pushHandleValueNotify()将数据和包头等一系列信息推到ATT层,其内部判断当前要发送的数据长度是否超过有效的MTU_SIZE - 3(这里 - 3 是因为ATT的包头占了3 bytes),如果超过则返回错误码GATT_ERR_DATA_LENGTH_EXCEED_MTU_SIZE。之后ATT层将要发送的数据推到LL层,如果MTU的大小超过了LL层规定的DataLength,那么进行分包处理后再发出。

还有几处提到该函数,详细请参考文档,链接如下:
https://doc.telink-semi.cn/doc/z ... e_connection_cn/#ir

3.2、上报数据实验

目的:将蓝牙接收的数据转发回给手机。实际代码如下

  1. int spp_onReceiveData(u16 connHandle, ble_rf_packet_att_write_t *p)
  2. {
  3.     (void)connHandle;
  4.     u8 len = p->l2capLen - 3;

  5.     tlk_printf("len = %u \r\n",len);

  6.     if (len > 0) {
  7.             for(int i=0;i<len;i++){
  8.                     tlk_printf( "%02x ", *(i+(u8*)&(p->value)) );
  9.             }
  10.     }

  11.     tlk_printf("\r\n");

  12.     blc_gatt_pushHandleValueNotify(connHandle,notify_attHandle,&p->value,len);

  13.     return 0;
  14. }
复制代码


notify_attHandle 目前还不知道怎么获取,我是使用抓包器获取的

有空研究一下,怎么使用API获取。


实验效果:
黑屏部分是系统使用敏感信息输入键盘,默认不给录制导致的,期间只是输入11 22的数据。



本文虽短,但是技术细节不少,请仔细查看。。
以上就是数据收发的实验。



分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

229 积分
5 主题
+ 关注
热门推荐
关闭

站长推荐上一条 /3 下一条