Android BLE setValue写错了值

时间:2016-04-19 13:25:32

标签: android bluetooth-lowenergy

我正在使用一种特性通过BLE发送和接收数据,从Android手机到北欧nRF51设备。

BLE实现了CRC代码并使用了数据包重传,因此可以认为数据传输是可靠的。

然而,即使我检查写操作是否成功,Android有时也无法写入该特性。

Android代码:

byte value[] = new byte[3 + transaction.data.length];
value[PKT_ID] = transaction.id; //Event ID
value[PKT_TWI_WRITE_DEVADD] = transaction.deviceAddress; //Address

for (int i = 0; i < transaction.data.length; i++)
    value[i + PKT_TWI_WRITE_DATA] = transaction.data[i];

while(!charac.setValue(value) || (value[PKT_ID]&0xFF) != ((charac.getValue())[PKT_ID]&0xFF));

charac.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE);

boolean status = false;
while(!(status = gattInstance.writeCharacteristic(charac)));

System.out.println("Sent id " + (value[PKT_ID]&0xFF) + " char val:" + ((charac.getValue())[PKT_ID]&0xFF) );

示例输出:

I/System.out: Sent id 2 char val:2
I/System.out: Sent id 3 char val:169
I/System.out: Sent id 4 char val:4
I/System.out: Sent id 5 char val:5

可能导致这种情况的原因,以及如何纠正?

1 个答案:

答案 0 :(得分:0)

我找到问题的根源并成功解决了问题。

我使用一个单一的特性进行双向通信。但是,由于我试图实现的速度,序列setValue()&gt; writeCharacteristic不再被视为原子序列。发生的事情是Android手机在setValuewriteCharacteristic之间收到通知,更改了手机本身写入特征的值。

使用两个独立的特征来解决问题,每个特征对应一个。