2591
2604
*accuracy = rp.accuracy;
2608
int hci_le_set_scan_enable(int dd, uint8_t enable, uint8_t filter_dup)
2610
struct hci_request rq;
2611
le_set_scan_enable_cp scan_cp;
2614
memset(&scan_cp, 0, sizeof(scan_cp));
2615
scan_cp.enable = enable;
2616
scan_cp.filter_dup = filter_dup;
2618
memset(&rq, 0, sizeof(rq));
2619
rq.ogf = OGF_LE_CTL;
2620
rq.ocf = OCF_LE_SET_SCAN_ENABLE;
2621
rq.cparam = &scan_cp;
2622
rq.clen = LE_SET_SCAN_ENABLE_CP_SIZE;
2623
rq.rparam = &status;
2626
if (hci_send_req(dd, &rq, 100) < 0)
2637
int hci_le_set_scan_parameters(int dd, uint8_t type,
2638
uint16_t interval, uint16_t window,
2639
uint8_t own_type, uint8_t filter)
2641
struct hci_request rq;
2642
le_set_scan_parameters_cp param_cp;
2645
memset(¶m_cp, 0, sizeof(param_cp));
2646
param_cp.type = type;
2647
param_cp.interval = interval;
2648
param_cp.window = window;
2649
param_cp.own_bdaddr_type = own_type;
2650
param_cp.filter = filter;
2652
memset(&rq, 0, sizeof(rq));
2653
rq.ogf = OGF_LE_CTL;
2654
rq.ocf = OCF_LE_SET_SCAN_PARAMETERS;
2655
rq.cparam = ¶m_cp;
2656
rq.clen = LE_SET_SCAN_PARAMETERS_CP_SIZE;
2657
rq.rparam = &status;
2660
if (hci_send_req(dd, &rq, 100) < 0)
2671
int hci_le_set_advertise_enable(int dd, uint8_t enable)
2673
struct hci_request rq;
2674
le_set_advertise_enable_cp adv_cp;
2677
memset(&adv_cp, 0, sizeof(adv_cp));
2678
adv_cp.enable = enable;
2680
memset(&rq, 0, sizeof(rq));
2681
rq.ogf = OGF_LE_CTL;
2682
rq.ocf = OCF_LE_SET_ADVERTISE_ENABLE;
2683
rq.cparam = &adv_cp;
2684
rq.clen = LE_SET_ADVERTISE_ENABLE_CP_SIZE;
2685
rq.rparam = &status;
2688
if (hci_send_req(dd, &rq, 100) < 0)
2699
int hci_le_create_conn(int dd, uint16_t interval, uint16_t window,
2700
uint8_t initiator_filter, uint8_t peer_bdaddr_type,
2701
bdaddr_t peer_bdaddr, uint8_t own_bdaddr_type,
2702
uint16_t min_interval, uint16_t max_interval,
2703
uint16_t latency, uint16_t supervision_timeout,
2704
uint16_t min_ce_length, uint16_t max_ce_length,
2705
uint16_t *handle, int to)
2707
struct hci_request rq;
2708
le_create_connection_cp create_conn_cp;
2709
evt_le_connection_complete conn_complete_rp;
2711
memset(&create_conn_cp, 0, sizeof(create_conn_cp));
2712
create_conn_cp.interval = interval;
2713
create_conn_cp.window = window;
2714
create_conn_cp.initiator_filter = initiator_filter;
2715
create_conn_cp.peer_bdaddr_type = peer_bdaddr_type;
2716
create_conn_cp.peer_bdaddr = peer_bdaddr;
2717
create_conn_cp.own_bdaddr_type = own_bdaddr_type;
2718
create_conn_cp.min_interval = min_interval;
2719
create_conn_cp.max_interval = max_interval;
2720
create_conn_cp.latency = latency;
2721
create_conn_cp.supervision_timeout = supervision_timeout;
2722
create_conn_cp.min_ce_length = min_ce_length;
2723
create_conn_cp.max_ce_length = max_ce_length;
2725
memset(&rq, 0, sizeof(rq));
2726
rq.ogf = OGF_LE_CTL;
2727
rq.ocf = OCF_LE_CREATE_CONN;
2728
rq.event = EVT_LE_CONN_COMPLETE;
2729
rq.cparam = &create_conn_cp;
2730
rq.clen = LE_CREATE_CONN_CP_SIZE;
2731
rq.rparam = &conn_complete_rp;
2732
rq.rlen = EVT_CONN_COMPLETE_SIZE;
2734
if (hci_send_req(dd, &rq, to) < 0)
2737
if (conn_complete_rp.status) {
2743
*handle = conn_complete_rp.handle;