⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
9个员额/ 0个新员额
最后发表
insi
离线
最后看到:3年9个月前
加入:2017-07-20 15:50
没有关系。

嗨,,
我连接两个设备有问题。

Dev1 (slave)正在发送包含我想在Dev2 (Central)上检索的数据的广告。

Dev1看起来很好,定期发送没有任何问题,它的通告在dev2调用app_easy_gap_start_connection_to_set时到达。我想连接到设备,我理解我调用app_easy_gap_start_connection_to_set。最终,在取消扫描之后,调用app_easy_gap_start_connection_to。

在Dev2上扫描是这样完成的:

空白user_scan_start(空白)

printf_string(“扫描…\ r \ n”);
struct gapm_start_scan_cmd* cmd = KE_MSG_ALLOC(gapm_start_scan_cmd, TASK_GAPM, TASK_APP, gapm_start_scan_cmd);
cmd - > op。代码= GAPM_SCAN_PASSIVE;
cmd - > op。addr_src = GAPM_PUBLIC_ADDR;
cmd - >间隔= 10;
cmd窗口- > = 5;
cmd - >模式= GAP_OBSERVER_MODE;
cmd - > filt_policy = SCAN_ALLOW_ADV_ALL;
cmd - > filter_duplic = SCAN_FILT_DUPLIC_DIS;

//发送消息
ke_msg_send (cmd);

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

从user_on_adv_report_ind回调时,参数是:
param - >报告。adv_addr_type: 0x01和我期望的设备的正确mac地址。

然而,我似乎没有得到任何连接,在一些调试之后,我得到了gapm_cmp_evt_handler参数:operation=0x12和status=0x40。状态明确指示传递的参数无效。我假定在app_easy_gap_start_connection_to_set。然而不为什么。

我无法理解它。任何帮助都将不胜感激。谢谢。

设备:
insi
离线
最后看到:3年9个月前
加入:2017-07-20 15:50
更新,

更新,

将MTU(设置为23)和最小和最大连接间隔设置为100毫秒会导致GAP_ERR_PROTOCOL_PROBLEM问题。一个关于为什么会出现这种情况的指南将会非常有帮助。

MT_dialog
离线
最后看到:5个月2个星期前
工作人员
加入:2015-06-08 34
嗨insi,

嗨insi,

就我所知,从你得到的事实和错误中,0x12是由于无效参数而取消的连接,那么你传递给app_easy_gap_start_connection_to_set()的参数是什么?设备作为中心没有文档,但您可以在主机端查看DSPS参考设计。你描述的过程是正确的,我没有看到改变连接间隔之间的关系,但是,设备的GAP角色是什么,是GAP_OBSERVER_SCA吗?我问这个,因为我可以看到设备GAP_OBSERVER_MODE下扫描(扫描函数),和GAP_ERR_PROTOCOL_PROBLEM是我可以复制上面的角色配置,这是因为你不能有一个连接如果obserever模式下的设备操作。

由于MT_dialog

insi
离线
最后看到:3年9个月前
加入:2017-07-20 15:50
谢谢您的回复!

谢谢您的回复!

我将模式更改为GAP_GEN_DISCOVERY,但现在我得到了GAP_ERR_INVALID_PARAM。

我正在遵循DSPS参考(从其他论坛帖子中已经表明)。

角色为:GAP_CENTRAL_MST。

我尝试使用app_easy_gap_start_connection_to_set设备:

如果(memcmp (param - > report.adv_addr。mac_addr, 6) == 0)

printf_string(“连接。\ r \ n”);

app_easy_gap_start_connection_to_set (param - > report.adv_addr_type,
(uint8_t *)参数- > report.adv_addr.addr,
MS_TO_DOUBLESLOTS (USER_CON_INTV));
user_gapm_cancel ();


静态孔隙user_gapm_cancel(空白)

/*禁用广告*/
Struct gapm_cancel_cmd *cmd = app_gapm_cancel_msg_create();
app_gapm_cancel_msg_send (cmd);


空白user_on_scanning_completed(空白)

printf_string(“扫描完成\ r \ n”);

app_easy_gap_start_connection_to ();

我认为这种方式可以作为DSPS设计的参考。我错过了什么?

JK_Dialog
离线
最后看到:5个月1个星期前
工作人员
加入:2016-08-22 23:07
你好,Insi,为了联系

Hi Insi,为了连接中心必须能够看到广告,然后发送连接请求。所以当连接时,这就开始了一个临时扫描。如果你查看你的app_easy_gap_start_connection_to_set(..), gap_start_connection_cmd需要你的scan_interval, window等。因此,在这个调用之后,发送user_gapm_cancel(),它将停止这个操作,因此是取消回调。

让我知道,如果删除这个解决了这个问题。

由于JK_dialog

insi
离线
最后看到:3年9个月前
加入:2017-07-20 15:50
嗨JK_Dialog,

嗨JK_Dialog,
谢谢你的回答,但恐怕还是不行。我把模式改成了GAP_GEN_DISCOVERABLE,

我有DSPS版本5.150.2。在这个例子中,它使用了user_gapm_cancel ()刚过app_easy_gap_start_connection_to_set (. .).是我的版本错了,还是关于时间间隔的设置?

我删除了user_gapm_cancel ()10秒后(gapm_start_scan_cmd.intverval = 10),而心流是这样的:
—在这10s的时间间隔内,回呼user_on_adv_report_ind(…)被调用多次,现在只有一次我'注册'设备连接使用app_easy_gap_start_connection_to_set(…)
—10s后,回呼user_on_scanning_completed ()是正确的。

我得到的流程和状态是:
gapm_cmp_evt_handler:
1.0是否:w0
1.1操作:11
1.2状态:45

扫描完成

gapm_cmp_evt_handler
2.0是否:w0
2.1操作:12
2.2状态:41

所以我要在协议问题之前暂停。当使用app_easy_gap_start_connection_to_set (. .).,我一直在改变USER_CON_INTV参数从12.5 (dsps主机示例)到10000(假设10秒的胡乱猜测):

Void user_on_adv_report_ind(struct gapm_adv_report_ind const * param)

如果(memcmp (param - > report.adv_addr。mac_addr, 6) == 0)

如果(连接= = false)

printf_string(“连接到设备\ r \ n”);

app_easy_gap_start_connection_to_set (param - > report.adv_addr_type,
(uint8_t *)参数- > report.adv_addr.addr,
MS_TO_DOUBLESLOTS (USER_CON_INTV));
连接= true;



什么好主意吗?

JK_Dialog
离线
最后看到:5个月1个星期前
工作人员
加入:2016-08-22 23:07
嗨Insi,

嗨Insi,

抱歉,我不太熟悉dsp的主机。我看到他们现在正在等待扫描完成发送连接命令。顺便说一下,10秒的连接间隔超出了BLE规范。

你能从user_config.h文件- user_scan_conf(如果适用)和user_central_conf发送你的以下配置吗?

由于JK

insi
离线
最后看到:3年9个月前
加入:2017-07-20 15:50
你好,

你好,

间隔> 10秒根据BLE规格。是的,你是对的,但在这一点上,我一直在试验一切。我使用MS_TO_DOUBLESLOTS(10000)除以1.25,所以我认为我是安全的。

我只有user_config。h。我也附加了其他配置以防万一。但是,这些都是直接取自ble_app_barebone示例的。但是请检查一下是否有奇怪的地方。

在DSPS例子astruct central_configuration已定义,但我无法在当前(稍后)sdk中找到它。所以我认为它已经被弃用了。如果我错了,请纠正我。

再次感谢!

附件:
JK_Dialog
离线
最后看到:5个月1个星期前
工作人员
加入:2016-08-22 23:07
你好,Insi,我们可以试试

Hi Insi,我们可以尝试使用DSPS中心示例并使用您的外设地址修改此文件吗?让我们看看这种联系是否可行。