嗨对话框
我正在使用DSPS项目,(1- central和6 - DSPS_DEVICE)
问:当DSPS_CENTRAL连接到DSPS_DEVICE-1时,为了与DSPS_DEVICE-2建立连接(在不断开与设备1的连接的情况下),我是否需要再次扫描,否则DSPS_CENTRAL可以使用之前的扫描报告直接连接到设备?如何做到这一点?
设备:
嗨对话框
我正在使用DSPS项目,(1- central和6 - DSPS_DEVICE)
问:当DSPS_CENTRAL连接到DSPS_DEVICE-1时,为了与DSPS_DEVICE-2建立连接(在不断开与设备1的连接的情况下),我是否需要再次扫描,否则DSPS_CENTRAL可以使用之前的扫描报告直接连接到设备?如何做到这一点?
嗨prasanth.velliyangiri,
如果您有第二个想要连接的设备的公共bd地址,您可以立即启动连接过程,而不需要扫描,只需使用app_easy_gap_start_connection_to_set()函数并设置地址、地址类型和连接间隔。如果你没有地址,你需要扫描,你应该发出扫描命令栈获取地址,然后发出相同的连接命令从扫描过程中获得的地址。
由于MT_dialog
嗨对话框
谢谢您的回复,
最初我的扫描报告只包含一个设备,过了一段时间它就包含了所有可用的设备,为什么??
这是因为uart打印延迟吗??或者我需要引入一些延迟来扫描所有可用的设备??
我用这个格式打印了整个扫描报告
(我= 0;我
嗨prasanth.velliyangiri,
扫描仪每次扫描一个通道,并逐个报告设备,并在user_on_adv_report_ind中打印它们。如果这是您的意思,您不会在user_on_adv_report_ind调用上获得两个设备。
由于MT_dialog
嗨
谢谢你的回复。
现在我的扫描报告包含多个设备地址(6),但如何与所有6个设备连接。
在proximity_monitor项目中,连接是基于用户在console app => void app_connect(unsigned char indx)中选择的索引值。
嗨prasanth.velliyangiri,
您应该修改代码,并在建立第一个连接后重新启动扫描过程。在广告指示,你可以决定你愿意连接到哪个设备,无论是检查bd地址或广告字符串,如果它匹配一个预定义的字符串,你将发出一个连接命令。
由于MT_dialog
嗨对话框
Q1:设备1连接后执行的函数有哪些(gapc_connection_req=>app_on_connection=>prf_enable => ??),
在哪个函数中我必须添加scan_start连接到设备2??(它是否在=> gapm_cmp_evt_handler中??)
我想连接已知的ble设备列表(6),如何存储ble地址,这样我可以在连接时使用它??
谢谢你!
嗨prasanth.velliyangiri,
Q1:在主机端,一旦你收到一个通告消息,连接请求就会发送,当连接建立时,gapc_connection_req_ind_handler()会命中,并将确认消息发送给GAPC任务。之后调用连接回调,在回调中禁用连接计时器,主机使用app_prf_enable()函数启动发现过程(在发现过程中调用了相当多的函数,当以GATTC_DISC_CMD开始调用user_sps_enable时——关于这些消息的信息可以在RW_BLE_GATT_IS中找到)。因此,当您正在发现时,您已经连接上了,并且正在调用发现函数以检索对等设备的服务。还调用了mtu交换函数。此外,由于对等设备发出更新请求,您还应该看到gapc_param_update_req_ind_handler()也在执行。
Q2:您可以在连接完成回调函数中重新启动扫描。
Q3:你可以有一个所有可用的预定义地址的数组,当你有一个指示,你已经收到一个广告字符串时,通过该数组循环。
由于MT_dialog
嗨对话框
谢谢你的回复。
连接完成后回拨??在DSPS我看到user_on_scanning_completed
Q3: struct known_devices
{
//已知对等体地址
struct bd_addr peer_addr;
};
Struct known_devices known_device[] = {
{" \ xA1 \ xD2 \ x00 \ xCA \ xEA \ x80 "},
{“\ xA2 \ xD2 \ x00 \ xCA \ xEA \ x80 "},
};
当比较这个已知的设备地址,我得到错误,哪里是错误。
如果(bdaddr_compare (&app_env_vp.devices[我].adv_addr.addr &known_device [connect_to_device] .peer_addr))
谢谢你!
嗨prasanth.velliyangiri,
Q2: .app_on_connection = user_on_connection,您的设备已经完成与第一个设备的连接,并开始扫描第二个设备。
Q3:我不认为这是太多调试,你将不得不检查什么是参数的值,并检查什么可能出错和比较失败,你也可以使用memcmp()来比较两个bd地址。bdaddr_compare()没有做任何特殊的事情,它只是遍历两个数组并逐个检查元素。也许两个地址中的一个是相反的。
由于MT_dialog
嗨,对话框中,
我正在做DSPS项目。我正在尝试连接多个奴隶(2)与单一主人。
当我使用,user_scan_start()函数开始扫描时,我得到相同设备的广告报告多次,即使我已经启用了扫描重复过滤策略。如何解决这个问题?
嗨prasanth,
原因是DSPS在扫描时,它使用的模式是GAP_GEN_DISCOVERY,当在该模式下执行扫描时,过程自动过期,DSPS发送一个新的扫描命令以重新开始扫描。因此,在启用重复过滤器的扫描命令期间,您不应该从同一设备获得额外的广告事件,但当您重新启动扫描时,这些广告事件将再次弹出。您可以实现一个额外的缓冲区来保存之前扫描期间的设备,或者您可以将GAP_GEN_DISCOVERY模式更改为GAP_OBSERVER_MODE。使用GAP_OBSERVER_MODE扫描永远不会超时,所以你不必通过发送新的命令再次开始扫描,因此你不会从已经报告的设备得到额外的指示,但你会得到各种类型的广告字符串(无向的,不可连接的,有限的等)。
由于MT_dialog