[英]Android BLE setValue writing wrong value
我正在使用一種特性來通過BLE從Android手機向Nordic 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
可能是什么原因導致的,如何糾正?
我已經找到問題的根源並成功解決了。
我使用一個單一特征進行雙向通信。 但是,由於我試圖達到的速度,序列setValue()
> writeCharacteristic
不再被視為原子的。 發生的事情是,Android手機正在接收setValue
和writeCharacteristic
之間的setValue
, writeCharacteristic
更改了手機本身將寫入該特征的值。
購買時使用兩個獨立的特征解決了問題,每個通信方向都有一個特征。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.