2016-10-04 1 views
2

Android 5.1(Bluetooth 4.0)を搭載したアンドロイドデバイスとBluetooth 4.2を搭載したMCUボードを使用しています。Gatt Characteristicを読み込んだ後はどうなりますか?

私のMCU側では、ループ内のGatt Characteristicを更新しています。私が書き込んでいるデータが一貫しているかどうかを確認するためです。私はgattデータベースの中に書いている前に、私はcrcのチェックを使用しています。

私のアンドロイド側では、私はちょうどそのgattデータベースの特性を読み取って、その直後に私は同じcrcがありますが、値の50%が壊れているようです私の側)。 私は自分のgattデータベースに書いているデータが正しいことを知っているので、問題はスレッドで特性を何度も読み取っていると思います。

私はすでにアンドロイド側の通知で特性を読み込もうとしましたが、bluetoothサービスはOnCharacteristicChangedコールバックにジャンプしません。

私の特性の更新は、この

tmpGatt.readCharacteristic(characteristic); 

のように見えると特性が

for(int i = 0; i<Services.size(); i++){ 
       Characteristics = Services.get(i).getCharacteristics(); 
       for(int c=0;c < Characteristics.size();c++){ 
        UUID myUUID = Characteristics.get(c).getUuid(); 
        if(myUUID.toString().equals("354a1b8e-7597-11e6-8b77-86f30ca893d3")){ 
         characteristic = Characteristics.get(c); 
         //refExternalData.getRefBluetoothGatt().readCharacteristic(characteristic); 
         descriptor = characteristic.getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805f9b34fb")); 
         Log.i("BLE", "Characteristic " + myUUID.toString() + " found"); 
        } 
       } 
      } 

前のuuidによってフィルタリングされたので、私はgattcharacteristicを再読み込みするために特別な何かをする必要がありますか?

答えて

1

通知を有効にするために、https://developer.android.com/guide/topics/connectivity/bluetooth-le.html#notificationの手順に従っていますか?

readCharacteristicを発行すると、onCharacteristicReadを入手するまで、新しいreadCharacteristicを発行することはできません。または、実際には、前のリクエストが完了するまで、新しいリクエスト(readCharacteristicwriteCharacteristicreadDescriptorwriteDescriptor)を送信することはできません。これは、一度に1つの未解決のGATT要求があり、内部キューが存在しないためです。

+0

私はBLEのサンプルアプリケーションに戻ってきました。確かに、特性の名前を押してもデータがまだ破損している場合は、onCharacteristicReadがトリガされています。あなたは問題がアプリ側かmcu側にあると思いますか? –

+1

データが破損している場合、MCU /送信側では間違いなく問題です。空中では、ペイロードはすでにBLE規格に従ってCRC保護されています。 – Emil

+0

私のコードを再チェックします。もし問題が見つかったら、ここに投稿してください。ありがとう –

関連する問題