2014-05-05 12 views
10

एक प्रसिद्ध ब्लॉग पोस्ट एक यूएसबी ब्लूटूथ 4 डोंगल को iBeacon होने के तरीके के बारे में बताता है। यह इस जादुई आदेश करने पर निर्भर करता:विज्ञापन पैकेट सेट करने के लिए hcitool का उपयोग

sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 00 00 00 00 00 00 00 00 00 00 00 00 00 

इस उदाहरण के साथ मुद्दा यह है कि यह किसी भी अधिक सामान्य प्रारूप में इसका इस्तेमाल करना मुश्किल है तो अपारदर्शी है। मैं इसे अलग थोड़ा तोड़ने में सक्षम किया गया है:

sudo hcitool -i hci0 cmd 

hci0 डिवाइस

0x08 0x0008 

के लिए एक HCI आदेश भेजता है सिर्फ विज्ञापन का पैकेज स्थापित करने के लिए जादू है, अन्य stackoverflow कमांड "सिर्फ कहा है इसका इस्तेमाल, मत पूछो

1e 

बाइट में डाटा पैकेट निम्नलिखित समस्त की लंबाई है

02 01 1a 1a 

विज्ञापन पैकेट (अनुरोध पर विवरण)

ff 4c 00 ... 

'कंपनी विशिष्ट डेटा' कि iBeacon जानकारी

मुझे क्या करना की कोशिश की है की जगह है encodes है स्थापित करने के लिए झंडे हैं NAME पैरामीटर "04 09 41 42 43" सेट करने के लिए opcodes के साथ "एफएफ ..." बाइट्स (जिसे इसे एबीसी में सेट करना चाहिए) लेकिन यह काम नहीं करता है।

मुझे आश्चर्य है कि एचसीटूल हमें विज्ञापन पैकेट सेट करने के बारे में कुछ उदाहरण नहीं देता है क्योंकि यह अन्य पैरा (जैसे टीईएमपी या पावर) के सभी प्रकारों को स्थापित करने में बहुत उपयोगी होगा। क्या किसी और को NAME की तरह चीजों को सेट करने के लिए hcitool का उपयोग करने में कोई अनुभव है?

+0

प्रसारित होने वाले विज्ञापन पैकेट पेलोड "02 01 1 ए 1 ए" अनुक्रम के साथ शुरू होता है। आप जिस "एफएफ 4 सी" को बदलने की कोशिश कर रहे हैं वह पेलोड के अंदर अच्छी तरह से है, और इसलिए बदलना इसके परिणामस्वरूप एक अलग कमांड नहीं होगा, बल्कि केवल एक खराब ट्रांसमिशन होगा। –

उत्तर

3

इसी तरह के प्रश्न के लिए this answer देखें। यह मूल रूप से वर्णन करता है कि आप विशाल Bluetooth Core Spec दस्तावेज़ डाउनलोड कैसे कर सकते हैं, और यह आपके द्वारा प्रदान किए जाने वाले सभी आदेशों के माध्यम से पढ़ें। आप इन आदेशों में से किसी पर अमल करने hcitool आदेश का उपयोग कर सकते हैं अगर आप सिर्फ सही प्रारूप पता लगा सकते हैं

मेजर चेतावनी (और यह पता लगाने क्या आदेशों वास्तव में करते हैं!): मैं नाम अपने आप को स्थापित करने के प्रयास नहीं किया है, लेकिन एक नज़र spec पर, ऐसा लगता है कि खंड "7.3.11 स्थानीय नाम कमांड लिखें" अनुभाग में spec के पृष्ठ 482 पर वर्णित है। इस आदेश के होते हैं के अनुसार:

hcitool -i hci0 cmd 0x08 0x0013 41 42 43

एक अन्य टिप:

OCF: 0x0013 
Name (up to 248 bytes) 

तो मैं इस तरह एक कमांड की कोशिश करेगा जब आप इस तरह आदेश जारी, कोशिश hcidump & तो आदेश चलाकर पृष्ठभूमि में निष्पादित करता है। फिर, आप प्रयोगात्मक hcitool आदेश (या यहां तक ​​कि hciconfig आदेश) दर्ज कर सकते हैं और क्या (मानव पठनीय) आदेश निष्पादित किए गए और क्या त्रुटियां हुई, इसके बारे में एनोटेटेड विवरण देखें।

उपर्युक्त युक्ति का उपयोग करके, आप उस कमांड लाइन टूल का उपयोग करके स्थानीय नाम सेट करने के लिए hciconfig name abc निष्पादित करने का प्रयास भी कर सकते हैं, जबकि आप पृष्ठभूमि में hcidump & निष्पादित कर रहे हैं। यह आपको उपयोग करने के लिए उचित hcitool कमांड मान दिखाना चाहिए।

+0

धन्यवाद डेविड, मैंने इसे एक शॉट दिया लेकिन मैं वापस आया "भेजें विफल: ऑपरेशन की अनुमति नहीं है"। मेरा अनुमान है कि बीटी 3 और बीटी 4 कमांड के बीच एक अंतर है। उदाहरण के लिए यह * 248 बाइट तक नहीं हो सकता क्योंकि विज्ञापन पैकेट में केवल 28 बाइट्स फ्री स्पेस है, इसलिए यहां एक स्पष्ट डिस्कनेक्ट है। – ScottJenson

+0

ठीक है, मुझे नहीं लगता कि स्थानीय नाम विज्ञापन पैकेट में भेजा गया है। इसलिए इसकी लंबाई प्रतिबंध लागू नहीं होना चाहिए। – davidgyoung

+1

प्रतिक्रिया "भेजें विफल: ऑपरेशन की अनुमति नहीं है" शायद इंगित करता है कि कमांड निष्पादित करने के लिए उपयोग किए गए लिनक्स उपयोगकर्ता को बीएलई डिवाइस को लिखने का अधिकार नहीं है। 'Sudo hcitool -i hci0 cmd 0x08 0x0013 41 42 43' – davidgyoung

5

देर से उत्तर, लेकिन किसी को यह उपयोगी लगता है। मैंने इसे पाया क्योंकि मैं hcitool का उपयोग करते समय स्वयं समाधान के लिए चारों ओर देख रहा था।

यदि आप hcitool cmd --help का उपयोग करते हैं तो यह आपको cmd <ogf> <ocf> ... जैसा कुछ बताएगा। ओजीएफ और ओसीएफ के लिए 0x08 और 0x0008 क्या होगा यह जानने के लिए Bluetooth Core Specification को देखने में मदद मिलती है। विशेष रूप से वॉल्यूम। 2, भाग ई, 7,8

ले नियंत्रक आदेश के लिए, OGF कोड के रूप में 0x08

और 0x0008

Advertising_Data_Length, Advertising_Data

के OCF के लिए परिभाषित किया गया है

तो मूल रूप से, 0x08 0x0008 के साथ आप कहते हैं कि आप (LE नियंत्रक में) को भेजे गए डेटा की लंबाई निर्धारित कर रहे हैं। नाम के लिए, चूंकि बीएलई विज्ञापन पैकेट की लंबाई 31 बाइट्स (1 ई) है, इसलिए आपको पूरे 31 बाइट्स भेजने की जरूरत है। इसलिए यदि आपके पास केवल एबीसी नाम है, तो 04 09 41 42 43 सेटिंग सही है, लेकिन यह केवल पांच बाइट है। 31 के लिए आपको 00 26 बार जोड़ना होगा। बस सावधान रहें कि आप बहुत ज्यादा या बहुत कम नहीं जोड़ते हैं।

इसके अलावा, मैं इस प्रभाव के तहत नहीं था कि बीएलई विज्ञापन। पैकेट 31 बाइट आकार के तय हैं, लेकिन वे कम से कम hcitool के लिए हैं। यह काम नहीं करता है जब आप विशेष रूप से आउटगोइंग आकार 1E से छोटे से सेट करते हैं।

5

नहीं। इनमें से कोई भी जवाब सही और साफ नहीं है।

1) बीएलई के पास एक अलग कमांड सेट है। "ली सेट विज्ञापन डेटा" कमांड का उपयोग किया जाना चाहिए (7.8.7 वॉल 2 भाग ई देखें)।

2) LE सेट विज्ञापन डेटा ऊपर वर्णित की तुलना में बहुत जटिल है। कम से कम 2 1-ऑक्टेट लंबाई फ़ील्ड हैं, पैकेट 32 बाइट लंबाई, शून्य गद्देदार होना चाहिए, लेकिन पहली लंबाई बाइट 0x1e (31) नहीं होनी चाहिए, लेकिन एक या अधिक शीर्षलेख वाले महत्वपूर्ण उपयोग किए गए भाग की लंबाई होनी चाहिए। प्रत्येक शीर्षलेख में अभी भी एक लंबाई, एक एएस टाइप बाइट (सेट स्थानीय नाम के लिए 0x09) और नाम शामिल है।

सेट ले स्थानीय नाम:

hciconfig hci0 down 
hciconfig hci0 up 
hcitool -i hci0 cmd 0x08 0x0008 0c 0b 09 6c 69 6e 6b 6d 6f 74 69 6f 6e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
hciconfig hci0 leadv 0 

0x0c: हेडर 0x0b के निम्नलिखित समूह की लंबाई: इस शीर्ष लेख की लंबाई 0x09: पूरा नाम बाकी 0x0A लंबाई के लिए ई प्रकार नाम

है
+0

कोशिश करें ऊपर दिया गया आदेश गलत है। Hcitool -i hci0 cmd 0x08 कमांड hciconfig hci0 leadv 0 कमांड का पालन करना होगा। ऐसा इसलिए है क्योंकि लीडव कमांड भी विज्ञापन पैक किए गए डेटा को 0x000 के डिफ़ॉल्ट मान पर सेट करता है। तो "लीडव" को कॉल करने के बाद आपको hctitool -i hci0 cmd 0x08 को कॉल करने की आवश्यकता है .. पैकेज किए गए डेटा को अपने कस्टम मानों को रीसेट करने के लिए आदेश –

1

ऐसा प्रतीत होता है कि आपको एक के बजाय दो आदेशों का उपयोग करने की आवश्यकता है। IBeacon डेटा "LE सेट विज्ञापन डेटा" डेटा में निहित है और इस पोस्ट में कहीं और उल्लेख किया गया है। एक बीएलई दोस्ताना नाम देखने के लिए आप एक अतिरिक्त कमांड "ली सेट स्कैन रिस्पॉन्स डेटा" का उपयोग कर सकते हैं, इसके लिए रिसीवर को आपके डिवाइस को स्कैन करने की आवश्यकता होती है (विज्ञापन पैकेट को निष्क्रिय रूप से पढ़ने के बजाए)। तो तुम this one साथ एंजेलो की मिसाल गठबंधन एक iBeacon के रूप में डिवाइस स्थापित करने के लिए कर सकते हैं और 'दोस्ताना नाम "जो स्कैन रिस्पांस डेटा

sudo hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 E2 0A 39 F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61 00 00 00 00 C8 00 
sudo hcitool -i hci0 cmd 0x08 0x0009 0c 0b 09 6c 69 6e 6b 6d 6f 74 69 6f 6e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 

यह मेरे लिए काम किया एक BLE डोंगल के साथ एक Ubuntu बॉक्स का उपयोग करें और फिर स्कैनिंग है सेट इस android BLE स्कैनिंग ऐप का उपयोग कर बीकन के लिए

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

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