在多个任务中接收不可编辑的事件

⚠️
你好。。谢谢你来参加论坛。令人兴奋的消息!我们现在正在移动到我们的新论坛平台,将提供更好的功能,并包含在主对话网站的过程。所有帖子和账号都已迁移。我们现在只接受新论坛上的流量-请在//www.xmece.com/support. 我们将在未来几天内修复bug/优化搜索和标记。
6个职位/0个新职位
最后一篇文章
火鸟
离线
最后一次露面:4天21小时前
已加入:2019-07-12 09:48
在多个任务中接收不可编辑的事件

大家好,

我有质疑在网格应用程序中进行分离的扫描,如下线程。

https://support.dialog-seminile.com/forums/post/dialog-smartbond-bluetooth-low-energy-%2%80%93-software/separate-scan-mesh-application.

但是,当我在单独的任务中调用ble\u gap\u scan\u start()并使用ble\u get\u event()获取ble events时,控制台说另一个扫描已经在运行,并且不仅ble\u EVT\u gap\u ADV\u REPORT/ble\u EVT\u gap\u scan\u已完成,而且在同一任务中还接收到其他事件。

最终,网格应用程序无法工作。

如何在多个任务中分离可重用的事件处理?

设备:
PM_DIALOG.
离线
最后一次露面:1天17小时前
工作人员
已加入:2018-02-08 11:03
嗨firebird。

嗨firebird。

我假设你在做bleèmesh项目。否则,请注明您的工作地点。既然你已经修改了,你能分享一下我们做了哪些修改,你的要求是什么吗?您添加了自定义任务吗?

谢谢,PM_DIALOG.

火鸟
离线
最后一次露面:4天21小时前
已加入:2019-07-12 09:48
你好,

你好,

是的,我正在使用带有网格SDK 1.6.1的BLE_MESH示例。

我添加了以下任务,并在设置设备后启动它。

目前,这个任务只是开始另一个扫描和检查RSSI强度。稍后我将添加一些代码来标识特定设备。

/******************************************************************************************************************@文件扫描程序\u task.c**@brief Main task+BLE**版权所有(c)2019 INFOMARK,Co.,Ltd.*此计算机程序包括INFOMARK,Co.的机密、专有信息*。,有限公司。保留所有权利。*************************************************************************************/#include#include#include“osal.h”#include“ad.h”#include“ble”common.h#include“ble”gap.h#include“ble”bufops.h#include“ble”uuid.h#include“sys u watchdog.h”static void start\u scan(void){ble\u error\t status;状态=ble\ U gap\ U scan\ U start(gap\ U scan\ U PASSIVE,gap\ U scan\ U GEN\ U DISC\ U MODE,ble\ U scan\ U INTERVAL\ U FROM\ U MS(30),ble\ U scan\ U WINDOW\ U FROM\ U MS(30),false,false);如果(状态!=BLE_STATUS_OK){printf(“错误:应用程序已在扫描\r\n”);}printf(“扫描开始\r\n”);}静态void handle\u evt\u gap\u adv\u report(const ble\u evt\u gap\u adv\u report\u t*evt){const uint8\u t*p;uint8\t广告长度,广告类型;const char*dev_name=空;size\t dev\u name\u len=0;printf(“找到的设备:%s%s RSSI=%d\r\n”,evt->address.addr\u type==公共地址?”public“:”private“,ble\ u address\ u to\ u string(&evt->address),(int8\ t)evt->rssi);for(p=evt->数据;p数据+evt->长度;p+=adu len{adu len=(*p++)-1;/*ad_len仅为值的长度,不带类型*/ad_type=*p++;/*找不到设备,因此我们查找UUID*/if(ad_type==GAP_DATA_type_uid16_LIST | | ad_type==GAP_DATA_type_uid16_LIST_INC){size_t idx;对于(idx=0;idx<广告长度;idx+=sizeof(uint16\u t)){printf(“\tUUID16:%04X\r\n”,get\u u16(p+idx));}}/*如果找到正确的UUID,则查找名称并存储它以供以后使用*/if(ad_type==GAP_DATA_type_SHORT_LOCAL_name | | ad_type==GAP_DATA_type_LOCAL_name){dev_name=(const char*)p;dev\u name\u len=ad\u len;printf(“\t名称:%.*s\r\n”,设备名称,设备名称);}}静态无效句柄\u evt \u gap \u scan \u completed(const ble \u evt \u gap \u scan \u completed \u t*evt){printf(“扫描停止\r\n”);开始_scan();}void scanner\u main\u task(void*pvParameters){/*只需删除有关未使用参数*/(void)pvParameters的编译器警告;开始扫描();对于(;;){bleïevtïhdrït*hdr;/**等待BLE事件-此任务将无限期阻止*,直到收到某个内容为止。*/hdr=ble\u get\u事件(true);如果(!hdr){继续;}switch(hdr->evt\u code){case BLE\u evt\u GAP\u ADV\u REPORT:handle\u evt\u GAP\u ADV\u REPORT((BLE\u evt\u GAP\u ADV\u REPORT*)hdr);中断;案例BLE\u EVT\u GAP\u SCAN\u COMPLETED:handle\u EVT\u GAP\u SCAN\u COMPLETED((BLE\u EVT\u GAP\u SCAN\u COMPLETED\u t*)hdr);中断;默认值:printf(“事件:%d\r\n”,hdr->evt\u代码);ble\处理\事件\默认值(hdr);中断;}/*空闲事件缓冲区(不再需要了)*/OS_Free(hdr);}}

PM_DIALOG.
离线
最后一次露面:1天17小时前
工作人员
已加入:2018-02-08 11:03
嗨Firebird,

嗨Firebird,

你能在调试模式下运行你的代码吗?它卡在什么地方了吗?

谢谢,PM_DIALOG.

火鸟
离线
最后一次露面:4天21小时前
已加入:2019-07-12 09:48
此代码运行一段时间

此代码运行一段时间和随机卡。

每次卡住,位置都不一样,所以找不出原因。

接收到一些不打算接收的事件(与MESH函数相关),如BLEïu EVTïu GAPïu ADVïu COMPLETED。

我想知道以下几点:

1.这种方法是否正确?即,我可以在不影响彼此的情况下在多个任务中获得BLE事件吗?

2.如果是这样的话,请您检查一下我的代码,并告诉我有什么问题。

3.如果没有,回到原来的问题,如何在MESH应用程序中执行单独扫描?

火鸟
离线
最后一次露面:4天21小时前
已加入:2019-07-12 09:48
任何更新?

任何更新?