diff options
author | Vinicius Costa Gomes <vinicius.gomes@openbossa.org> | 2010-07-08 16:12:50 -0300 |
---|---|---|
committer | Vinicius Costa Gomes <vinicius.gomes@openbossa.org> | 2010-07-08 21:05:36 -0300 |
commit | 6cd591344bcc9439d530f8cd4a24eb763dcbafe6 (patch) | |
tree | c2aafa5ef04417576526d7a96716379a423d9592 /lib | |
parent | 0e20e20eebd88393b212d65aca3e8e184b98c6f7 (diff) | |
download | bluez-6cd591344bcc9439d530f8cd4a24eb763dcbafe6.tar.gz |
Add the hci_le_create_conn command to libbluetooth
This is the first step in the direction of communicating with
a LE device. This creates a low level (Link Layer) connection
to a connectable device.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/hci.c | 45 | ||||
-rw-r--r-- | lib/hci_lib.h | 6 |
2 files changed, 51 insertions, 0 deletions
@@ -2695,3 +2695,48 @@ int hci_le_set_advertise_enable(int dd, uint8_t enable) return 0; } + +int hci_le_create_conn(int dd, uint16_t interval, uint16_t window, + uint8_t initiator_filter, uint8_t peer_bdaddr_type, + bdaddr_t peer_bdaddr, uint8_t own_bdaddr_type, + uint16_t min_interval, uint16_t max_interval, + uint16_t latency, uint16_t supervision_timeout, + uint16_t min_ce_length, uint16_t max_ce_length) +{ + struct hci_request rq; + le_create_connection_cp create_conn_cp; + evt_le_connection_complete conn_complete_rp; + + memset(&create_conn_cp, 0, sizeof(create_conn_cp)); + create_conn_cp.interval = interval; + create_conn_cp.window = window; + create_conn_cp.initiator_filter = initiator_filter; + create_conn_cp.peer_bdaddr_type = peer_bdaddr_type; + create_conn_cp.peer_bdaddr = peer_bdaddr; + create_conn_cp.own_bdaddr_type = own_bdaddr_type; + create_conn_cp.min_interval = min_interval; + create_conn_cp.max_interval = max_interval; + create_conn_cp.latency = latency; + create_conn_cp.supervision_timeout = supervision_timeout; + create_conn_cp.min_ce_length = min_ce_length; + create_conn_cp.max_ce_length = max_ce_length; + + memset(&rq, 0, sizeof(rq)); + rq.ogf = OGF_LE_CTL; + rq.ocf = OCF_LE_CREATE_CONN; + rq.event = EVT_LE_CONN_COMPLETE; + rq.cparam = &create_conn_cp; + rq.clen = LE_CREATE_CONN_CP_SIZE; + rq.rparam = &conn_complete_rp; + rq.rlen = EVT_CONN_COMPLETE_SIZE; + + if (hci_send_req(dd, &rq, 1000) < 0) + return -1; + + if (conn_complete_rp.status) { + errno = EIO; + return -1; + } + + return 0; +} diff --git a/lib/hci_lib.h b/lib/hci_lib.h index 371bfd38..2a36dc4e 100644 --- a/lib/hci_lib.h +++ b/lib/hci_lib.h @@ -120,6 +120,12 @@ int hci_le_set_scan_parameters(int dev_id, uint8_t type, uint16_t interval, uint16_t window, uint8_t own_type, uint8_t filter); int hci_le_set_advertise_enable(int dev_id, uint8_t enable); +int hci_le_create_conn(int dd, uint16_t interval, uint16_t window, + uint8_t initiator_filter, uint8_t peer_bdaddr_type, + bdaddr_t peer_bdaddr, uint8_t own_bdaddr_type, + uint16_t min_interval, uint16_t max_interval, + uint16_t latency, uint16_t supervision_timeout, + uint16_t min_ce_length, uint16_t max_ce_length); int hci_for_each_dev(int flag, int(*func)(int dd, int dev_id, long arg), long arg); int hci_get_route(bdaddr_t *bdaddr); |