static int cmd_connect_le(int argc, char *argv[]) { int err; bt_addr_le_t addr; struct bt_conn *conn; if (argc < 3) { return -EINVAL; } err = str2bt_addr_le(argv[1], argv[2], &addr); if (err) { printk("Invalid peer address (err %d)\n", err); return 0; } conn = bt_conn_create_le(&addr, BT_LE_CONN_PARAM_DEFAULT); if (!conn) { printk("Connection failed\n"); } else { printk("Connection pending\n"); /* unref connection obj in advance as app user */ bt_conn_unref(conn); } return 0; }
static int bt_connect(u32_t mgmt_request, struct net_if *iface, void *data, size_t len) { struct bt_context *ctxt = net_if_get_device(iface)->driver_data; bt_addr_le_t *addr = data; if (len != sizeof(*addr)) { NET_ERR("Invalid address"); return -EINVAL; } if (ctxt->ipsp_chan.chan.conn) { NET_ERR("No channels available"); return -ENOMEM; } if (default_conn) { return bt_l2cap_chan_connect(default_conn, &ctxt->ipsp_chan.chan, L2CAP_IPSP_PSM); } default_conn = bt_conn_create_le(addr, BT_LE_CONN_PARAM_DEFAULT); return 0; }
static void connect(const uint8_t *data, uint16_t len) { struct bt_conn *conn; uint8_t status; conn = bt_conn_create_le((bt_addr_le_t *) data, BT_LE_CONN_PARAM_DEFAULT); if (!conn) { status = BTP_STATUS_FAILED; goto rsp; } bt_conn_unref(conn); status = BTP_STATUS_SUCCESS; rsp: tester_rsp(BTP_SERVICE_ID_GAP, GAP_CONNECT, CONTROLLER_INDEX, status); }
bool BLECentralRole::connect(const bt_addr_le_t *addr, const bt_le_conn_param_t *param) { BLEPeripheralHelper* temp = NULL; BLEPeripheralHelper* unused = NULL; bool link_existed = false; bool retval = false; // Find free peripheral Items for (int i = 0; i < BLE_MAX_CONN_CFG; i++) { temp = _peripherial[i]; if (true == *temp) { if (*temp == *addr) { // Connect request has scheduled but connection don't established. // The central can see the ADV and no need to send connect request. link_existed = true; break; } } else { if (NULL == unused) { unused = temp; } } } if (!link_existed) { // Send connect request bt_conn_t* conn = bt_conn_create_le(addr, param); if (NULL != conn) { unused->setAddress(*addr); retval = true; bt_conn_unref(conn); } } return retval; }
static bool eir_found(uint8_t type, const uint8_t *data, uint8_t data_len, void *user_data) { bt_addr_le_t *addr = user_data; int i; printk("[AD]: %u data_len %u\n", type, data_len); switch (type) { case BT_DATA_UUID16_SOME: case BT_DATA_UUID16_ALL: if (data_len % sizeof(uint16_t) != 0) { printk("AD malformed\n"); return true; } for (i = 0; i < data_len; i += sizeof(uint16_t)) { uint16_t u16; int err; memcpy(&u16, &data[i], sizeof(u16)); if (sys_le16_to_cpu(u16) != BT_UUID_HRS_VAL) { continue; } err = bt_le_scan_stop(); if (err) { printk("Stop LE scan failed (err %d)\n", err); continue; } default_conn = bt_conn_create_le(addr, BT_LE_CONN_PARAM_DEFAULT); return false; } } return true; }