2016-04-05 14 views
8

BLE kullanan aygıtlar arasında veri alışverişi yapan bir uygulama üzerinde çalışıyorum.BluetoothGatt: yeni MTU başarıları için görüşme yapıyor ancak yeni boyut kullanılamıyor (3 bayt fark)

Daha iyi bir performans elde etmek için, iki cihazı bağladıktan sonra, BLE üzerinde daha büyük veri paketlerinin değiş tokuşu için MTU'yu yükseltmek üzere pazarlık yapmak üzere görüşüyorum. BluetoothDevice bağlanır ve tüm hizmetler ve özellikleri okunur kez

, ben kullanarak MTU artırmak için rica ediyoruz: Ben MTU İstek başarılı olsun BluetoothGattCallback uygulanmasına ilişkin, Bundan sonra

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

ve yeni MTU maçları Ben istenen bir: Ben 512 bayt veri paketini göndermeye çalıştığınızda

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

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

sorun diğer tarafta (onCharacteristicWriteRequest:) üzerine, ki, ben 509 bayt olsun.

Herhangi bir fikrin var mı?

cevap

21

MTU boyutu, bir ATT yükünde kullanılabilecek maksimum bayt miktarını temsil eder. , Opcode 2 bayt N bayt

MTU boyutu 512 bayttır yana değeri

Özellik Kolu Özellik

1 bayt Öznitelik: (karakteristik yazmak için gönderme vardır) bir ATT yazma talep yük aşağıdaki gibidir Maksimum boyut N, 512 - 3 = 509 bayttır