2016-04-05 12 views
8

Tôi đang làm việc trên ứng dụng trao đổi dữ liệu giữa các thiết bị sử dụng BLE.BluetoothGatt: đang đàm phán MTU mới thành công nhưng không thể sử dụng kích thước mới (chênh lệch 3 byte)

Để có hiệu suất tốt hơn, sau khi kết nối hai thiết bị, tôi đang đàm phán để tăng MTU nhằm trao đổi các gói dữ liệu lớn hơn trên BLE.

Khi BluetoothDevice được kết nối và tất cả các dịch vụ và đặc điểm được đọc, tôi yêu cầu để tăng MTU sử dụng:

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

Sau đó, tình hình thực hiện BluetoothGattCallback tôi nhận được yêu cầu MTU thành công và MTU mới phù hợp người tôi yêu cầu:

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

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

vấn đề là, khi tôi cố gắng để gửi một gói dữ liệu 512 byte, ở phía bên kia (onCharacteristicWriteRequest:) tôi nhận được 509 byte.

Bất kỳ ý tưởng nào?

Trả lời

21

Kích thước MTU thể hiện số lượng byte tối đa có thể được sử dụng trong tải trọng ATT. Một ATT ghi yêu cầu tải trọng (mà đang được gửi cho một ghi đặc trưng) trông giống như sau: Thuộc tính

1 byte Opcode 2 byte thuộc tính Handle N Byte Attribute Value

Kể từ khi kích thước MTU là 512 byte, kích thước tối đa N có thể là 512 - 3 = 509 byte

Các vấn đề liên quan