930电子网

 找回密码
 立即注册
艾克姆科技推出最新产品STC32G12K128开发板
查看: 18841|回复: 1

52840做主机连接多个从机是否需要修改softdevice

[复制链接]

8

主题

13

帖子

87

积分

注册会员

Rank: 2

积分
87
发表于 2021-6-8 16:19:34 | 显示全部楼层 |阅读模式
hi
利用52840作为主机 扫描周围蓝牙设备
之前代码都是扫描--名字过滤--连接
用的是nus服务
流程是52840和一个周围设备连接以后 收发一次 随后周围设备主动断来连接
于是52840继续扫描
如此这样循环

现在我想参考那个多链接的案例 让52840一次可以连接多个设备 同时收发信息
代码修改了一下  感觉变化也不多 我放在后面
问题是现在52840和一个连接以后 第二个设备连接的时候会死机 也不是死机 是挂在了某个地方 程序不跑了 表现是log停止
想问问 这个一主多从 是不是有不一样的softdevice呢


  1. 单例变为数组 一个从机对应一个nus的实例同时需要一个发现服务
  2. BLE_NUS_C_ARRAY_DEF(m_ble_nus_c, NRF_SDH_BLE_CENTRAL_LINK_COUNT);         
  3. BLE_DB_DISCOVERY_ARRAY_DEF(m_db_disc, NRF_SDH_BLE_CENTRAL_LINK_COUNT);  
  4. //BLE_NUS_C_DEF(m_ble_nus_c);                                             /**< BLE Nordic UART Service (NUS) client instance. */                                           /**< GATT module instance. */
  5. //BLE_DB_DISCOVERY_DEF(m_db_disc);                                        /**< Database discovery module instance. */
  6. NRF_BLE_SCAN_DEF(m_scan);                                               /**< Scanning Module instance. */
  7. NRF_BLE_GATT_DEF(m_gatt);
复制代码
  1. #define NRF_SDH_BLE_CENTRAL_LINK_COUNT 4
  2. #define NRF_SDH_BLE_TOTAL_LINK_COUNT 4
复制代码
后面是处理编译错误
  1. //static void db_disc_handler(ble_db_discovery_evt_t * p_evt)
  2. //{
  3. //    //NRF_LOG_INFO("[BLE]  db_disc_handler");
  4. //    ble_nus_c_on_db_disc_evt(&m_ble_nus_c, p_evt);
  5. //}
  6. static void db_disc_handler(ble_db_discovery_evt_t * p_evt)
  7. {
  8.     NRF_LOG_DEBUG("call to ble_lbs_on_db_disc_evt for instance %d and link 0x%x!",
  9.                   p_evt->conn_handle,
  10.                   p_evt->conn_handle);

  11.     ble_nus_c_on_db_disc_evt(&m_ble_nus_c[p_evt->conn_handle], p_evt);
  12. }
复制代码
  1. static void ble_evt_handler(ble_evt_t const * p_ble_evt, void * p_context)
  2. {
  3.     ble_gap_evt_t const * p_gap_evt = &p_ble_evt->evt.gap_evt;

  4.     switch (p_ble_evt->header.evt_id)
  5.     {
  6.         case BLE_GAP_EVT_CONNECTED:
  7.         // err_code = ble_nus_c_handles_assign(&m_ble_nus_c, p_ble_evt->evt.gap_evt.conn_handle, NULL);
  8.         err_code = ble_nus_c_handles_assign(&m_ble_nus_c[p_gap_evt->conn_handle],
  9.                                             p_gap_evt->conn_handle,
  10.         NULL);
  11.         //  err_code = ble_db_discovery_start(&m_db_disc, p_ble_evt->evt.gap_evt.conn_handle);
  12.         err_code = ble_db_discovery_start(&m_db_disc[p_gap_evt->conn_handle],
  13.                                             p_gap_evt->conn_handle);
复制代码


回复

使用道具 举报

52

主题

354

帖子

6545

积分

版主

Rank: 7Rank: 7Rank: 7

积分
6545
发表于 2021-7-2 10:02:55 | 显示全部楼层
首先,softdevice是不能修改的(没有源码,修改不了的),然后是softdevice是支持多个链路的。
一主多从需要注意的是:链路数量和内存需要修改,原来声明的单个实例在这里都要改成数组形式的,另外,注意断开连接后,句柄要清零,否则下次连接就会出问题。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|官方淘宝店|930电子网 ( 皖ICP备16000695号-2 )

GMT+8, 2024-11-21 19:45 , Processed in 0.061219 second(s), 22 queries .

快速回复 返回顶部 返回列表