[评测分享]
【TL7218X开发板】五、更换UUID 与 蓝牙数据收发
#板卡评测
1087 人阅读
|
0 人回复
|
2025-03-07
TA的每日心情 | 擦汗 2025-2-28 11:10 |
|---|
签到天数: 2 天 连续签到: 1 天 [LV.1]初来乍到
秀才
- 积分
- 229
|
本帖最后由 dvacos 于 2025-3-7 18:47 编辑
1、修改UUID
太长的UUID看起来不爽,于是修改为短UUID
修改的是SPP的UUID
修改的效果如下,UUID按照蓝牙规范显示短UUID了
2、打印APP下发的数据
找到注册服务时候代码,向左拖动可以看到,手机下发数据时触发的回调函数
跳转过后,新增打印代码,将接收到的数据打印出来,代码如下:
- int spp_onReceiveData(u16 connHandle, ble_rf_packet_att_write_t *p)
- {
- (void)connHandle;
- u8 len = p->l2capLen - 3;
- tlk_printf("len = %u \r\n",len);
- if (len > 0) {
- for(int i=0;i<len;i++){
- tlk_printf( "%02x ", *(i+(u8*)&(p->value)) );
- }
- }
- tlk_printf("\r\n");
-
- return 0;
- }
复制代码
实际的实验效果,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、上报数据实验
目的:将蓝牙接收的数据转发回给手机。实际代码如下
- int spp_onReceiveData(u16 connHandle, ble_rf_packet_att_write_t *p)
- {
- (void)connHandle;
- u8 len = p->l2capLen - 3;
- tlk_printf("len = %u \r\n",len);
- if (len > 0) {
- for(int i=0;i<len;i++){
- tlk_printf( "%02x ", *(i+(u8*)&(p->value)) );
- }
- }
- tlk_printf("\r\n");
- blc_gatt_pushHandleValueNotify(connHandle,notify_attHandle,&p->value,len);
- return 0;
- }
复制代码
notify_attHandle 目前还不知道怎么获取,我是使用抓包器获取的
有空研究一下,怎么使用API获取。
实验效果:
黑屏部分是系统使用敏感信息输入键盘,默认不给录制导致的,期间只是输入11 22的数据。
本文虽短,但是技术细节不少,请仔细查看。。
以上就是数据收发的实验。
|
|
|
|
|
|
|
|
|