YYJ 发表于 2018-11-29 22:43:00

QCC BLE 开启广播之后 用lightblue 老是连接不上 请问哪位大神...

1      BLE 初始化: 添加如下: /* Initialise GAP */
    sinkBleGapInitialise();
    ConnectionDmBleConfigureLocalAddressReq(ble_local_addr_generate_resolvable, NULL);/*配置用于BLE连接的本地设备地址*/
2设置广播参数:修改如下:
void sinkBleSetAdvertisingParamsDefault(uint16 adv_interval_min, uint16 adv_interval_max)
{
    ble_adv_params_t params;

    params.undirect_adv.adv_interval_min = adv_interval_min;
    params.undirect_adv.adv_interval_max = adv_interval_max;
    params.undirect_adv.filter_policy = ble_filter_none;

    BLE_INFO(("Set BLE Default Advertising Params\n"));

    ConnectionDmBleSetAdvertisingParamsReq(ble_adv_ind, FALSE, BLE_ADV_CHANNEL_ALL, ¶ms);
}

ConnectionDmBleSetAdvertisingParamsReq(ble_adv_ind, FALSE, BLE_ADV_CHANNEL_ALL, ¶ms);   // FALSE 改为TURE
3初始化上电完成后广播:
   case ble_gap_event_power_on:      {
            /*On bootup, start whitelist scan/adverts only if LE device available in paired device list*/
         /*   if(ConnectionDmBleCheckTdlDeviceAvailable())*/
            {
                /* Move to scanning and advertising state */
                sinkBleSetGapState(ble_gap_state_scanning_advertising); /*开启广播*/
                /* This will trigger scanning and advertising */
                sinkBleCheckNoConnectionsEvent();
            }4   广播完成之后读取本地蓝牙名称之后设置广播数据: 无修改
void sinkBleGapReadLocalNameComplete(CL_DM_LOCAL_NAME_COMPLETE_T * cfm)
{      
    BLE_GAP_INFO(("CL_DM_LOCAL_NAME_COMPLETE\n"));

    if (cfm->status != success)
    {
      BLE_GAP_ERROR(("Failed!\n"));
    }

    if (GAP.name_read & ble_gap_read_name_gap_server)
    {
      /* Use local name to respond as GAP server */
      BLE_GAP_INFO(("    Gap server response\n"));
      sinkGattGapServerSendLocalNameResponse(cfm);
    }
    if (GAP.name_read & ble_gap_read_name_advertising)
    {
      /* Use local name to setup advertising data */
      BLE_GAP_INFO(("    Set advertising data bondable=[%u]\n", sinkBleGetGapState() == ble_gap_state_bondable_scanning_advertising ? TRUE : FALSE));
      bleSetupAdvertisingData(cfm->size_local_name,
                              cfm->local_name,
                              sinkBleGetGapState() == ble_gap_state_bondable_scanning_advertising ? adv_discoverable_mode_limited : adv_non_discoverable_mode);
    }

    GAP.name_read = 0;
}5广播完成之后 用lightblue 连接总是断开 最后跟踪发现不是绑定设备所以就会断开 所以修改如下: 屏蔽非绑定设备的判断处理
bool gattServerConnectionAdd(uint16 cid, const typed_bdaddr *client_taddr)
{
    sink_attributes attributes;
    typed_bdaddr public_taddr;
    uint16 index;
    bool is_bonded_device = sinkBleCheckBdAddrtIsBonded(client_taddr, &public_taddr);

    if(is_bonded_device)
    {
      /* If we are trying to connect already bonded device in bondable
         * state, then we should be in proper state to allow the connection
         */
      if(!sinkBleGapIsConnectable())
            return FALSE;
    }
    #if 0 /*屏蔽掉设备绑定*/
    else
    {
      /* If the user has requested for bonding, and also the device is still in connectable state
         * only then we should allow non-bonded device to connect */
      if(!sinkBleGapIsBondable() || !sinkBleGapIsConnectable())
      {
            /* A non-bonded device is trying to connect, dont allow it */
            return FALSE;
      }
    }
   #endif
    /* So, we are in connectable state, now check if we still have slot for connection
   * in peripheral role */
    if(gattCommonAddConnections(cid, ble_gap_role_peripheral))
    {
      index = gattCommonConnectionFindByCid(cid);

      /* Set client service configuration to default value */
      memset(&GATT_SERVER.client_config, 0, sizeof(gatt_ccd_attributes_t));

      if (is_bonded_device)
      {
            /* Restore client configuration from PS */
            deviceManagerClearAttributes(&attributes);
            if (deviceManagerGetAttributes(&attributes, &public_taddr.addr))
            {
                GATT_SERVER.client_config = attributes.gatt_client;
                GATT_SERVER_DEBUG(("GATT Client: Read client config addr[%x:%x:%lx] config_gatt config_batt_l config_batt_r config_batt_p\n",
                                 public_taddr.addr.nap,
                                 public_taddr.addr.uap,
                                 public_taddr.addr.lap,
                                 GATT_SERVER.client_config.gatt,
                                 GATT_SERVER.client_config.battery_local,
                                 GATT_SERVER.client_config.battery_remote,
                                 GATT_SERVER.client_config.battery_peer
                                 ));
            }
      }

      /* check for repeated updates */
      if( LOCAL_UPDATE_REQD(GATT_SERVER) ||
            REMOTE_UPDATE_REQD(GATT_SERVER) ||
            PEER_UPDATE_REQD(GATT_SERVER) )
      {
            MessageCancelFirst( sinkGetBleTask(), BLE_INTERNAL_MESSAGE_BATTERY_READ_TIMER );
            MessageSend( sinkGetBleTask(), BLE_INTERNAL_MESSAGE_BATTERY_READ_TIMER, 0 );
      }

      return TRUE;
    }
    return FALSE;
}之后搜索还是不能连接请问下大神们我哪里出问题了   求助 我已经搞了几天了!!!!!






mupro 发表于 2018-11-30 08:49:38

300x的话只要这样改应该是OK的
/*if(ConnectionDmBleCheckTdlDeviceAvailable())*/
屏蔽非绑定设备的判断,直接返回true

xingdongxm 发表于 2018-11-30 10:32:24

我们qcc 3008 开启BLE 后也是有时可以连接,有时连接不上,不知问题出在哪儿?

YYJ 发表于 2018-11-30 11:15:19

mupro 发表于 2018-11-30 08:49
300x的话只要这样改应该是OK的
/*if(ConnectionDmBleCheckTdlDeviceAvailable())*/
屏蔽非绑定设备的判断 ...

就直接屏蔽掉这句么??? 那你的返回TRUE 在哪返回啊? 谢谢!!!

YYJ 发表于 2018-11-30 11:19:19

xingdongxm 发表于 2018-11-30 10:32
我们qcc 3008 开启BLE 后也是有时可以连接,有时连接不上,不知问题出在哪儿?

我是直接连接不上:'(

YYJ 发表于 2018-11-30 11:19:51

xingdongxm 发表于 2018-11-30 10:32
我们qcc 3008 开启BLE 后也是有时可以连接,有时连接不上,不知问题出在哪儿?

我是直接连接不上

YYJ 发表于 2018-11-30 11:37:18

mupro 发表于 2018-11-30 08:49
300x的话只要这样改应该是OK的
/*if(ConnectionDmBleCheckTdlDeviceAvailable())*/
屏蔽非绑定设备的判断 ...

nRF connect 是可以连接上的就是lightblue 连接不上!!!!!

深邃的蓝牙 发表于 2018-11-30 13:55:33

mark一下 学习一下

蓝牙方案设计 发表于 2018-11-30 16:34:31

安卓连接是有问题的    ios连接是可以的    不过默认的代码感觉太冗余   最好单独用gatt库写代码

xingdongxm 发表于 2018-11-30 17:09:40

开启ble bonding 以后,怎么关闭也是个问题,开启后在iPhone 的设置 里面看到同样名称的2个蓝牙设备
页: [1] 2 3
查看完整版本: QCC BLE 开启广播之后 用lightblue 老是连接不上 请问哪位大神...