我使用的是SDK 5.0.4。我必须设计一个广告模式的BLE。它测量电池电压,并宣传它。对于这个应用程序,我使用的是示例
SDK 5.0.4 \ SDK 5.0.4 \ DA1458x_SDK_5.0.4 \ DA1458x_SDK \ 5.0.4 \ \ target_apps \ ble_examples \ ble_app_barebone项目。
我设置广告周期1秒使用以下设置-
#define APP_ADV_DATA_UPDATE_TO(100) //值*10ms =毫秒
.intv_min = 32, //值*0.625ms=ms .intv_min = 32, //
///广告的最大间隔
.intv_max = 1600,
这个1秒的广告时段非常适合我。
但是如果我设置任何大于1秒的值,它就不起作用了。在扫描程序中我都看不到BLE。
在这10秒钟里,我做了以下设置——
#define APP_ADV_DATA_UPDATE_TO(1000) //值*10ms =毫秒
.intv_min = 32, //值*0.625ms=ms .intv_min = 32, //
///广告的最大间隔
.intv_max = 16000,
设备:
嗨abhikalitra,
控制发布间隔的参数是user_adv_conf结构体和.intv_min和.intv_max成员。APP_ADV_UPDATE_TO是发布字符串的周期性变化。在.intv_max中,你将最大的发布间隔设置为16000,我假设睡眠模式被禁用,因为睡眠模式被禁用,看门狗保持计数,即使你应该去睡觉,最终看门狗结束,你得到一个NMI中断。因此,您可以禁用看门狗或启用睡眠模式。
由于MT_dialog
亲爱的MT_dialog,
谢谢你的回复。事实上,我是这个芯片的新手。所以不要有浪费的想法。我假设ble_app_barebone是一个预先测试过的示例。在20毫秒到10.24秒的时间内,它的表现应该很好。这些睡眠和监督的事情也被对话开发团队很好地照顾了。
请寄给我一些可以使用10秒周期的样品代码。
嗨abhikalitra,
是的,ble_app_barebone是一个预先测试的例子,但如果你有一个10秒间隔的设备广告,BLE中断(指示设备应该开始广告它发生比看门狗定时器更长)。所以为了让你的设备使用这种间隔,你可以启用睡眠特性(这会冻结看门狗),只需要改变app_default_sleep_mode = ARCH_SLEEP_OFF;或者你可以在da1458x_config_basic.h文件中通过#undef CFG_WDOG禁用看门狗。
由于MT_dialog
亲爱的MT_dialog,
再次感谢你。是的,这就是我要找的东西。让我用您建议的代码设置进行测试。
如果我再觉得有什么问题,我会再来烦你。
亲爱的Support@Dialog,
感谢您过去的支持。现在我面临一个新的问题。如果我保持数据更新周期和广告周期都是10秒,一切都很好。但是我想每2秒更新一次数据,每10秒做一次广告。这个配置不工作,我每2秒得到一次广告数据。我的配置如下-
#define APP_ADV_DATA_UPDATE_TO(200) //值*10ms =毫秒
.intv_min = 32, //值*0.625ms=ms .intv_min = 32, //
///广告的最大间隔
.intv_max = 16000,
const static sleep_state_t app_default_sleep_mode = ARCH_EXT_SLEEP_ON;
你好abhikalitra,
很抱歉没有及时回答您的问题……
数据更新周期定义了数据必须更新的时间。如果您遵循这个流程,当计时器到期时,将停止Advertisement,然后使用新数据重新启动。根据需求,数据正在更新,然后新数据正在发布。
在后台,为了更新数据,你必须停止广告和更新数据。否则,在没有停止广告的情况下,您发送的数据可能会在新旧数据之间损坏。一旦数据被更新,user_app_adv_start ()在user_app_adv_undirect_complete ()回调函数。
这是建议,因为您希望在更新时发送。甚至,如果你多次更新数据并在可能是第3次更新之后发布,那么只有在第3次迭代中更新的数据才会被发布。如果你想每10秒做一次广告,那么每10秒更新一次数据是有意义的。
如果你有任何问题,请告诉我们。
最好的
信用证
亲爱的信用证,
谢谢你的支持。我已经仔细考虑了你的建议。但是对不起,我的要求有些不同。实际上,在我的项目中,我必须每2秒检查一次开关的状态。但我必须每10秒发布一次最新更新的数据包。所以请建议我如何在代码中实现这一点。
这意味着我必须进行5次迭代,每5次迭代我都必须发布数据。
亲爱的LC,我在这个对话开发方面是非常新手。所以,请给我解决方案与一些代码示例或告诉我什么语法变化,我必须在我的代码和在哪个文件。
等待一个满意的答复。
你好abhikalitra,
我不确定我是否正确理解了这个问题。以下是我的理解,请确认。
1.在您的项目中,您必须每2秒监视一次硬件(这是开发板也在发布消息)中的SWITCH状态。
2.同时每2秒更新一次通告报文中的SWITCH状态。
3.但是,您希望这个更新的数据每10秒只发布一次。
这就是你的要求吗?
如果是,则每2秒监控一次交换机,这是一个独立的本地事件,本地存储的数据可以在广告包中更新,并每10秒传输一次,这已经在做了。
如果我理解错了,请告诉我。
最好的
Leepeng
亲爱的Leepeng,
谢谢您的及时回复。是的,你是对的。这正是我的要求。为了实现这一点,我在代码中做了以下更改
#define APP_ADV_DATA_UPDATE_TO(200) //值*10ms =毫秒
.intv_min = 32, //值*0.625ms=ms .intv_min = 32, //
///广告的最大间隔
.intv_max = 16000,
const static sleep_state_t app_default_sleep_mode = ARCH_EXT_SLEEP_ON;
但不幸的是,数据更新和广告都发生在2秒内。所以请建议我什么改变,我必须在代码中实现我的要求。
你好abhikalitra,
在代码中,您将广告更新时间周期设置为2秒。正如我在前面的回复中说的,这也是设置广告时间周期的值,因为更新数据,你必须停止广告调用一些回调函数,广告再次开始。这个过程是必需的,并且不建议更改,因为这些是SDK的钩子。为了每2秒更新你的数据,每10秒做广告,请遵循以下步骤…
将广告更新设置为10秒,广告间隔可以与您已经设置的相同。
#define APP_ADV_DATA_UPDATE_TO (1000) // 1000*10ms = 10sec
更新数据可以通过不同的方式来完成。
例如,创建一个单独的更新函数
空白timeout_update_cb(空白)
{
//你在这里读取开关的状态并保存它
arch_set_pxact_gpio ();//这是一个可以在功率分析器中看到的软件光标。
//设置定时器为2秒。当计时器过期时,读取状态。
timeout_update_cb app_easy_timer (200);
}
当你开始做广告时调用这个函数。例如在函数中
空白user_app_adv_start(空白)
注意:您可以将开关状态保存到一些本地变量中,或者直接保存到函数中正在更新的设备制造商信息中mnf_data_update ()在上面的函数中调用。
这可能不是最好的方法,但却是每2秒更新本地数据和每10秒更新广告包的方法之一。但请注意,只有最新更新的数据才会发布。然而,如果您想要利用状态来执行一些其他的事情,这可能是一种方法,以及更新广告包。
最好的
信用证
亲爱的信用证,
谢谢你的支持。抱歉回复晚了。我正忙着做别的事。我会尝试你的解决方案,并进一步通知你。