2016-04-19 8 views
0

BLEを介してAndroid携帯からNordic nRF51デバイスにデータを送受信する特性を使用しています。Android BLE setValueが間違った値を書き込んでいます

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 

何をして、これを引き起こしている可能性、そしてどのようにそれを修正することができますか?

答えて

0

私は問題の根本を見つけ、問題を解決しました。

私は双方向通信を行うために単一の特性を使用していました。しかし、私が達成しようとしていたスピードのために、setValue()>writeCharacteristicのシーケンスはもはや原子とはみなされませんでした。起こっていたことは、アンドロイド携帯電話がsetValuewriteCharacteristicの間の通知を受信して​​いて、電話機自体が特性に書き込む値を変更していたことです。

問題は、2つの別個の特性、すなわち各コミューン方向の1つを使用して購入されました。

関連する問題