Bluetooth: Add multiple LE advertise state change event 75/306575/1
authorSudha Bheemanna <b.sudha@samsung.com>
Thu, 8 Sep 2016 05:01:17 +0000 (10:31 +0530)
committerJaehoon Chung <jh80.chung@samsung.com>
Fri, 23 Feb 2024 02:13:35 +0000 (11:13 +0900)
This patch adds code for providing multiple LE advertisement state
changed event to upper layer.

Signed-off-by: Sudha Bheemanna <b.sudha@samsung.com>
[divide hci_vendor_mutli_adv_state_change_evt and remove hci event structure from mgmt]
Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com>
Signed-off-by: Amit Purwar <amit.purwar@samsung.com>
Signed-off-by: Wootak Jung <wootak.jung@samsung.com>
Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Change-Id: I203e677538646b8107d43a5ac7653ce717ca44ef

net/bluetooth/hci_event.c
net/bluetooth/mgmt.c

index 9f69420..4eebc73 100644 (file)
@@ -2300,6 +2300,18 @@ static void hci_vendor_specific_group_ext_evt(struct hci_dev *hdev,
        }
 }
 
+static void hci_vendor_multi_adv_state_change_evt(struct hci_dev *hdev,
+                                                 struct sk_buff *skb)
+{
+       struct hci_ev_vendor_specific_multi_adv_state *ev = (void *)skb->data;
+
+       BT_DBG("LE_MULTI_ADV_STATE_CHANGE_SUB_EVENT");
+
+       mgmt_multi_adv_state_change_evt(hdev, ev->adv_instance,
+                                       ev->state_change_reason,
+                                       ev->connection_handle);
+}
+
 static void hci_vendor_specific_evt(struct hci_dev *hdev, void *data,
                                    struct sk_buff *skb)
 {
@@ -2316,6 +2328,10 @@ static void hci_vendor_specific_evt(struct hci_dev *hdev, void *data,
                hci_vendor_specific_group_ext_evt(hdev, skb);
                break;
 
+       case LE_MULTI_ADV_STATE_CHANGE_SUB_EVENT:
+               hci_vendor_multi_adv_state_change_evt(hdev, skb);
+               break;
+
        default:
                break;
        }
index ccbe063..9333af0 100644 (file)
@@ -8842,6 +8842,23 @@ void mgmt_tx_timeout_error(struct hci_dev *hdev)
 {
        mgmt_event(MGMT_EV_TX_TIMEOUT_ERROR, hdev, NULL, 0, NULL);
 }
+
+void mgmt_multi_adv_state_change_evt(struct hci_dev *hdev, u8 adv_instance,
+               u8 state_change_reason, u16 connection_handle)
+{
+       struct mgmt_ev_vendor_specific_multi_adv_state_changed mgmt_ev;
+
+       BT_DBG("Multi adv state changed [%2.2X %2.2X %2.2X]",
+              adv_instance, state_change_reason, connection_handle);
+
+       mgmt_ev.adv_instance = adv_instance;
+       mgmt_ev.state_change_reason = state_change_reason;
+       mgmt_ev.connection_handle = connection_handle;
+
+       mgmt_event(MGMT_EV_MULTI_ADV_STATE_CHANGED, hdev, &mgmt_ev,
+               sizeof(struct mgmt_ev_vendor_specific_multi_adv_state_changed),
+               NULL);
+}
 #endif /* TIZEN_BT */
 
 static bool ltk_is_valid(struct mgmt_ltk_info *key)