Ich entwickle eine Android-Anwendung mit BLE. Die Anforderung dieser Anwendung besteht darin, die Spannungsänderung in einer bestimmten Hardware mit verschiedenen Eingängen zu aktualisieren.Android BLE: Nachrichtenlänge Problem
Also schreibe ich die Zeichen an die BLE als 8-Bit-Eingang. Jeder Bitwert enthält eigene Darstellungen. Basierend auf jeder Anfrage antwortet die Hardware und stellt verschiedene Ausgangskombinationen bereit. Die Ausgabe enthält 24 Informationsbytes. Jede Byte-Position repräsentiert einen anderen Wert. zB: Position 1 & 2 repräsentieren Strom, 3 & 4 stellen Spannung usw. dar. Mein Problem hier ist, ich bekomme die Ausgabe als 4 Teile. Jede Nachricht enthält 6 Bytes. Ist es möglich, dasselbe in einer einzigen Nachricht zu erhalten?
Implementierung
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);
}
}
Und die Antwort wird in der Callback-Gatt bekommen
@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
ast der Absicht, mit den charakteristischen Daten }
Ok, Danke für Ihre Antwort. – Nithinjith
Ich denke, die BLE-Spezifikation erlaubt maximal 512 Bytes für ein Merkmal, können Sie mich auf die Spezifikation Abschnitt verweisen, die erwähnt, gibt es eine 20-Byte-Beschränkung oder ist es eine Android-spezifische Einschränkung? –
Ich glaube, dass Sie möglicherweise Pakete so groß erhalten, wenn Sie die MTU-Größe ändern, aber nur wenn beide beteiligten Geräte dies unterstützen können. Außerdem denke ich, dass die Erhöhung der MTU nur dazu führt, dass sie hinter den Kulissen in mehr Pakete aufgeteilt wird. [Hier finden Sie weitere Informationen,] (https://community.nxp.com/thread/332030) und [hier ist die Android-Spezifikation zum Ändern der MTU.] (Https://developer.android.com/reference/android/ bluetooth/BluetoothGatt.html # requestMtu% 28int% 29) – Seth