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

关于BLE WriteLongCharValue的问题

ti的工程师及各位大神:

我现在遇到一个问题,主机使用GATT_WriteLongCharValue向从机发送50字节的数据,从机端应该怎么接收(也就是说从机在哪里取到主机发过来的数据)

rivers li:

hello

         首先是,GATT_WriteLongCharValue的第一个参数问题,你发的是哪个characteristic,假如是characteristic 1 那么进入peripheral的simpleProfileChangeCB()这个函数中,有个switch,进入相应的case,你使用SimpleProfile_GetParameter( SIMPLEPROFILE_CHAR1, newValueBuf );就将你的数据接收到newValueBuf中了,之后可以对这个数组进行处理。

          我有个问题哈,你要使用GATT_WriteLongCharValue发50个字节的话,一次发不了吧,那个函数只能一次发送20个字节的数,我的程序就是在这边卡主了,然后我就想到要组包发送,但是发现连续的调用GATT_WriteLongCharValue这个函数只能响应一次,求解答~

Jone Chen:

回复 rivers li:

hi,rivers

    我今天又试了一下,GATT_WriteLongCharValue发50个字节,一次确实发不完,它是这样执行的,每次发20字节,其中前两个字节像是偏移量offset,后18个字节为你要发的字节,也就是说,50个字节,它会分三次(18+18+14)发送,offset分别为0,18,36。。。接着从机那一端,也是根据offset也要分三次写入。。。。。。

    不知道这样理解是否正确,有没有高手回答一下?

rivers li:

回复 Jone Chen:

你好chen:

         我想问下偏移量的问题,offset是0,18,36,那么offset在什么地方设定呢。这样吧,假如我要发生50个0x5a,那么将偏移量放到数据的哪儿呢~

         我这边卡主挺长时间了,一直不是很理解。

 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a  //18个

 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a  //18个

 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a                                         //14个

我要把偏移量放在哪呢?

Jone Chen:

回复 rivers li:

hi rivers:

当使用WriteLongCharValue时,需要设置一个初始的offset,一般直接设为0,还是以发送50byte为例,在发送过程中WriteLongCharValue会自动将50byte分成18+18+14来发送,在这发送的同时也会分别生成offset为0,18,36;;;;然后到从机这边,也是它自动分三次去写也就是三次执行WriteAttrCB(),在WriteAttrCB()的参数中你会发现也有一个offset,这个offset就是上面说的生成的offset,所以你就需要利用这个offset去把这收到的50byte写进去。。。。不知这么说你是否明白?

rivers li:

回复 Jone Chen:

hi chen

               谢谢,那我看看,自己调试一下~

rivers li:

回复 Jone Chen:

老大哈~

        我自己做了下,但是现在的效果是可以连续发生,但是检查收到的数据,发现收到的数据只有前18个,你说的那个writeattrcb那个函数怎么更改offset哈~

求指点~

rivers li:

回复 Jone Chen:

同志们哈

              谁知道offset那边怎么改哈,我好晕啊!!!!

waiting:

回复 rivers li:

请问一下,你是如何接受到50个字节的,我只能收到第一个包的18个字节,是不是要在从机端做什么处理?

赞(0)
未经允许不得转载:TI中文支持网 » 关于BLE WriteLongCharValue的问题
分享到: 更多 (0)