你好,,
我有两个设备连接问题。
DEV1(从)被发送,我想检索装置2(中央)包含广告数据。
Dev1似乎罚款并在没有任何问题的情况下进行规划,并且在DEV2上达到了DEV2在CALL 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”);
结构gapm_start_scan_cmd * CMD = KE_MSG_ALLOC(GAPM_START_SCAN_CMD,TASK_GAPM,TASK_APP,gapm_start_scan_cmd);
CMD-> op.code = GAPM_SCAN_PASSIVE;
cmd-> op.addr_src = gapm_public_addr;
CMD->间隔= 10;
CMD->窗口= 5;
cmd-> mode = 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回调,则PARAMS是:
param-> report.adv_addr_type:0×01,我期待与单片机的正确MAC地址。
不过,我似乎并没有得到任何连接,并经过一番调试我得到gapm_cmp_evt_handler与参数:操作= 0×12和状态= 0x40的。状态清楚地表明,无效的参数传递。我相信在app_easy_gap_start_connection_to_set。然而不知其所以然。
我不能换我的头周围。任何帮助都得到了赞赏。谢谢。
更新,
更改MTU(至23)和min,最大连接间隔为100 ms让我缩放到Gap_err_Protocol_Problem。为什么这是非常有帮助的指南。
嗨insi,
据我所知,从你所获得的事实和错误,0x12是由于参数无效取消连接,所以你传递给app_easy_gap_start_connection_to_set()的参数是什么?没有文件,以便设备充当一个中央,但您可以在主机侧看看DSP参考设计。您描述的程序是正确的,我没有看到改变连接的间隔之间的关系,但是,设备的间隙角色是什么,是它的gap_observer_sca吗?我问这个是因为我看到设备在Gap_observer_mode(在扫描函数中)扫描,而Gap_err_protocol_Probram是我可以用上面的角色配置复制的东西,这是因为如果您不能有连接设备在Obserever模式下运行。
谢谢mt_dialog.
感谢您的答复!
我将模式更改为GAP_GEN_DISCOVERY,但现在我GET GAP_ERR_INVALID_PARAM。
我正在遵循DSP参考(如其他论坛帖子所示)。
作用是:GAP_CENTRAL_MST。
我想一个设备使用app_easy_gap_start_connection_to_set:
如果(memcmp(param-> report.adv_addr.addr,MAC_ADDR,6)== 0)
{
printf_string( “连接\ r \ n”);
app_easy_gap_start_connection_to_set(param-> report.adv_addr_type,
(uint8_t *)&param-> 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设计参考引用。我错过了什么?
嗨INSI,以连接中心必须能够看到广告,然后发送连接请求。所以连接时,这将启动一个临时的扫描。如果你看着你的app_easy_gap_start_connection_to_set(..),该gap_start_connection_cmd需要你scan_interval,窗口等这个电话后,所以,正确的,你送user_gapm_cancel(),这将停止此操作,因此取消回调。
让我知道,如果除去该解决此问题。
由于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 MSGID:W0
1.1操作:11
1.2状态:45
扫描完成
gapm_cmp_evt_handler.。
2.0 MSGID:W0
2.1操作:12
2.2状态:41
所以协议问题之前,我得到超时。使用时app_easy_gap_start_connection_to_set(..),我给了一直在改变USER_CON_INTV参数从12.5(DSP主机示例)到10000(推测10秒):
无效user_on_adv_report_ind(结构gapm_adv_report_ind常量* PARAM)
{
如果(memcmp(param-> report.adv_addr.addr,MAC_ADDR,6)== 0)
{
如果(连接== FALSE)
{
printf_string(“连接到设备\ r \ n”);
app_easy_gap_start_connection_to_set(param-> report.adv_addr_type,
(uint8_t *)&param-> report.adv_addr.addr,
MS_TO_DOUBLESLOTS(USER_CON_INTV));
连接= TRUE;
}
}
}
有任何想法吗?
嗨insi,
我道歉 - 我不熟悉DSP主机。我现在看到他们正在等待扫描到完成的Piror以发送Connect命令。BTW,10秒的连接间隔在BLE规格之外。
您能从user_config.h文件中向我发送以下配置 - user_scan_conf(如果适用)和user_central_conf?
谢谢JK.
你好,
间隔>根据BLE规范10秒。是的,你是正确的,但在这一点上我一直在尝试一切。我用MS_TO_DOUBLESLOTS(10000),其通过1.25所以我假定I”是安全的分裂。
我只有user_config.h。我也以防万一连接其他CONFIGS。然而,这些都取自ble_app_barebone例如直客。但是,如果事情是奇数,请doulbe检查。
在DSPS例如结构central_configuration已被定义,但我无法在当前(稍后)的SDK中找到这一点。所以我认为它已被推翻。如果我错了,请纠正我。
再次感谢!
嗨INSI,我们可以尝试使用DSPS Comment examper并使用外围地址修改此文件吗?让我们看看是否可以以这种方式连接连接。