如何在从模式中监控广告?

6个帖子/ 0新
最后一篇
亚历克斯罗
离线
最后一次露面:1年3个月前
专家
加入:2014-02-28 19:16
如何在从模式中监控广告?

你好,和mt,

我尝试在从机模式下监控广告,我使用了SDK3.0.8。

我每秒都叫做app_last_rwble_evt_get()的函数,如果它是ble_evt_rx,则比较返回。(根据MT的建议,见下面附件)。只是为了广告,闪烁可以扫描它,但返回永远不会ble_evt_rx,即使我尝试通过闪烁和断开连接。你能告诉如何检查它吗?

我找不到有关该功能的任何文档/信息,请您提供更多信息吗?

Arch_Sleep.h中有枚举:
enum last_ble_evt.
{
ble_evt_slp,
ble_evt_cscnt,
ble_evt_rx,
ble_evt_tx,
ble_evt_end,
};
但我不知道什么意思......没有具体的广告

谢谢,
亚历克斯
-----------------------
ARCH_LAST_RWBLE_EVT_GET()将返回BLE执行的传输,接收等的最后一个事件。我想您可以使用此操作,以便找出您的设备是否有一些BLE活动。调用以前SDK中的函数,您可以检查是否有BLE_EVT_RX。

设备:
mt_dialog.
离线
最后一次露面:2个月1日前
职员
加入:2015-06-08 11:34
嗨Alex Luo,

嗨Alex Luo,

国家没有具体的广告状态,国家是:

ble_evt_rx - 启动rx事件

ble_evt_tx - 启动TX事件

ble_evt_end - 结束BLE操作(您应该在广告活动结束后获得一个)

ble_evt_slp - 睡眠退出时的起点

ble_evt_cscnt - 这不是非常有用的,它在无线电事件之前触发了大约2个插槽

您可以通过每1秒轮询,但通过在App_ble_Poweredon回调中放置一些代码来捕获事件。在广告活动中发生时,请参阅附加BLE_RX和TX事件。

谢谢mt_dialog.

附件:
亚历克斯罗
离线
最后一次露面:1年3个月前
专家
加入:2014-02-28 19:16
谢谢mt。

谢谢mt。

我会尝试,

我的目的是我想检查一下空闲模式期间是否有任何广告事件(或一段时间)。如果在此期间没有广告事件,我假设有错误和重置BLE堆栈。我们遇到了一些情况,没有来自外围设备的广告(不起作用),并且必须重置或触发IO重置设备。我所做的是监控广告活动,以避免停止广告。

让我知道这个事件监视器是否可以提供帮助或有不同的方法。请指教。

谢谢,
亚历克斯

mt_dialog.
离线
最后一次露面:2个月1日前
职员
加入:2015-06-08 11:34
嗨,亚历克斯,

嗨,亚历克斯,

这是一个正确的方式来监视您是否是广告,您还可以在App_sleep.h文件中的App_Async_trm()函数中找到信标参考设计中的示例。Beacon使用BLE_EVT_END以跟踪广告的结束以计算从设备举出的广告数据包。

谢谢mt_dialog.

亚历克斯罗
离线
最后一次露面:1年3个月前
专家
加入:2014-02-28 19:16
嗨MT,

嗨MT,

我可以获得空闲和连接状态的ble_evt_end。

我的问题是,如果广告或BLE停止工作,仍然可以得到BLE_EVN_END,对吧?如果是这样,如何判断广告/ BLE是否停止工作?

我做了一次测试。在我停止广告后,我仍然可以得到ble_evn_end!所以,我无法识别广告是否仍然存在或停止。请指教。

谢谢,
亚历克斯

mt_dialog.
离线
最后一次露面:2个月1日前
职员
加入:2015-06-08 11:34
嗨,亚历克斯,

嗨,亚历克斯,

如果您停止广告,580停止所有BLE活动,如果您只需调用该函数将返回BLE_END_EVT的最后一个事件(函数返回最后一个状态,它会通过状态滚动,如果您的最后一个状态是一个ble_end_evt,你停止广告你的最后一个事件将再次成为ble_end_evt)。如果您在SDK 5的情况下请检查以下代码段,您可以在SDK 3中的App_Async_trm()中使用它,并在达到最多20个时使用它在App_Async_trm()中使用它。在您到达20岁以下后,您就不会看到您在UART上的任何内容。

uint8_t app_last_ble_event;//全局变量

枚举arch_main_loop_callback_ret user_on_ble_powered(void)
{
uint8_t状态;
state = arch_last_rwble_evt_get();
if(app_last_ble_event!=州)
{
app_last_ble_event = state;
if(app_last_ble_event == ble_evt_end)
{
ARCH_SET_PXACT_GPIO();
count ++;
ARCH_PRINTF(“%i”,计数);
ARCH_PUTS(“\ n \ r”);
如果(count == 20)
app_easy_gap_advertise_stop();
}
}

返回goto_sleep;
}

谢谢mt_dialog.