android - एंड्रॉइड 6.0 मार्समॉल्लो BLE: कनेक्शन पैरामीटर




bluetooth bluetooth-lowenergy (3)

11.25 एमएस नया न्यूनतम कनेक्शन अंतराल है। इसका कारण वे 7.5 एमएस की अनुमति नहीं देते हैं, क्योंकि अगर आप एक ही समय में ब्लूटूथ पर ऑडियो स्ट्रीम करते हैं तो ऑडियो तड़का हुआ हो सकता है

ऐसा लगता है कि ब्लूटूथ कम ऊर्जा कनेक्शन पैरामीटर प्रबंधन में एंड्रॉइड 6 में बदलाव आया है

मेरे पास एक BLE पेरिफेरल डिवाइस है, जिसे कुछ विशिष्ट कनेक्शन मापदंडों (विशेषकर, कनेक्शन अंतराल) का उपयोग करने की आवश्यकता है, और मैं BLE विनिर्देश (यानी 7,5 एमएमएस) द्वारा अनुमत न्यूनतम कनेक्शन अंतराल का उपयोग करना चाहता हूं।

एंड्रॉइड एसडीके इसे बीएलई जीएपी सेंट्रल (स्मार्टफोन) से चुनने की अनुमति नहीं देता है, इसलिए मेरे जीएपी पेरिफेरल डिवाइस को जीएपी कनेक्शन के बाद L2CAP Connection Parameter Update Request भेजना उचित तरीका है।

मैं मापदंडों का अनुरोध करता हूं:

  • समापन अंतराल मिनट: 7,5ms
  • conn अंतराल अधिकतम: 7,5ms
  • दास विलंबता: 0
  • पर्यवेक्षण समयबाह्य: 2000ms

यह L2CAP Connection Parameter Update Request भेजने के बाद, सभी एंड्रॉइड डिवाइसेज़ के साथ अपेक्षित काम किया गया है, मैं 4.3 से 5 तक परीक्षण कर रहा हूं। मेरा डिवाइस 0x0000 (स्वीकार्य) के साथ एक L2CAP Connection Parameter Update ResponseL2CAP Connection Parameter Update Response प्राप्त करता है, जिसके बाद एक LE Connection Update Complete event जहां मैं देख सकता हूं कि अनुरोध किए गए कनेक्शन पैरामीटर को अच्छी तरह से ध्यान में रखा गया है।

अब, नेक्सस 9 टैबलेट या 2 अलग नेक्सस 5 डिवाइसेज़ के साथ, एंड्रॉइड 6.0.1 वाले सभी, मैं देख सकता हूं कि L2CAP Connection Parameter Update Request हमेशा अस्वीकार कर दिया जाता है (मुझे 0x0001 के साथ एलसीपीएप L2CAP Connection Parameter Update Response प्राप्त हुआ (अस्वीकार कर दिया गया) )। तब मुझे एक LE Connection Update Complete event प्राप्त होता है, जहां मैं देख सकता हूं कि अनुरोध किए गए कनेक्शन पैरामीटर को ध्यान में नहीं रखा गया है।

मैं इसे पेरिफेरल पक्ष (एसटी माइक्रोइलेक्ट्रोनिक्स 'ब्लूएनआरजी के साथ, नॉर्डिक सेमीकंडक्टर के एनआरएफ 52 के साथ एक) के साथ 2 अलग-अलग कार्यान्वयन के साथ कोशिश कर रहा हूं, दोनों ही सटीक परिणाम के साथ।

फिर, और अधिक परीक्षण के बाद: मैंने विभिन्न पैरामीटर सेटों की कोशिश की है, कॉन अंतराल अधिकतम बदलकर (मैंने अन्य मापदंडों को समान रखा)। जो मुझे मिला वह यहां है :

  • conn अंतराल max = 18.75ms के साथ, अद्यतन अनुरोध को अंतराल के साथ 18.75ms पर सेट किया गया था
  • conn अंतराल अधिकतम = 17.50ms के साथ, अद्यतन अनुरोध को अंतराल 15.00ms पर सेट के साथ स्वीकार किया गया था
  • conn अंतराल max = 15.00ms के साथ, अद्यतन अनुरोध को अंतराल के साथ स्वीकार किया गया था 15.00ms
  • conn अंतराल अधिकतम = 13.75ms के साथ, अद्यतन अनुरोध 11.25ms पर सेट अंतराल के साथ स्वीकार किया गया था
  • conn अंतराल अधिकतम = 11.25ms के साथ, अद्यतन अनुरोध 11.25ms पर सेट अंतराल के साथ स्वीकार किया गया था
  • 11.25ms से नीचे किसी भी अन्य conn अंतराल अधिकतम मूल्य के साथ, मुझे अस्वीकार कर दिया।

अतः अवलोकन यह है कि एंड्रॉइड 6 के ब्लैक स्टैक के कनेक्शन पैरामीटर को नियंत्रित करने के तरीके से कुछ स्पष्ट रूप से बदल गया है। लेकिन पुष्टि करने के लिए कोई भी जानकारी या प्रलेखन नहीं दिखता है।

मेरी टिप्पणियों ने निष्कर्ष दिया कि न्यूनतम कनेक्शन अंतराल की अनुमति अब 11.25ms (जो वास्तव में मेरी ज़रूरतों को फिट करती है) के बजाय पहले एंड्रॉइड संस्करणों में 7.5ms की बजाय। लेकिन यह अनुभवपूर्वक पाया है, मैं यह सुनिश्चित करना चाहता हूं कि मुझे कुछ अन्य बाधाओं / नियमों को याद नहीं है या यदि न्यूनतम गतिशील नहीं होगा, तो मौजूदा बैटरी स्तर पर उदाहरण के आधार पर ...

एप्पल के ब्लूटूथ डिज़ाइन दिशानिर्देश (सीएफ §3.6) के समतुल्य होने के लिए क्या अच्छा होगा कि चीजों को स्पष्ट करने के लिए कि इस विषय के साथ ले पेरिफेरल को कैसे व्यवहार करना चाहिए।

क्या किसी को भी एक ही समस्या है या Google से कुछ और उपयोगी जानकारी के बारे में पता है?


Google ने कनेक्शन पैरामीटर परिवर्तनों के संबंध में ब्लूटूथ ले स्टैक परिवर्तनों के बारे में कोई दस्तावेज प्रदान नहीं किया है, हालांकि यहां कुछ स्पष्ट रूप से एंड्रॉइड 6 में है

इसके साथ मेरा अनुभव आपके खुद के समान है, यह कि 11.25 एमएमएस अब एंड्रॉइड 6+ में अनुमोदित सबसे तेज़ कनेक्शन अंतराल है।

मेरा शिक्षित अनुमान है कि वे दस्तावेज़ीकरण क्यों नहीं जारी करते हैं, यह है कि कई निर्माताओं ने अपने ब्लैक स्टैक अपने फोन में डाल दिए हैं (सैमसंग और एचटीएल पर बीएलई वेनिला एंड्रॉइड से अलग व्यवहार करते हैं)

मैंने एक और अवलोकन किया है जिसके कारण बड़ी समस्याएं आई थीं कि एंड्रॉइड 6+ अनुरोधित मापदंडों पर निपटने से पहले 2 से 6 गुना कनेक्शन मापदंडों को बदल देगा।

मैंने देखा कि 800ms से 1100 एमएमएस के लिए कनेक्शन पैरामीटर अद्यतन अंतराल का अनुरोध करने के बाद, मैंने देखा कि प्रारंभिक अंतराल वापस 7.5 एमएमएस पर आ गया, फिर 48.75 एम पर कूद गया और फिर 10 9 8 .75 आई पर कूद गया, मैंने अनुरोध किया। फिर मैंने अपनी सेवाओं में से एक पर अधिसूचनाओं का सब्सक्राइब किया और कनेक्शन अंतराल दोबारा वापस 7.5 एमएमएस और फिर 10 9 8 9 .75 एमएमएस पर वापस चला गया। इसके बाद, यह कनेक्शन की अवधि के लिए 1098.75ms पर स्थिर हो गया।

ये परीक्षण एंड्रॉइड 6.0.1 के साथ नेक्सस 6 पर चलाए गए थे

जाहिर है, कुछ बहुत ही अजीब बातें एंड्रॉइड 6 BLE स्टैक पर हो रहा है।


ब्लूइड्रोर्ड में हाल में किए गए किसी एक के द्वारा Google के लोगों ने BTM_BLE_CONN_INT_MIN_LIMIT को BTM_BLE_CONN_INT_MIN_LIMIT रूप में परिभाषित करके एक गलती की है जो आपको 1.25ms x 9 = 11.25ms देता है। मानक के अनुपालन के लिए इसे 0x0006 रूप में परिभाषित करना होगा।





android-6.0-marshmallow