zoukankan      html  css  js  c++  java
  • 蓝牙收发数据长度的问题

    最近公司固件工程师在调试时发现一个问题,蓝牙设备和安卓APP可以正常通讯,但是和iOS APP总是传输数据超时,之后断开连接,应该是程序问题,之前遇到过一次,但是只有那一次,想偷下懒所以就没改,这次又出现了就不得不改了。用xcode运行项目,打开log,在

    - (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error

    方法中输出了接收到的数据,发现接收到的数据总长度时对的,但是分包发送每次接收到的数据长度和其他的设备不一样,而代码里面写的是按照分包的长度来接收的,所以就导致最后拼接的数据不对,那就需要改动了,虽然这部分代码已经用了一年多了,那也没办法,有问题必须得改呀。

    根据log看岀接收到的数据格式是这样的:5b24xxxx 5b05xxxx,其中第一字节固定为5b,第二字节为本次发送数据总长度。如果有36字节数据,分3次接收10+10+10+6,然而部分读卡器不是按照这种顺序发的,可能是9+8+9+9+1这样发的,所以就不能根据固定长度来接收数据。

    每次接收数据前先清空之前的数据:

        self.receiveData = [[NSMutableData alloc] initWithCapacity:50];

    然后接收数据,并拼接到receiveData中:

         [_receiveData appendData:characteristic.value];

    每次接收完数据都检查receiveData,看其长度是否等于第一个字节:

        if (bytes[1] == 0x24 && _receiveData.length == 0x24 && [BLEUtil verifyReceivedData:_receiveData]) {}

    如果等于表明本次数据接收完毕,检查数据格式是否正确,如果正确再继续下面的操作。

    这样只判断数据总长度就可以了,不用判断分包接收的数据,完美解决上面的问题。

  • 相关阅读:
    Windows Store App 主题动画
    Windows Store App 过渡动画
    Windows Store App 控件动画
    Windows Store App 近期访问列表
    Windows Store App 文件选取器
    Windows Store App 访问应用内部文件
    Windows Store App 用户库文件分组
    Windows Store App 获取文件及文件夹列表
    Windows Store App 用户库文件夹操作
    Windows Store App 用户库文件操作
  • 原文地址:https://www.cnblogs.com/shenyuiOS/p/10167240.html
Copyright © 2011-2022 走看看