Bluetooth: Add multiple LE advertise state change event 27/261627/1
authorSudha Bheemanna <b.sudha@samsung.com>
Thu, 8 Sep 2016 05:01:17 +0000 (10:31 +0530)
committerWootak Jung <wootak.jung@samsung.com>
Wed, 21 Jul 2021 05:07:32 +0000 (14:07 +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 53c5285..17a734c 100644 (file)
@@ -1454,6 +1454,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;
@@ -1469,6 +1481,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 1cc3663..8b498f2 100644 (file)
@@ -6397,6 +6397,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)