多nus服务一主多从

当前网关nordic52840的代码,主机的连接是一主一从

计划增加nordic52840的连接能力,参考SDK一主八从的代码修改
nRF5_SDK_15.2.0_9412b96\examples\ble_central\ble_app_multilink_central



本文记录需要修改的地方

修改文件 \nRF5_SDK_15.2.0_9412b96\examples\GW_Nordic_nrf52832\mc_nxin_gw_ble\pca10056\s140\config\sdk_config.h       
#define NRF_SDH_BLE_CENTRAL_LINK_COUNT 8
#define NRF_SDH_BLE_TOTAL_LINK_COUNT 8
此处修改主机连接N个从机

修改文件 \DA145xx_SDK_for_handover\DA145xx_SDK\BACK\nRF5_SDK_15.2.0_9412b96\components\ble\ble_db_discovery\ble_db_discovery.h
#define BLE_DB_DISCOVERY_MAX_SRV        1   /**< Maximum number of services supported by this module. This also indicates the maximum number of users allowed to be registered to this module (one user per service). */
此处修改不是必须的
这里的意思是  从机中的服务的数量 
在一个主机连接N从机的情形中 有可能A从机是nus服务 B从机是lbs服务 C从机是nus+lbs服务这样
此时就需要支持2个服务 因为我们从机都是统一的nus服务 因此可以写为1 这样全局的数组更小一些


修改文件 \nRF5_SDK_15.2.0_9412b96\examples\GW_Nordic_nrf52832\mc_nxin_gw_ble\main.c
1>
BLE_NUS_C_ARRAY_DEF(m_ble_nus_c, NRF_SDH_BLE_CENTRAL_LINK_COUNT);          
BLE_DB_DISCOVERY_ARRAY_DEF(m_db_disc, NRF_SDH_BLE_CENTRAL_LINK_COUNT);  
//BLE_NUS_C_DEF(m_ble_nus_c);                                             /**< BLE Nordic UART Service (NUS) client instance. */                                           /**< GATT module instance. */
//BLE_DB_DISCOVERY_DEF(m_db_disc); 
此处修改是单个变为数组 一个从机对应一个nus的实例同时需要一个发现服务
后面基本都是解决此处修改带来的编译错误
2>
//static void db_disc_handler(ble_db_discovery_evt_t * p_evt)
//{
//    //NRF_LOG_INFO("[BLE]  db_disc_handler");
//    ble_nus_c_on_db_disc_evt(&m_ble_nus_c, p_evt);
//}
static void db_disc_handler(ble_db_discovery_evt_t * p_evt)
{
    NRF_LOG_DEBUG("call to ble_lbs_on_db_disc_evt for instance %d and link 0x%x!",
                  p_evt->conn_handle,
                  p_evt->conn_handle);

    ble_nus_c_on_db_disc_evt(&m_ble_nus_c[p_evt->conn_handle], p_evt);
}
3>
static void ble_nus_chars_received_uart_print(uint8_t * p_data, uint16_t data_len)
该函数接口需要升级 需要一个参数来区分消息TX给哪一个从机
static void ble_nus_chars_received_uart_print(ble_nus_c_t * p_ble_nus_c,uint8_t * p_data, uint16_t data_len)
XXXXX
//ret_val = ble_nus_c_string_send(&m_ble_nus_c, send_pack, 6);
ret_val = ble_nus_c_string_send(p_ble_nus_c, send_pack, 6);
4>
case BLE_NUS_C_EVT_NUS_TX_EVT:
ble_nus_chars_received_uart_print(p_ble_nus_c,p_ble_nus_evt->p_data, p_ble_nus_evt->data_len);
break;
修改上述函数的调用
5>
static void ble_nus_c_evt_handler(ble_nus_c_t * p_ble_nus_c, ble_nus_c_evt_t const * p_ble_nus_evt)
XXXXXXXXX
   err_code = ble_nus_c_string_send(p_ble_nus_c, send_pack, sizeof(send_pack));
6>
static void ble_evt_handler(ble_evt_t const * p_ble_evt, void * p_context)
{
    ble_gap_evt_t const * p_gap_evt = &p_ble_evt->evt.gap_evt;

    switch (p_ble_evt->header.evt_id)
    {
        case BLE_GAP_EVT_CONNECTED:
        // err_code = ble_nus_c_handles_assign(&m_ble_nus_c, p_ble_evt->evt.gap_evt.conn_handle, NULL);
        err_code = ble_nus_c_handles_assign(&m_ble_nus_c[p_gap_evt->conn_handle],
                                            p_gap_evt->conn_handle,
        NULL);
        //  err_code = ble_db_discovery_start(&m_db_disc, p_ble_evt->evt.gap_evt.conn_handle);
        err_code = ble_db_discovery_start(&m_db_disc[p_gap_evt->conn_handle],
                                            p_gap_evt->conn_handle);  
7>
static void nus_c_init(void)
{
    ret_code_t       err_code;
    ble_nus_c_init_t init;

    init.evt_handler = ble_nus_c_evt_handler;

    //err_code = ble_nus_c_init(&m_ble_nus_c, &init);
    //APP_ERROR_CHECK(err_code);
    for (uint32_t i = 0; i < NRF_SDH_BLE_CENTRAL_LINK_COUNT; i++)
    {
        err_code = ble_nus_c_init(&m_ble_nus_c[i], &init);
        APP_ERROR_CHECK(err_code);
    }
}


此时代码修改完毕 直接run 会看到出错log
[00:00:00.320,068] <warning> nrf_sdh_ble: Insufficient RAM allocated for the SoftDevice.
[00:00:00.320,098] <warning> nrf_sdh_ble: Change the RAM start location from 0x200029E0 to 0x200051C8.
[00:00:00.320,129] <warning> nrf_sdh_ble: Maximum RAM size for application is 0x3AE38.
需要修改KEIL
from 0x200029E0 to 0x200086F8


参考
https://my.oschina.net/u/4392850/blog/4657652





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值