@@ -1641,6 +1641,13 @@ struct hci_cp_le_ext_conn_param {
__le16 max_ce_len;
} __packed;
+#define HCI_OP_LE_READ_TX_POWER 0x204b
+struct hci_rp_le_read_tx_power {
+ __u8 status;
+ __s8 min_tx_power;
+ __s8 max_tx_power;
+} __packed;
+
#define HCI_OP_LE_READ_NUM_SUPPORTED_ADV_SETS 0x203b
struct hci_rp_le_read_num_supported_adv_sets {
__u8 status;
@@ -418,6 +418,9 @@ struct hci_dev {
__u8 scan_rsp_data[HCI_MAX_AD_LENGTH];
__u8 scan_rsp_data_len;
+ __s8 min_tx_power;
+ __s8 max_tx_power;
+
struct list_head adv_instances;
unsigned int adv_instance_cnt;
__u8 cur_adv_instance;
@@ -988,6 +988,20 @@ static void hci_cc_le_read_adv_tx_power(struct hci_dev *hdev,
hdev->adv_tx_power = rp->tx_power;
}
+static void hci_cc_le_read_tx_power(struct hci_dev *hdev,
+ struct sk_buff *skb)
+{
+ struct hci_rp_le_read_tx_power *rp = (void *) skb->data;
+
+ BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
+
+ if (rp->status)
+ return;
+
+ hdev->min_tx_power = rp->min_tx_power;
+ hdev->max_tx_power = rp->max_tx_power;
+}
+
static void hci_cc_user_confirm_reply(struct hci_dev *hdev, struct sk_buff *skb)
{
struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
@@ -3414,6 +3428,10 @@ static void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb,
hci_cc_le_read_max_data_len(hdev, skb);
break;
+ case HCI_OP_LE_READ_TX_POWER:
+ hci_cc_le_read_tx_power(hdev, skb);
+ break;
+
case HCI_OP_WRITE_LE_HOST_SUPPORTED:
hci_cc_write_le_host_supported(hdev, skb);
break;
Add the definitions for LE read transmit power HCI commands to read the minimum and maximum Tx power. Signed-off-by: Ankit Navik <ankit.p.navik@intel.com> --- include/net/bluetooth/hci.h | 7 +++++++ include/net/bluetooth/hci_core.h | 3 +++ net/bluetooth/hci_event.c | 18 ++++++++++++++++++ 3 files changed, 28 insertions(+)