diff options
| author | Mikel Astiz <mikel.astiz@bmw-carit.de> | 2012-08-09 03:52:30 -0400 |
|---|---|---|
| committer | Gustavo Padovan <gustavo.padovan@collabora.co.uk> | 2012-08-21 13:54:40 -0400 |
| commit | f0d6a0ea330617454032d6e2ed48759858a44427 (patch) | |
| tree | d11edf124abaef7d14f39fb9d0678376800fac72 /include/net | |
| parent | fa1bd91809d58b3c183611556219fafd93c08625 (diff) | |
Bluetooth: mgmt: Add device disconnect reason
MGMT_EV_DEVICE_DISCONNECTED will now expose the disconnection reason to
userland, distinguishing four possible values:
0x00 Reason not known or unspecified
0x01 Connection timeout
0x02 Connection terminated by local host
0x03 Connection terminated by remote host
Note that the local/remote distinction just determines which side
terminated the low-level connection, regardless of the disconnection of
the higher-level profiles.
This can sometimes be misleading and thus must be used with care. For
example, some hardware combinations would report a locally initiated
disconnection even if the user turned Bluetooth off in the remote side.
Signed-off-by: Mikel Astiz <mikel.astiz@bmw-carit.de>
Acked-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
Diffstat (limited to 'include/net')
| -rw-r--r-- | include/net/bluetooth/hci_core.h | 2 | ||||
| -rw-r--r-- | include/net/bluetooth/mgmt.h | 9 |
2 files changed, 10 insertions, 1 deletions
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index 7267dafd7159..1bbc1091748c 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h | |||
| @@ -1002,7 +1002,7 @@ int mgmt_device_connected(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type, | |||
| 1002 | u8 addr_type, u32 flags, u8 *name, u8 name_len, | 1002 | u8 addr_type, u32 flags, u8 *name, u8 name_len, |
| 1003 | u8 *dev_class); | 1003 | u8 *dev_class); |
| 1004 | int mgmt_device_disconnected(struct hci_dev *hdev, bdaddr_t *bdaddr, | 1004 | int mgmt_device_disconnected(struct hci_dev *hdev, bdaddr_t *bdaddr, |
| 1005 | u8 link_type, u8 addr_type); | 1005 | u8 link_type, u8 addr_type, u8 reason); |
| 1006 | int mgmt_disconnect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, | 1006 | int mgmt_disconnect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, |
| 1007 | u8 link_type, u8 addr_type, u8 status); | 1007 | u8 link_type, u8 addr_type, u8 status); |
| 1008 | int mgmt_connect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type, | 1008 | int mgmt_connect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type, |
diff --git a/include/net/bluetooth/mgmt.h b/include/net/bluetooth/mgmt.h index 4348ee8bda69..1b48effcd973 100644 --- a/include/net/bluetooth/mgmt.h +++ b/include/net/bluetooth/mgmt.h | |||
| @@ -405,7 +405,16 @@ struct mgmt_ev_device_connected { | |||
| 405 | __u8 eir[0]; | 405 | __u8 eir[0]; |
| 406 | } __packed; | 406 | } __packed; |
| 407 | 407 | ||
| 408 | #define MGMT_DEV_DISCONN_UNKNOWN 0x00 | ||
| 409 | #define MGMT_DEV_DISCONN_TIMEOUT 0x01 | ||
| 410 | #define MGMT_DEV_DISCONN_LOCAL_HOST 0x02 | ||
| 411 | #define MGMT_DEV_DISCONN_REMOTE 0x03 | ||
| 412 | |||
| 408 | #define MGMT_EV_DEVICE_DISCONNECTED 0x000C | 413 | #define MGMT_EV_DEVICE_DISCONNECTED 0x000C |
| 414 | struct mgmt_ev_device_disconnected { | ||
| 415 | struct mgmt_addr_info addr; | ||
| 416 | __u8 reason; | ||
| 417 | } __packed; | ||
| 409 | 418 | ||
| 410 | #define MGMT_EV_CONNECT_FAILED 0x000D | 419 | #define MGMT_EV_CONNECT_FAILED 0x000D |
| 411 | struct mgmt_ev_connect_failed { | 420 | struct mgmt_ev_connect_failed { |
