Bluetooth: Get Advertising TX power
authorSudha Bheemanna <b.sudha@samsung.com>
Wed, 7 Sep 2016 09:52:08 +0000 (15:22 +0530)
committerJaehoon Chung <jh80.chung@samsung.com>
Mon, 24 Jul 2023 23:25:10 +0000 (08:25 +0900)
This patch adds MGMT command to read the advertising TX power.

Change-Id: Ide9e5d332f034928d2eae2cbd68a025a0d42be1b
Signed-off-by: Sudha Bheemanna <b.sudha@samsung.com>
Signed-off-by: Amit Purwar <amit.purwar@samsung.com>
Signed-off-by: Wootak Jung <wootak.jung@samsung.com>
include/net/bluetooth/mgmt_tizen.h
net/bluetooth/mgmt.c

index 4eaa867..982c00d 100644 (file)
@@ -161,6 +161,12 @@ struct mgmt_cp_set_voice_setting {
 } __packed;
 #define MGMT_SET_VOICE_SETTING_SIZE            9
 
+#define MGMT_OP_GET_ADV_TX_POWER               (TIZEN_OP_CODE_BASE + 0x11)
+#define MGMT_GET_ADV_TX_POWER_SIZE             0
+struct mgmt_rp_get_adv_tx_power {
+       __s8    adv_tx_power;
+} __packed;
+
 /* EVENTS */
 
 /* For device name update changes */
index 9c5d947..40d613e 100644 (file)
@@ -8879,6 +8879,37 @@ unlock:
        return err;
 }
 
+static int get_adv_tx_power(struct sock *sk, struct hci_dev *hdev,
+               void *data, u16 len)
+{
+       struct mgmt_rp_get_adv_tx_power *rp;
+       size_t rp_len;
+       int err;
+
+       BT_DBG("%s", hdev->name);
+
+       hci_dev_lock(hdev);
+
+       rp_len = sizeof(*rp);
+       rp = kmalloc(rp_len, GFP_KERNEL);
+       if (!rp) {
+               err = -ENOMEM;
+               goto unlock;
+       }
+
+       rp->adv_tx_power = hdev->adv_tx_power;
+
+       err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_ADV_TX_POWER, 0, rp,
+                               rp_len);
+
+       kfree(rp);
+
+unlock:
+       hci_dev_unlock(hdev);
+
+       return err;
+}
+
 void mgmt_hardware_error(struct hci_dev *hdev, u8 err_code)
 {
        struct mgmt_ev_hardware_error ev;
@@ -11242,6 +11273,7 @@ static const struct hci_mgmt_handler tizen_mgmt_handlers[] = {
        { set_manufacturer_data,   MGMT_SET_MANUFACTURER_DATA_SIZE },
        { le_set_scan_params,      MGMT_LE_SET_SCAN_PARAMS_SIZE },
        { set_voice_setting,       MGMT_SET_VOICE_SETTING_SIZE },
+       { get_adv_tx_power,        MGMT_GET_ADV_TX_POWER_SIZE },
 };
 #endif