2015-08-29 13 views
5

मैं ब्लूटूथ कम ऊर्जा डिवाइस के लिए सी/सी ++ में एक लाइब्रेरी लिख रहा हूं। अब तक मैं ब्लूज़ द्वारा उजागर डी-बस इंटरफ़ेस का उपयोग कर रहा हूं और डिवाइस के साथ खोजने, कनेक्ट करने और संवाद करने में सक्षम हूं।ब्लूज़ ऑटो रीकनेक्ट डिवाइस

हालांकि, जब डिवाइस किसी लिंक विफलता या सीमा से बाहर होने के कारण डिस्कनेक्ट हो जाता है, तो इसे फिर से कनेक्ट करना तुच्छ नहीं है। आदर्श रूप से मैं सभी डिस्कनेक्ट किए गए उपकरणों के लंबित कनेक्शन बनाने में सक्षम होना चाहता हूं, लेकिन ब्लूज़ इसका समर्थन नहीं कर रहा है। ऐसा लगता है कि ब्लूज़ केवल एक साथ कनेक्ट कॉल का समर्थन करता है, जो 15-20 सेकेंड के बाद टाइमआउट करता है।

इस प्रकार एक समाधान विज्ञापन पैकेजों को सुनना होगा, और एक ज्ञात डिवाइस का पता लगाए जाने पर कनेक्ट होगा। #bluez पर अच्छे लोगों ने मुझे बताया कि यह पहले से ही कार्यान्वित किया गया था, और ऐसा करने का तरीका एक ऑब्जेक्ट पंजीकृत करना है जो GattMrager1 को GattManager1 RegisterProfile विधि के साथ लागू करता है। इसका प्रयास करने से कोई परिणाम नहीं हुआ, डिवाइस एक लिंक विफलता के बाद डिस्कनेक्ट रहता है। यह भी बहुत खराब दस्तावेज है, इसलिए एक अच्छा मौका है कि मैंने कुछ याद किया है।

मेरे प्रश्न हैं: क्या यह सही समाधान है? क्या यह एक निर्बाध और तेज़ reconnections प्रदान करेगा? यदि यह है, तो क्या गलत हो सकता है?

उत्तर

2

यदि आप एक ब्लूटूथ डिवाइस से फिर से कनेक्ट करना चाहते हैं, तो आप org.freedesktop.DBus.Properties.PropertiesChanged प्राप्त करके कनेक्शन स्थिति की निगरानी कर सकते हैं और org.bluez.Device1.Connect को आवश्यकतानुसार पुनः कनेक्ट करने के लिए कॉल कर सकते हैं। चूंकि यह टाइमआउट होगा, आप Connect() को एक लूप के अंदर रख सकते हैं, जिसे आप केवल तब बाहर निकलेंगे जब org.bluez.Device1.Connected संपत्ति सत्य है।

क्या मूल लेखक ने अभी तक GattProfile1 को लागू करके कई उपकरणों के लिए ऐसा करने में कामयाब रहा है?

संबंधित मुद्दे