7个职位/ 0个新职位
最后发表
ArminL
离线
最后看到:4年5个月前
加入:2016-09-30 07:23
广告和扫描

嗨,对话框中,

我的自定义应用程序应该同时进行广告和启动连接,但只有广告有效。
代码片段:
ble_gap_role_set (GAP_PERIPHERAL_ROLE | GAP_CENTRAL_ROLE);
...
ble_gap_adv_start (GAP_CONN_MODE_UNDIRECTED);
ble_gap_connect (&bd_addr, cp);

有什么问题吗?

谢谢
阿明

设备:
MT_dialog
离线
最后看到:7个月1天前
工作人员
加入:2015-06-08 34
嗨ArminL,

嗨ArminL,

我担心像这样的事情是不可能的,并发中央/外设只在连接时有效(检查多链接演示),你不能同时做广告和扫描/连接。

由于MT_dialog

ArminL
离线
最后看到:4年5个月前
加入:2016-09-30 07:23
嗨MT_dialog,

嗨MT_dialog,

这是一个问题,因为应用程序应该总是能够连接到中心或外围设备。
所以我必须交替调用广告和扫描程序,可能需要一个定时器。
你能给我一点提示吗,这个问题该怎么解决?

谢谢
阿明

MT_dialog
离线
最后看到:7个月1天前
工作人员
加入:2015-06-08 34
嗨ArminL,

嗨ArminL,

是的,你应该能够做到这一点,你可以改变扫描和广告稳定间隔通过一个自由的RTOS定时器,只是设置你的定时器和在回调或定时器停止广告。在广告完成后(获得广告完成回调,您可以开始扫描或发起连接)。记住,扫描是自动终止的程序,所以你没有计时器测量扫描程序,如果你喜欢,扫描将自动超时8秒。

整个过程是这样的:

  • 在你的主应用程序中设置一个计时器和一个计时器回调并开始计数。
  • 在计时器的回调中,你可以通知主应用程序计时器已经过去,并从主应用程序停止广告过程,类似于下面的代码片段:
  • ble_gap_adv_stop()将在主任务的BLE_EVT_GAP_ADV_COMPLETED情况下触发handle_evt_gap_adv_completed(),因此在该处理程序中,您可以开始扫描或连接过程。
  • 正如我所提到的,您可以通过计时器或关于扫描,您可以等待程序超时扫描过程。
  • 在相应的完成处理程序中,您可以再次启动广告,并启动计时器以使广告过程超时。

由于MT_dialog

ArminL
离线
最后看到:4年5个月前
加入:2016-09-30 07:23
嗨MT_dialog,

嗨MT_dialog,

我已经实现了与您的解释类似的这个过程。

在这种情况下,应用程序连接到一个中心(连接间隔30毫秒)和连接过程仍然是活动的(扫描窗口30毫秒),应用程序有时似乎崩溃。与中心的连接中断,连接过程停止。
有什么问题吗?
在扫描窗口期间发生连接事件是否有问题?

谢谢
阿明

MT_dialog
离线
最后看到:7个月1天前
工作人员
加入:2015-06-08 34
嗨ArminL,

嗨ArminL,

所以,你有双模式的设备GAP_PERIPHERAL_ROLE | GAP_CENTRAL_ROLE和扫描和广告之间切换,当你开始从你的手机连接,例如,你看到有时设备崩溃?

设备为了连接它需要两个广告信息,所以如果你的手机在68x开始扫描之前收到最后一个广告信息,它不会崩溃,手机将收到广告信息并启动连接程序。连接将继续,直到68x切换回广告模式,然后连接将完成。然后,如果您继续扫描或广告,而您仍然连接68x设备将尝试安排所有的活动。为了调试你所看到的,你必须附加调试器并检查设备在哪里停止。至少在我身边,复制您的设置(如果我错了,请纠正我的设置)我没有看到任何问题与android手机的默认连接在48女士(中央定义连接的连接时间间隔,除非连接参数更新发出,中央决定是否将再次接受参数)。

由于MT_dialog

ArminL
离线
最后看到:4年5个月前
加入:2016-09-30 07:23
嗨MT_dialog,

嗨MT_dialog,

这是一款iOS手机。当我的应用程序连接到一个电话(连接事件每30毫秒),我的应用程序继续扫描过程连接到外设(扫描窗口30毫秒)。在这种情况下,我的应用程序有时会崩溃。
我将用调试器检查我的应用程序停滞的地方。

谢谢
阿明