2016-04-05 10 views
8

Sto lavorando a un'app che scambia dati tra dispositivi utilizzando BLE.BluetoothGatt: la nuova MTU di negoziazione riesce ma la nuova dimensione non può essere utilizzata (differenza di 3 byte)

Per ottenere prestazioni migliori, dopo aver collegato due dispositivi sto negoziando per aumentare il MTU al fine di scambiare pacchetti di dati più grandi su BLE.

Una volta che il BluetoothDevice è collegato e di tutti i servizi e le caratteristiche vengono letti, chiedo di aumentare la MTU utilizzando:

private void requestMtu() { 
    //gatt is a BluetoothGatt instance and MAX_MTU is 512 
    this.gatt.requestMtu(MAX_MTU); 
} 

Dopo di che, sulla BluetoothGattCallback realizzazione vengo la richiesta MTU riuscito e il nuovo MTU fiammiferi quello che ho chiesto:

@Override 
public void onMtuChanged(BluetoothGatt gatt, int mtu, int status) { 
    super.onMtuChanged(gatt, mtu, status); 

    if (status == BluetoothGatt.GATT_SUCCESS) { 
     this.supportedMTU = mtu; 
    } 
} 

il problema è che quando provo a trasmettere un pacchetto di dati di 512 byte, sul lato opposto (onCharacteristicWriteRequest:) ottengo 509 byte.

Qualche idea?

risposta

21

La dimensione MTU rappresenta la quantità massima di byte che può essere utilizzata in un payload ATT. Un ATT richiesta di scrittura payload (che è l'essere trasmette per una scrittura caratteristica) è simile al seguente: Abilità

1 byte Opcode 2 byte Abilità maniglia N Byte Valore attributo

Poiché la dimensione MTU è di 512 byte, la dimensione massima N può essere 512 - 3 = 509 byte

Problemi correlati