Bluetooth: Report RPA changed event 73/185973/2 accepted/tizen/unified/20180808.141328 submit/tizen/20180808.061203
authorinjun.yang <injun.yang@samsung.com>
Mon, 21 May 2018 08:32:16 +0000 (17:32 +0900)
committerDoHyun Pyun <dh79.pyun@samsung.com>
Wed, 8 Aug 2018 00:51:31 +0000 (09:51 +0900)
When RPA changed, The updated RPA is not applied on
VSC advertising. This patchset generates new event
and resolves the problem.

Change-Id: Icc3dd74da0449cb8e456c27bc34995f43326efe1
Signed-off-by: injun.yang <injun.yang@samsung.com>
Signed-off-by: DoHyun Pyun <dh79.pyun@samsung.com>
include/net/bluetooth/hci_core.h
include/net/bluetooth/mgmt_tizen.h
net/bluetooth/hci_request.c
net/bluetooth/mgmt.c

index f0cd3cb..37f8efd 100644 (file)
@@ -1602,6 +1602,7 @@ void mgmt_le_data_length_change_complete(struct hci_dev *hdev,
                u16 rx_octets, u16 rx_time);
 int hci_le_set_data_length(struct hci_conn *conn, u16 tx_octets, u16 tx_time);
 int hci_conn_streaming_mode(struct hci_conn *conn, bool streaming_mode);
+void mgmt_rpa_updated_evt(struct hci_dev *hdev, bdaddr_t *rpa);
 #endif
 
 u8 hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max, u16 latency,
index 30e4c9d..b3b5df9 100644 (file)
@@ -331,4 +331,9 @@ struct mgmt_ev_le_data_length_changed {
        __le16  max_rx_time;
 } __packed;
 
+#define MGMT_EV_RPA_CHANGED                    (TIZEN_EV_BASE + 0x0e)
+struct mgmt_ev_rpa_changed {
+       bdaddr_t bdaddr;
+} __packed;
+
 #endif   /* CONFIG_TIZEN_WIP */
index b59f92c..bff74e6 100644 (file)
@@ -344,6 +344,10 @@ int hci_update_random_address(struct hci_request *req, bool require_privacy,
                to = msecs_to_jiffies(hdev->rpa_timeout * 1000);
                queue_delayed_work(hdev->workqueue, &hdev->rpa_expired, to);
 
+#ifdef CONFIG_TIZEN_WIP
+               mgmt_rpa_updated_evt(hdev, &hdev->rpa);
+#endif
+
                return 0;
        }
 
index be7329b..bdcbc78 100644 (file)
@@ -5267,6 +5267,18 @@ unlocked:
        return err;
 }
 
+void mgmt_rpa_updated_evt(struct hci_dev *hdev, bdaddr_t *rpa)
+{
+       struct mgmt_ev_rpa_changed mgmt_ev;
+
+       BT_DBG("RPA updated");
+
+       bacpy(&mgmt_ev.bdaddr, rpa);
+
+       mgmt_event(MGMT_EV_RPA_CHANGED, hdev, &mgmt_ev,
+                       sizeof(struct mgmt_ev_rpa_changed), NULL);
+}
+
 static int set_irk(struct sock *sk, struct hci_dev *hdev, void *cp_data,
                   u16 len)
 {