2014-05-05 23 views
10

Bir USB bluetooth 4 dongle'ın bir iBeacon olmasını ayarlama konusunda iyi bilinen bir blog yazısı var. Bu büyülü komutuna aşağı kaynar:Reklam paketlerini ayarlamak için hcitool kullanma

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 

bu örnekle meselenin bir daha genel biçimde kullanmak zor yani opak olmasıdır. Biraz onu parçalayın başardık:

sudo hcitool -i hci0 cmd 

hci0 cihazına

0x08 0x0008 

bir hci komutu gönderir reklam paketi ayarlamak için sadece sihirli olduğunu diğer stackoverflow komutları "Bu söylediklerimiz

1e 

bayt veri paketi aşağıdaki TAMAMI uzunluğudur sormayın, kullanmak

02 01 1a 1a 

reklam paketi (istek üzerine ayrıntılar)

ff 4c 00 ... 

ben yapmaya çalıştım ne

yerine ise iBeacon bilgileri The kodlar 'şirket özel veri' dir kurmak bayrakları Are "FF ...", NAME parametresini "04 09 41 42 43" (ABC'ye ayarlamalıdır) parametresini ayarlamak için opcodes ile bayt'tır, ancak bu çalışmaz.

Hcitool'ün, reklam paketinin nasıl ayarlanacağına dair bazı örnekler vermemesi beni şaşırttı, çünkü bu, diğer tüm param türlerini (TEMP veya POWER gibi) ayarlamakta çok yararlı olacaktır. NAME gibi şeyler ayarlamak için hcitool kullanma konusunda herhangi bir deneyimi oldu mu?

+0

İletilen biten reklam paketi yükü "02 01 1a 1a" dizisi ile başlar. Değiştirmeye çalıştığınız "ff 4c", bu nedenle yükün içinde iyi bir şekilde değişiyor, ve bu yüzden değişmesi, farklı bir komutla sonuçlanmayacak, ancak sadece bir şanzıman. –

cevap

3

Benzer bir soru için this answer'a bakın. Temel olarak dev Bluetooth Core Spec belgesini nasıl indirebileceğinizi ve size sunduğu tüm komutları okuyabileceğinizi açıklar. Eğer doğru formatı öğrenirseniz (ve komutların gerçekte ne yaptığını öğrenirseniz) bu komutlardan herhangi birini çalıştırmak için hcitool komutunu kullanabilirsiniz.

Önemli uyarı: Adı kendim ayarlamayı denemedim, ama bakıyorum spesifikasyonda, "7.3.11 Yerel Ad Komutu Yazma" bölümünde yer alan spesifikasyonun 482. sayfasında açıklandığı görülmektedir. Komut oluşur Buna göre: böylece komutu hcidump & çalışan böyle komutları kesilirken, deneyin:

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

Bir başka ipucu:

OCF: 0x0013 
Name (up to 248 bytes) 

Yani böyle bir komut denemek istiyorum arka planda yürütülür. Ardından, deneysel hcitool komutlarını (veya hciconfig komutlarını) girebilir ve ne (insan tarafından okunabilir) komutların çalıştırıldığı ve varsa hangi hataların meydana geldiği hakkında açıklamalı ayrıntılara bakabilirsiniz. arka planda bir hcidump & yürütme, ancak, aynı zamanda, bu komut satırı aracını kullanarak yerel adını ayarlamak için hciconfig name abc yürütülmesi deneyebilirsiniz yukarıdaki ucu kullanarak

. Bu, kullanılacak doğru hcitool komut değerlerini göstermelidir.

+0

Teşekkürler David, Bunu bir şans verdim ama geri döndüm "Gönderme başarısız oldu: İşlem izin verilmiyor". Benim tahminim BT3 ve BT4 komutları arasında bir fark var. Örneğin, reklam paketinin yalnızca 28 bayt boş alana sahip olması nedeniyle * 248 bayta kadar * olamaz, bu nedenle burada net bir bağlantı kesilir. – ScottJenson

+0

Eh, yerel adın reklam paketinde gönderildiğini sanmıyorum, bu yüzden uzunluk kısıtlaması geçerli olmamalıdır. – davidgyoung

+1

Yanıt "Gönderilemedi: İşlemin yapılmasına izin verilmiyor", muhtemelen, komutu çalıştırmak için kullanılan Linux kullanıcısının BLE aygıtına yazma hakları olmadığını belirtir. Sudo hcitool -i hci0 cmd'yi deneyin 0x08 0x0013 41 42 43' – davidgyoung

5

Geç yanıt, ancak birileri bunu yararlı bulabilir. Hcitool kullanırken kendim için çözümler aradığım gibi buldum.Eğer hcitool cmd --help kullanırsanız

sürdü bu cmd <ogf> <ocf> ... gibi bir şey söyleyecektir. O 0x08 ve 0x0008 OGF ve OCF için ne olacağını öğrenmek için Bluetooth Core Specification bakmak için yardımcı olur. Spesifik olarak Vol. 2, Kısım E, LE Kontrol Komutlar için

7.8, OGF kodu 0x08

gibi 0x0008

Advertising_Data_Length, Advertising_Data

arasında OCF için tanımlandığı gibidir

Yani temelde, 0x08 ile size (LE Kontrolörü olarak) gönderilen verilerin uzunluğunu ayarlama söylüyorlar 0x0008. Adına gelince, BLE reklam paketinin uzunluğu 31 bayt (1E) olduğu için, 31 baytın tamamını göndermeniz gerekir. Bu nedenle, yalnızca ad olarak ABC'niz varsa, 04 09 41 42 43 ayarı doğrudur, ancak bu yalnızca beş bayttır. 31 için 00 26 kere eklemelisiniz. Sadece çok fazla veya çok fazla eklemediğine dikkat et.

Ayrıca, BLE reklamın izlenim altında değildi. Paketler sabit 31 byte boyuttadır, ancak en azından hcitool içindir. Giden boyutu, 1E'dan daha küçük bir şeye ayarladığınızda çalışmaz. Bu cevapların

5

sayılı hiçbiri doğru ve temiz.

1) BLE ayrı bir komut setine sahiptir. "LE Set Advertising Data" komutu kullanılmalıdır (bkz. 7.8.7 vol 2 kısım E).

2) LE Seti Reklam Veri Yukarıda açıklanan olandan çok karmaşıktır. En az 2 1-sekizli uzunluk alanı vardır, paket 32 ​​bayt uzunluğunda, sıfır doldurulmuş olmalıdır, ancak ilk uzunluk baytı 0x1e (31) olmamalı, ancak bir veya daha fazla başlık içeren önemli kullanılan parçanın uzunluğu olmalıdır. Her başlık hala bir uzunluk, bir AS Tipi bayt (set yerel adı için 0x09) ve adı içerir.

SET LE YEREL ADI:

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: başlıklarını 0x0B aşağıdaki grubun uzunluğu: Bu Başlığın boyu 0x09: komple adı dinlenme 0x0a uzunluğu için AD tipi adı

olduğunu
+0

Yukarıda verilen sipariş yanlıştır. Hcitool -i hci0 cmd 0x08 komutu hciconfig hci0 leadv 0 komutunu takip etmelidir. Bunun nedeni, leadv komutunun ayrıca, paketlenmiş verileri varsayılan 0x000 değerine ayarlamasıdır. Yani "leadv" aradıktan sonra paketlenmiş verileri özel değerlere sıfırlamak için hctitool -i hci0 cmd 0x08 .. komutunu çağırmanız gerekir. –

1

size bir yerine iki komutlarını kullanmak gerekir görünür. IBeacon verileri "LE Set Advertising Data" verilerinde yer almaktadır ve bu yazının başka yerlerinde belirtilmiştir. BLE dostu bir ad görmek için "LE Tarama Yanıtı Verilerini Ayarla" komutunu kullanabilirsiniz, bu da alıcının cihazınızı taramasını gerektirir (reklam paketini pasif olarak okumak yerine). Yani bir iBeacon olarak cihazı ayarlamak için this one ile Angelo'nun örneğini birleştirmek ve bu bir BLE dongle ile bir Ubuntu kutusunu kullanarak ve daha sonra taramaya benim için çalıştı Tarama Tepki veri

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 

"dost adı" ayarlayabilirsiniz Bu android BLE tarama uygulamasının kullanılmasıyla işaret için

İlgili konular