你好支持@ Dialog.那
我使用的是SDK 5.0.4。我必须设计一个广告模式的BLE。它测量电池电压并进行宣传。对于这个应用程序,我使用了一个示例
SDK 5.0.4\SDK 5.0.4\DA1458x\U SDK\U 5.0.4\DA1458x\U SDK\5.0.4\projects\target\u apps\ble\u examples\ble\u app\u barebone。
我使用以下设置设置广告时期1秒 -
#define app_addata_update_to(100)//值* 10ms = ms
.intv_min=32,//值*0.625ms=ms
///广告的最大间隔时间
.intv_max=1600,
这一秒的广告时间对我来说非常合适。
但如果我设置任何值超过1秒,它就无法正常工作。甚至我在扫描应用程序中看不到ble。
在10秒钟内,我正在进行以下设置--
#define app_add_data_update_to(1000)//值* 10ms = ms
.intv_min=32,//值*0.625ms=ms
///广告的最大间隔时间
.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是一个预先测试过的示例。在最短adv周期(20 mS)至最长adv周期(10.24 S)内,它应表现良好。dialog开发团队也很好地处理了这些睡眠和看门狗的事情。
请给我一些样本代码,可用于10秒期间。
嗨Abhikalitra,
是的BLE_APP_BAREBONE是一个预测的示例,但如果您的设备广告具有10秒间隔的设备,则BLE中断(设备应开始通告的指示需要更长时间,而不是看门狗定时器)。因此,为了让您的设备使用这种间隔,您可以启用休眠功能(将冻结看门狗)只是更改App_default_sleep_mode = Arch_sleep_off;在user_config.h文件中的ARCH_EXT_SLEEP_ON,或者您可以在DA1458x_config_basic.h文件中禁用#undef the cfg_wdog的看门狗。
谢谢mt_dialog.
亲爱的mt_dialog,
再次感谢你。是的,我正在寻找的东西。让我用你建议的代码设置测试。
如果我觉得有什么问题,我会再打扰你。
亲爱的支持@ Dialog.那
谢谢你们过去的支持。现在我面临一个新问题。如果我保持数据更新周期和广告周期都为10秒,一切正常。但我想每2秒更新一次数据,而我想每10秒发布一次广告。此配置不起作用,我每2秒获取一次广告数据。我的配置如下-
#将APP\u ADV\u DATA\u UPDATE\u定义为(200)//值*10ms=ms
.intv_min=32,//值*0.625ms=ms
///广告的最大间隔时间
.intv_max=16000,
const static sleep_state_t app_default_sleep_mode = arch_ext_sleep_on;
你好阿比卡阿塔拉,
抱歉延迟回答您的问题。。。
数据更新周期定义必须更新数据的时间。如果遵循流程,当计时器过期时,广告将停止,然后使用新数据重新启动。根据要求更新数据,然后发布新数据。
在后台,为了更新数据,您必须停止广告和更新数据。否则,您发送的数据可能会在旧数据和新数据之间损坏而不停止广告。一旦数据更新,就会user_app_adv_start()被称为用户\u应用\u adv\u无向\u完成()回调函数。
这是建议,因为您希望在更新时传输。甚至,如果您多次更新数据并在第三次更新之后发布,则只有在第三次迭代中更新的数据才会发布。如果您只想每10秒发布一次广告,那么每10秒更新一次数据是有意义的。
如果您还有任何问题,请告诉我们。
最好的事物,
LC.
亲爱的LC,
感谢您的支持。我经历了你的建议。但对不起我的要求是不同的。实际上在我的项目中,我必须每2秒检查一次交换机的状态。但我必须在每10秒一次宣传最新的更新数据包。所以请建议我如何在代码中实现这一目标。
这意味着我必须进行5次迭代,每5次迭代我必须公布数据。
亲爱的LC,我在这个对话框开发中是非常新手。所以请给我解决一些代码示例的解决方案或告诉我我必须在我的代码中制作的语法更改是什么状态。
等待有利的反应。
你好阿比卡阿塔拉,
我不确定我是否正确理解了这个问题。这就是我所理解的,请确认。
1.在您的项目中,您必须每2秒钟监控一次硬件中交换机的状态(这是也在宣传的开发板)。
2.与此同时,您还需要每2秒更新广告数据包中的开关状态。
但是,您希望此更新的数据每10秒仅广告一次。
这是你的要求吗?
如果是,您每2秒监控一次交换机,这是一个独立于广告的本地事件,本地存储的数据可以在广告数据包中更新,并每10秒传输一次,这是已经完成的。
如果我理解错了这个问题,请告诉我。
最好的事物,
leepeng.
亲爱的李鹏:,
谢谢你的回复。你是对的。这是我的确切要求。要实现此目的,我在代码中进行了遵循更改
#将APP\u ADV\u DATA\u UPDATE\u定义为(200)//值*10ms=ms
.intv_min=32,//值*0.625ms=ms
///广告的最大间隔时间
.intv_max=16000,
const static sleep_state_t app_default_sleep_mode = arch_ext_sleep_on;
但不幸的是,数据更新和广告都是在2秒钟内完成的。所以,请建议我必须在代码中进行哪些更改才能达到我的要求。
你好阿比卡阿塔拉,
在您的代码中,您将广告更新时间段设置为2秒。正如我在Provio回答中所说的那样,这也将广告时间段设定为此值以来,以便从udpate您必须停止呼叫某些回调函数的广告和广告的数据再次启动广告。需要此过程,不建议更改,因为这些都将其挂钩进入SDK。为了每2秒更新数据并每10秒浏览每10秒,请按照以下步骤操作...
将广告更新设置为10秒,广告间隔可以如您所设置的那样。
#define app_addata_update_to(1000)// 1000 * 10ms = 10sec
可以通过不同的方式更新数据。。
创建一个单独的更新功能,例如
无效超时\u更新\u cb(无效)
{
//您可以在此处读取交换机的状态并保存它
arch_set_pxact_gpio();//这是一个可以在power profiler中直观查看的软件光标。
//设置计时器2秒钟。当计时器过期时,读取状态。
app_easy_timer(200,timeout_update_cb);
}
当你开始做广告时调用这个函数,比如在函数中
void user_app_adv_start(void)
注意:您可以将开关状态保存到某些局部变量,或直接保存到功能中已更新的设备制造商信息mnf_data_update()在上述功能中调用。
这可能不是最好的方式,而是每隔2秒更新数据的方法之一,并每10秒更新您的AdverItsement数据包。但请注意,只有最新更新的数据将被宣传。但是,如果您想利用状态来执行其他一些事情,这可以是一种方法,并更新广告数据包。
最好的事物,
LC.
亲爱的LC,
谢谢你的支持。抱歉回复晚了。我忙于其他一些任务。我会尝试解决方案并进一步通知您。