2017-10-20 232 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),似乎很明显,连接事件最大/最小长度最初没有设置为这些值。因此连接事件的默认最大值和最小值是在哪里设置的?谢谢 –

相关问题