0

BLEを使用してAndroidアプリケーションを開発しています。このアプリケーションの要件は、特定のハードウェアの電圧変動をさまざまな入力で更新することです。Android BLE:メッセージの長さの問題

私は文字を8ビット入力としてBLEに書き込みます。各ビット値はそれ自身の表現を含む。各要求に基づいて、ハードウェアは応答し、さまざまな出力の組み合わせを提供します。出力には24バイトの情報が含まれています。各バイト位置は異なる値を表します。例:位置1 & 2は電流を表し、3 &は電圧などを表します。 ここで私の問題は4つの部分の出力です。各メッセージには6バイトが含まれます。単一のメッセージで同じものを取得することは可能ですか?

実装

public void writeCharacteristic(BluetoothGattCharacteristic characteristic) { 
     if (mBluetoothAdapter == null || mBluetoothGatt == null) {      //Check that we have access to a Bluetooth radio 
      Log.w(TAG, "BluetoothAdapter not initialized"); 
      return; 
     } 
     int test = characteristic.getProperties();          //Get the properties of the characteristic 
     if ((test & BluetoothGattCharacteristic.PROPERTY_WRITE) == 0 && (test & BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE) == 0) { //Check that the property is writable 
      return; 
     } 
     DebugLogs.writeToFile("BLE MODULE Before Write " + characteristic); 
     if (mBluetoothGatt.writeCharacteristic(characteristic)) {      //Request the BluetoothGatt to do the Write 
      Log.v(TAG, "****************WRITE CHARACTERISTIC SUCCESSFULL**" + characteristic);        //The request was accepted, this does not mean the write completed 
      DebugLogs.writeToFile("BLE MODULE AFTER Write SUCCESS " + characteristic); 
     } else { 
      Log.d(TAG, "writeCharacteristic failed");         //Write request was not accepted by the BluetoothGatt 
      DebugLogs.writeToFile("BLE MODULE AFTER Write FAIL " + characteristic); 
     } 
    } 

と応答特性データ }

答えて

1

残念ながらいないとの意思ASTガットコールバック

@Override 
     public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) { 
      Log.w(TAG, "**ACTION_DATA_AVAILABLE**" + characteristic.getUuid());//Indication or notification was received 
      broadcastUpdate(BLEConstants.ACTION_DATA_AVAILABLE, characteristic);      //Go broadc 

になっています。 BLEペリフェラルのコードの作成者であれば、送信回数を減らすことができますが、BLEは特性の幅を20バイトに制限するため、24ビットを1つの特性に収めることはできません。 BLEペリフェラルの作者であれば、おそらくそれを変更して2 12バイトのパケットを送信することができます。

そうでない場合は、送信する前にすべてのデータを収集しようとしている可能性があります。これを行う簡単な方法は、onCharacteristicWriteが呼び出されたときに長さ24のバイト配列を作成することです。次に、onCharacteristicChangedが呼び出されるたびに、データを配列に追加します。アレイに24バイトすべてを追加したら、ブロードキャストします。

希望すると便利です。

+0

ご回答ありがとうございます。 – Nithinjith

+0

私は、BLE仕様では最大512バイトの特性が許されていると思いますが、20バイトの制限があるか、それともアンドロイド固有の制限があるのか​​を指定セクションに指摘できますか? –

+0

私はMTUサイズを変更した場合に大きなパケットを得ることができると考えていますが、両方のデバイスがそれをサポートできる場合に限ります。また、私は、MTUを増やすだけで、その場でより多くのパケットに分割することができると思います。 [ここにはいくつかの情報があります](https://community.nxp.com/thread/332030)と[こちらはMTUを変更するためのアンドロイド仕様です](https://developer.android.com/reference/android/ bluetooth/BluetoothGatt.html#requestMtu%28int%29) – Seth

関連する問題