在广告模式下访问物联网传感器数据

11个帖子/ 0个新帖子
最后发表
jeremynwong
离线
最后看到:4年2个月前
加入:2017-01-16 14:09
在广告模式下访问物联网传感器数据

你好,

我正在使用Dialog物联网开发工具包。我试图检测是否加密狗已经移动超过一定的时间间隔,并将一个标志放入广告数据。最好的方法是什么?是否有一个中断,我可以编写一个处理程序每次适配器移动?如果是的话,我该如何设置呢?或者有一个函数,我可以调用,将告诉我,如果适配器已经移动或没有(我可以重置后,我每次读取它)

我已经尝试调用bmo160_get_any_motion_stat()和bmi160_get_step_counter()函数来尝试检测运动,但这似乎不起作用。是否有其他功能,我可以使用或有任何其他设置需要我使用这些功能,而在广告模式?

我正在处理wrbl_sfl项目。

谢谢,
杰里米

设备:
MT_dialog
离线
最后看到:4个月2周之前
工作人员
加入:2015-06-08 34
嗨jeremynwong,

嗨jeremynwong,

在广告完成后,物联网项目获得任何类型的移动中断,在广告完成回调中user_bmi160_config_anymotion_intr()函数将加速度计设置为该模式,所以,当加速计感知到任何类型的运动时,就会触发对583的中断,wkup_intr_non_connected_cb()也会被触发,以便设备再次开始发布广告,所以你可以在那个中断处理程序上放置一个标志,或者,由于设备每次被移动时都会启动广告,你甚至可以在user_adv_start()函数中设置一个设备被移动的标志,并相应地修改广告字符串。如果你想计数时,你可以使用这个配置,以便在任何时候都是可用的,并在任何移动触发中断。

另请注意,如果不存在,SFL项目中的写入额外代码的空间非常有限,问题是keil的限制,因为它不会通过32k编译额外的代码,所以我建议除非原始项目您希望传感器融合功能。

由于MT_dialog

michaelmeng998
离线
最后看到:4年3个月前
加入:2017-01-11 07:46
嗨MT_dialog !你提到的

嗨MT_dialog !您提到,在广告完成后,物联网项目会受到任何类型运动的中断,因此如果检测到有运动,中断处理程序将被触发,以便设备再次开始广告。如果我们想让中断一直处于启用状态,而不仅仅是在14583进入睡眠状态之后呢?我们现在关闭了14583的睡眠模式。

此外,您还提到我们可以在user_adv_start函数中编写一个标志。我们将如何使用任何运动或阶梯式计数器功能来帮助我们实现我们的目标。我们已经尝试使用read_step_counter语句在user_app_adv_undirect_complete函数中写入一个标志,但它根本不起作用。

谢谢,

迈克尔

MT_dialog
离线
最后看到:4个月2周之前
工作人员
加入:2015-06-08 34
嗨michaelmeng998,

嗨michaelmeng998,

如果你想让中断一直启用,那么你必须配置传感器,从设备运行的时间提供一个中断,得到那个中断后,你可以把它看作一个运动,还有你要考虑的运动,这取决于你如何在IMU上配置中断,BMI中断在永久、临时或非锁存模式下运行(请查看BMI160数据表获取更多信息)。

关于如何执行此操作,请告知传感器的数据表,该模块IT Self提供了一系列配置和中断,这些配置和中断在某些情况下触发,因此您应该检查什么适合您并启用BMI模块中的相应功能。关于user_adv_start_function中的写作标志,我提到的是,如果您想宣传设备正在移动,因为设备在永久睡眠状态下落下时,设备可以启用中断,并且可以设置a计数器或标志作为设备移动和宣传的指示。

由于MT_dialog

michaelmeng998
离线
最后看到:4年3个月前
加入:2017-01-11 07:46
嗨MT_dialog:

嗨MT_dialog:

我还是有点困惑。我检查了datashetable .h源文件,它有一些特定的IRQn's像从低功率中断唤醒,接收中断在每个收到的数据包结束,和广告中断结束,但没有中断对应,当我们第一次启动设备。

此外,在在线的bmi160数据表中,它说有一个anymotion中断寄存器(INT_MOTION, 0x5F-0x62)。我想知道如何启用这个中断。另外,我们是否需要编写一个单独的中断处理程序,或者可以调用一个预先编写的中断处理程序,如wkup_intr_non_connected_cb?

MT_dialog
离线
最后看到:4个月2周之前
工作人员
加入:2015-06-08 34
嗨michaelmeng998,

嗨michaelmeng998,

当代码开始在设备上运行时,没有中断,如果您想知道您可以在哪里设置中断以便触发,则可以将其放在.app_on_init回调中,或者您甚至可以将其放置在广告启动时。

当设备停止发布广告时,物联网源代码启用该中断,在user_app_on_adv_undirect_complete中,如果您检查user_init_bmi_nc()函数,您将能够找到如何设置任何运动中断BMI的示例,更具体地说,user_bmi160_config_anymotion_intr()是设置要触发的中断的函数。您可以检查该函数并将您想要的配置应用到您的项目中。关于中断的处理,在物联网上,这个中断连接到唤醒计时器(当设备处于睡眠状态时可用的中断),为了给那个中断分配一个ISR,有wkupct_register_callback() api来做这个,例如在任何动机中断后的物联网和IMU已经配置函数config_da1458x_pin_intr_non_connected()被调用时,该函数注册wkup_intr_non_connected_cb唤醒定时器并设置销,预计通过wkupct_enable_irq中断()函数。

由于MT_dialog

michaelmeng998
离线
最后看到:4年3个月前
加入:2017-01-11 07:46
嘿MT_dialog。谢谢你的

嘿MT_dialog。谢谢你的回复。我还有几个问题。您提到user_init_bmi_nc()函数是使用任何运动中断设置BMI的函数?当我检查user_wrbl.c文件时,在发布完成后user_app_on_adv_undirect_complete函数中调用了user_init_bmi_nc()函数。因此,如果我们想在广告开始时设置中断,是否只需将user_init_bmi_nc()函数移动到user_adv_start()函数?

此外,由于我想访问加密狗的运动状态(无论它是否移动),然后配置我们的广告包携带无论它是否移动,(我们已经有能力修改广告包的大小,我们只需要正确地访问运动状态信息)在bmi160检测到运动后,运动状态存储在哪里?是否有一个特定的队列保存我们可以访问的信息?

MT_dialog
离线
最后看到:4个月2周之前
工作人员
加入:2015-06-08 34
嗨michaelmeng998,

嗨michaelmeng998,

不仅user_init_bmi_nc(),这只设置配置传感器一端,你也将会配置中断583年user_app_on_adv_undirect_complete,这边也有一些额外的配置,配置的代码乌兹别克斯坦伊斯兰运动设备,请阅读并试图理解代码。如果您只是放置user_init_bmi_nc(),它只是不能工作。

关于你的第二个问题,你将能够在IMU的数据表中找到答案和更多的信息,然而,当中断被触发时,你可以在wkup_intr_non_connected_cb()中看到设备读取一些寄存器(INT_STATUS_寄存器- 0x1C, 0x1D,0x1E),以便确定触发的中断是什么。

由于MT_dialog

jeremynwong
离线
最后看到:4年2个月前
加入:2017-01-16 14:09
嗨MT_Dialog,

嗨MT_Dialog,

我们已经设置好了当适配器移动时触发的中断。这部分工作。我们希望运行另一个类似但不同的函数,而不是执行默认的user_adv_start操作。

原因是我们将user_adv_start函数设置为使用0x00标志开始发布广告,该标志在程序初始化时被调用,因为“未移动”应该是我们的初始状态。

然而,中断表示已经发生了移动,我们希望以0x01为标志开始发布消息。我们创建了一个名为restart_adv的单独函数,并在中断处理程序中调用该函数,如下所示。然而,即使这个函数被调用(我们在调试器中验证了这一点),软件狗也会用0x00重启广告,即使我们将0x01作为参数传递给我们的start广告函数。

相关代码包括在下面。

谢谢,
杰里米

/ /在user_platform.c
Void wkup_intr_non_connected_cb(Void) //当软件狗移动时,该函数被成功调用

restart_adv ();

/ /在user_wrbl.c
Void user_adv_start(Void){//这是在程序初始化时调用的,用0x00发布
user_easy_gap_undirected_advertise_start (FAST_ADV_INTERVAL 0 x00);

Void restart_adv(Void){//这是我们想要从中断处理程序调用的,应该用0x01发布
user_easy_gap_undirected_advertise_start (FAST_ADV_INTERVAL 0 x01);

//启动广告的功能,我们为我们要宣传的用户数据添加了额外参数
Static void user_easy_gap_undirected_advertise_start(uint16_t adv_intv, uint8_t user_data)

struct gapm_start_advertise_cmd * cmd;
Timer_hnd app_adv_data_update_timer_used = app_easy_timer(1000, adv_data_update_timer_cb);

cmd = app_easy_gap_undirected_advertise_get_active ();
cmd - > intv_max = adv_intv;
cmd - > intv_min = adv_intv;
user_add_adv_info (cmd - > info.host。scan_rsp_data 10);
user_add_accel_info (cmd - > info.host。scan_rsp_data user_data);//修改我们用于发布数据的字节

app_easy_gap_undirected_advertise_start ();

//我们现在可以连接
ke_state_set (TASK_APP APP_CONNECTABLE);

Uint8_t user_add_accel_info(Uint8_t *padv, Uint8_t user_data){
padv [7] = user_data;
返回0;

jeremynwong
离线
最后看到:4年2个月前
加入:2017-01-16 14:09
嗨MT_Dialog,

嗨MT_Dialog,

我们找到问题所在了。谢谢!

杰里米

MT_dialog
离线
最后看到:4个月2周之前
工作人员
加入:2015-06-08 34
嗨jeremynwong,

嗨jeremynwong,

感谢您的表明,如果您发现它们有用或甚至随意分享您的解决方案,请接受上述任何答案以便其他人在类似的问题中获得帮助。

由于MT_dialog