TI中文支持网
TI专业的中文技术问题搜集分享网站

simpleProfile_WriteAttrCB能否串口透传任意长度数据

有一个项目 需要从app发送大量数据给蓝牙, 数据大小不定 但从几百到几千个字节都有可能

看到别家的模块可以不断的连续把蓝牙数据从串口输出,cc254x方案默认最长20个字节接收

跟踪调试到底层simpleProfile_WriteAttrCB

static bStatus_t simpleProfile_WriteAttrCB( uint16 connHandle, gattAttribute_t *pAttr,
uint8 *pValue, uint8 len, uint16 offset )

{
……………
if ( pAttr->type.len == ATT_BT_UUID_SIZE )
{
// 16-bit UUID
uint16 uuid = BUILD_UINT16( pAttr->type.uuid[0], pAttr->type.uuid[1]);
switch ( uuid )
{
     case SIMPLEPROFILE_CHAR1_UUID:
            HalUARTWrite(0, pValue, len);    

这里直接串口输出 而不管更上层的调用。这里len的定义是uint8,肯定不能超过255, 测试发现几千个字节下来, 串口只输出部分数据。  

这里不确定ios在发送蓝牙数据的时候是否有分包发送。如果没有,为什么别人家的方案(非TI方案)可以正常接收串口连续输出?

麻烦指导一下,谢谢。

Viki Shi:

T没有针对这一块的例程,可以参考下其他人的经验: http://www.jianshu.com/p/29bd630077b4

shangtao Yan:

回复 Viki Shi:

谢谢 Viki 这里对于offset比较好奇

今天又具体进行了测试 

static bStatus_t simpleProfile_WriteAttrCB( uint16 connHandle, gattAttribute_t *pAttr, uint8 *pValue, uint8 len, uint16 offset )

// pValue为本次有效数据 len为本次有效字节长度 // 只有一个包 len最多20个字节(MTU) offset为0 // 如果有多个包 len最多18个字节 0ffset为前面已经接收的字节数 // 举例 总共一个包 len最大=20 offset=0 // 总共2个包 第一包len=18 offset=0 第二个包len最大=18 offset=18 // 总共3个包 第一包len=18 offset=0 第二个包len=18 offset=18 第三个包len最大=18 offset=36

请问这个原理是什么?是不是ios自动进行了分片传输? 之前没有收到一串输出一串,我估计是如果把收到的数据直接串口输出 速度是不够的 

赞(0)
未经允许不得转载:TI中文支持网 » simpleProfile_WriteAttrCB能否串口透传任意长度数据
分享到: 更多 (0)