全志Tina平台BLE 数据传输失败问题
【使用范围】
全志平台 博通AP62XX模组 博通BT协议栈
【问题现象】
设备通过ble与手机进行数据传输的时候,有时候数据传输失败,有时候数据传输丢失。
【原理说明】
经实测,小机端通过ble发送的数据的长度应该设置为20byte,否则就会概率性的出现数据丢失或数据发送失败的情况;Android端每次发送的长度也被限制成为20byte,否则就会发送失败;而iphone则没有这个限制。
【解决办法】
将需要发送的长数据切割成为多条短数据,然后分条发送,在接收端将多条数据合并。
如下所示为android端数据切割的代码,小机端的思路也是一样。
代码语言:javascript复制public static int packageSize = 20;
//将字符串拆分成若干个比特list
public static List<byte[]> split(String str){
byte[] bytes = str.getBytes();
List<byte[]> byteList = new ArrayList<>();
int packCount = bytes.length/packageSize;
int lastPackSize = bytes.length%packageSize;//最后一个包的大小
if(lastPackSize>0){
packCount ;
}else{
lastPackSize = packageSize;
}
for(int i=0;i<packCount;i ){
byte[] bb;
if(i<packCount-1){//前面的包
bb = new byte[packageSize];
}else{//最后的一个包
bb = new byte[lastPackSize];
}
int bblength = bb.length;
for(int j=0;j<bblength;j ){
bb[j] = bytes[i*packageSize j];
}
byteList.add(bb);
}
return byteList;
}