2017-10-20 260 views
1

如果有人可以解釋我遇到的一個問題,我將感謝Raspberry Pi 3模型B充當BLE連接上的中央設備外圍設備。Raspberry Pi3 BLE作爲中央設備每個連接間隔只接收一個數據包 - gatttool/hcitool

首先,我successsfully連接這兩個設備和使用該folllowing hcitool/gatttool命令使中央設備上的通知:

sudo hciconfig hci0 up 
sudo gatttool --adapter=hci0 --device=XX:XX:XX:XX:XX:XX --adr_type=random --mtu=23 -I 
[][LE]> connect 
[][LE]> char-write-req 0x000c 0100 

在那之後,我開始接收樹莓PI3模型B於通知,並使用BLE嗅探器,我檢查它收到5個BLE數據包,每個連接間隔有通知值(即OK),默認情況下它建立爲54(67,5ms)。然而,一旦這兩個設備被連接時,我爲了使用以下hcitool命令來修改連接間隔,即,24(30毫秒)更新連接參數:

sudo hcitool lecup --handle=XX --min=24 --max=24 

,我發現的問題是,一旦連接參數被更新,我檢查了Raspberry Pi3模型B每個連接間隔開始只接收1個BLE數據包(這不正確)。觀察到相同的行爲,將連接參數更新爲更高的連接間隔值,即800(1s)。

任何人都可以給我一個解釋這個問題嗎?此外,任何人都可以嘗試重現此程序並檢查是否觀察到同一問題?

由於

回答

1

hcitool lecup使用hci_le_conn_update(http://elixir.free-electrons.com/linux/latest/source/net/bluetooth/hci_conn.c#L321),其設置min_ce_len和max_ce_len爲0,這意味着它提示到控制器,該連接事件長度應該是0 * 0.625毫秒。你不想那樣。如果您希望在整個時間間隔內繼續發送數據包,您希望它與連接間隔一樣長。

爲了測試設置CE長度,使用原始命令代替:

sudo hcitool cmd 0x08 0x13 0x40 0x00 0x18 0 0x18 0 0 0 0x60 0 0x30 0 0x30 0 

這發出對手柄即0x0040的連接參數更新請求,與連接間隔最小值/最大值= 24 * 1.25毫秒,從設備等待時間= 0,超時= 960ms,CE間隔最小/最大= 48 * 0.625ms。

+0

嗨@Emil,非常感謝您的回答......因此,連接事件長度的默認最大值和最小值設置在哪裏? ......看起來很清楚,這些參數最初沒有設置爲0 ... Thaaanks! –

+0

嗨。我的命令有效嗎?如果你看到我引用的文件,你會發現它們被設置爲零,在\t cp.min_ce_len \t \t = cpu_to_le16(0x0000); \t cp.max_ce_len \t \t = cpu_to_le16(0x0000); – Emil

+0

嗨@Emil,是的,它工作正常!對不起,不發表評論。我在Bluez 5.47(我的RPi 3模型B上運行的分佈支持BLE)的hci.c文件中看到,hci_le_conn_update函數將min_ce_len和max_ce_len值設置爲1.但是,從報告實驗的初始行爲,其中我每個連接間隔收到5個數據包(設置爲67,5ms),似乎很明顯,連接事件最大/最小長度最初沒有設置爲這些值。因此連接事件的默認最大值和最小值是在哪裏設置的?謝謝 –