嗨,,
我连接两个设备有问题。
Dev1 (slave)正在发送包含我想在Dev2 (Central)上检索的数据的广告。
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”);
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。然而不为什么。
我无法理解它。任何帮助都将不胜感激。谢谢。
更新,
更改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。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设计的参考。我错过了什么?
Hi Insi,为了连接中心必须能够看到广告,然后发送连接请求。所以当连接时,这就开始了一个临时扫描。如果你查看你的app_easy_gap_start_connection_to_set(..), gap_start_connection_cmd需要你的scan_interval, window等。因此,在这个调用之后,发送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是否: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(DSP主机示例)到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;
}
}
}
什么好主意吗?
嗨insi,
我道歉 - 我不熟悉DSP主机。我现在看到他们正在等待扫描到完成的Piror以发送Connect命令。BTW,10秒的连接间隔在BLE规格之外。
您能从user_config.h文件中向我发送以下配置 - user_scan_conf(如果适用)和user_central_conf?
由于JK
你好,
间隔> 10秒根据BLE规格。是的,你是对的,但在这一点上,我一直在试验一切。我使用MS_TO_DOUBLESLOTS(10000)除以1.25,所以我认为我是安全的。
我只有user_config。h。我也附加了其他配置以防万一。但是,这些都是直接取自ble_app_barebone示例的。但是请检查一下是否有奇怪的地方。
在DSPS例子astruct central_configuration已被定义,但我无法在当前(稍后)的SDK中找到这一点。所以我认为它已被推翻。如果我错了,请纠正我。
再次感谢!
嗨INSI,我们可以尝试使用DSPS Comment examper并使用外围地址修改此文件吗?让我们看看是否可以以这种方式连接连接。