2016-04-05 4 views
8

मैं एक ऐप पर काम कर रहा हूं जो बीएलई का उपयोग कर उपकरणों के बीच डेटा का आदान-प्रदान करता है।ब्लूटूथगैट: नए एमटीयू सफलताओं पर बातचीत करना, लेकिन नए आकार का उपयोग नहीं किया जा सकता है (3 बाइट्स अंतर)

बेहतर प्रदर्शन प्राप्त करने के लिए, दो उपकरणों को जोड़ने के बाद मैं बीएलई पर बड़े डेटा पैकेजों का आदान-प्रदान करने के लिए एमटीयू बढ़ाने के लिए बातचीत कर रहा हूं।

एक बार BluetoothDevice जुड़ा हुआ है और सभी सेवाओं और विशेषताओं को पढ़ रहे हैं, मैं का उपयोग कर MTU बढ़ाने के लिए अनुरोध करते हैं:,

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

उसके बाद BluetoothGattCallback कार्यान्वयन मैं MTU अनुरोध सफल हो पर और नए MTU से मेल खाता है एक मैं अनुरोध किया:

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

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

समस्या यह है, जब मैं 512 बाइट्स के एक डेटा पैकेज भेजने का प्रयास करें, दूसरे पक्ष (onCharacteristicWriteRequest:) पर मैं 509 बाइट्स मिलता है।

कोई विचार?

उत्तर

21

एमटीयू आकार अधिकतम बाइट्स का प्रतिनिधित्व करता है जिसका उपयोग एटीटी पेलोड में किया जा सकता है। ,

1 बाइट गुण Opcode 2 बाइट संभाल एन बाइट मान विशेषता

के बाद से MTU आकार 512 बाइट्स है गुण: एक ATT लेखन अनुरोध पेलोड (जो एक विशेषता लिखने के लिए भेज जा रहा है) के बाद की तरह दिखता है अधिकतम आकार एन 512 - 3 = 50 9 बाइट्स

हो सकता है
संबंधित मुद्दे