有一个项目 需要从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自动进行了分片传输? 之前没有收到一串输出一串,我估计是如果把收到的数据直接串口输出 速度是不够的