簡體   English   中英

Android BLE setValue寫入錯誤的值

[英]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手機正在接收setValuewriteCharacteristic之間的setValuewriteCharacteristic更改了手機本身將寫入該特征的值。

購買時使用兩個獨立的特征解決了問題,每個通信方向都有一個特征。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM