Bluetooth: Add multiple LE advertise state change event
authorSudha Bheemanna <b.sudha@samsung.com>
Thu, 8 Sep 2016 05:01:17 +0000 (10:31 +0530)
committerHoegeun Kwon <hoegeun.kwon@samsung.com>
Mon, 6 Jul 2020 09:08:20 +0000 (18:08 +0900)
This patch adds code for providing multiple LE advertisement state
changed event to upper layer.

Change-Id: I58fb8044e74402376ec30b121081edce7c8709d1
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>
net/bluetooth/hci_event.c
net/bluetooth/mgmt.c

index 003b596..c43fe3e 100644 (file)
@@ -1750,6 +1750,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, struct sk_buff *skb)
 {
        struct hci_ev_vendor_specific *ev = (void *)skb->data;
@@ -1765,6 +1777,10 @@ static void hci_vendor_specific_evt(struct hci_dev *hdev, struct sk_buff *skb)
                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 37d7c0e..2b0fd66 100644 (file)
@@ -6751,6 +6751,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)