diff options
author | Johan Hedberg <johan.hedberg@nokia.com> | 2011-02-19 10:05:56 -0500 |
---|---|---|
committer | Gustavo F. Padovan <padovan@profusion.mobi> | 2011-02-21 15:22:43 -0500 |
commit | e9a416b5ce0c0f93819f55d34cf6882196e9c3b2 (patch) | |
tree | d5225a0013d3e561f02fc36d89e34c0db162fcf5 /include/net/bluetooth | |
parent | 366a033698266c304abd6365ea3bcaec36860328 (diff) |
Bluetooth: Add mgmt_pair_device command
This patch adds a new mgmt_pair_device which can be used to initiate a
dedicated bonding procedure. Some extra callbacks are added to the
hci_conn struct so that the pairing code can get notified of the
completion of the procedure.
Signed-off-by: Johan Hedberg <johan.hedberg@nokia.com>
Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
Diffstat (limited to 'include/net/bluetooth')
-rw-r--r-- | include/net/bluetooth/hci_core.h | 16 | ||||
-rw-r--r-- | include/net/bluetooth/mgmt.h | 12 |
2 files changed, 28 insertions, 0 deletions
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index d5d8454236bf..506f25089207 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h | |||
@@ -248,6 +248,10 @@ struct hci_conn { | |||
248 | void *priv; | 248 | void *priv; |
249 | 249 | ||
250 | struct hci_conn *link; | 250 | struct hci_conn *link; |
251 | |||
252 | void (*connect_cfm_cb) (struct hci_conn *conn, u8 status); | ||
253 | void (*security_cfm_cb) (struct hci_conn *conn, u8 status); | ||
254 | void (*disconn_cfm_cb) (struct hci_conn *conn, u8 reason); | ||
251 | }; | 255 | }; |
252 | 256 | ||
253 | extern struct hci_proto *hci_proto[]; | 257 | extern struct hci_proto *hci_proto[]; |
@@ -571,6 +575,9 @@ static inline void hci_proto_connect_cfm(struct hci_conn *conn, __u8 status) | |||
571 | hp = hci_proto[HCI_PROTO_SCO]; | 575 | hp = hci_proto[HCI_PROTO_SCO]; |
572 | if (hp && hp->connect_cfm) | 576 | if (hp && hp->connect_cfm) |
573 | hp->connect_cfm(conn, status); | 577 | hp->connect_cfm(conn, status); |
578 | |||
579 | if (conn->connect_cfm_cb) | ||
580 | conn->connect_cfm_cb(conn, status); | ||
574 | } | 581 | } |
575 | 582 | ||
576 | static inline int hci_proto_disconn_ind(struct hci_conn *conn) | 583 | static inline int hci_proto_disconn_ind(struct hci_conn *conn) |
@@ -600,6 +607,9 @@ static inline void hci_proto_disconn_cfm(struct hci_conn *conn, __u8 reason) | |||
600 | hp = hci_proto[HCI_PROTO_SCO]; | 607 | hp = hci_proto[HCI_PROTO_SCO]; |
601 | if (hp && hp->disconn_cfm) | 608 | if (hp && hp->disconn_cfm) |
602 | hp->disconn_cfm(conn, reason); | 609 | hp->disconn_cfm(conn, reason); |
610 | |||
611 | if (conn->disconn_cfm_cb) | ||
612 | conn->disconn_cfm_cb(conn, reason); | ||
603 | } | 613 | } |
604 | 614 | ||
605 | static inline void hci_proto_auth_cfm(struct hci_conn *conn, __u8 status) | 615 | static inline void hci_proto_auth_cfm(struct hci_conn *conn, __u8 status) |
@@ -619,6 +629,9 @@ static inline void hci_proto_auth_cfm(struct hci_conn *conn, __u8 status) | |||
619 | hp = hci_proto[HCI_PROTO_SCO]; | 629 | hp = hci_proto[HCI_PROTO_SCO]; |
620 | if (hp && hp->security_cfm) | 630 | if (hp && hp->security_cfm) |
621 | hp->security_cfm(conn, status, encrypt); | 631 | hp->security_cfm(conn, status, encrypt); |
632 | |||
633 | if (conn->security_cfm_cb) | ||
634 | conn->security_cfm_cb(conn, status); | ||
622 | } | 635 | } |
623 | 636 | ||
624 | static inline void hci_proto_encrypt_cfm(struct hci_conn *conn, __u8 status, __u8 encrypt) | 637 | static inline void hci_proto_encrypt_cfm(struct hci_conn *conn, __u8 status, __u8 encrypt) |
@@ -632,6 +645,9 @@ static inline void hci_proto_encrypt_cfm(struct hci_conn *conn, __u8 status, __u | |||
632 | hp = hci_proto[HCI_PROTO_SCO]; | 645 | hp = hci_proto[HCI_PROTO_SCO]; |
633 | if (hp && hp->security_cfm) | 646 | if (hp && hp->security_cfm) |
634 | hp->security_cfm(conn, status, encrypt); | 647 | hp->security_cfm(conn, status, encrypt); |
648 | |||
649 | if (conn->security_cfm_cb) | ||
650 | conn->security_cfm_cb(conn, status); | ||
635 | } | 651 | } |
636 | 652 | ||
637 | int hci_register_proto(struct hci_proto *hproto); | 653 | int hci_register_proto(struct hci_proto *hproto); |
diff --git a/include/net/bluetooth/mgmt.h b/include/net/bluetooth/mgmt.h index 44ac55c85079..1d25c59be2e3 100644 --- a/include/net/bluetooth/mgmt.h +++ b/include/net/bluetooth/mgmt.h | |||
@@ -160,6 +160,18 @@ struct mgmt_cp_set_io_capability { | |||
160 | __u8 io_capability; | 160 | __u8 io_capability; |
161 | } __packed; | 161 | } __packed; |
162 | 162 | ||
163 | #define MGMT_OP_PAIR_DEVICE 0x0014 | ||
164 | struct mgmt_cp_pair_device { | ||
165 | __le16 index; | ||
166 | bdaddr_t bdaddr; | ||
167 | __u8 io_cap; | ||
168 | } __packed; | ||
169 | struct mgmt_rp_pair_device { | ||
170 | __le16 index; | ||
171 | bdaddr_t bdaddr; | ||
172 | __u8 status; | ||
173 | } __packed; | ||
174 | |||
163 | #define MGMT_EV_CMD_COMPLETE 0x0001 | 175 | #define MGMT_EV_CMD_COMPLETE 0x0001 |
164 | struct mgmt_ev_cmd_complete { | 176 | struct mgmt_ev_cmd_complete { |
165 | __le16 opcode; | 177 | __le16 opcode; |