@@ -5,7 +5,7 @@
*
* Copyright (C) 2011-2012 Intel Corporation
* Copyright (C) 2004-2010 Marcel Holtmann <marcel@holtmann.org>
- * Copyright 2023 NXP
+ * Copyright 2023-2024 NXP
*
*
*/
@@ -3127,6 +3127,52 @@ void bthost_set_pa_params(struct bthost *bthost)
send_command(bthost, BT_HCI_CMD_LE_SET_PA_PARAMS, &cp, sizeof(cp));
}
+static void set_pa_data(struct bthost *bthost, const uint8_t *data,
+ uint8_t len, uint8_t offset)
+{
+ struct bt_hci_cmd_le_set_pa_data *cp;
+ uint8_t buf[sizeof(*cp) + HCI_MAX_PER_AD_LENGTH];
+
+ cp = (void *)buf;
+
+ memset(cp, 0, sizeof(*cp));
+ memset(cp->data, 0, HCI_MAX_PER_AD_LENGTH);
+
+ cp->handle = 1;
+
+ if (len - offset > HCI_MAX_PER_AD_LENGTH) {
+ cp->data_len = HCI_MAX_PER_AD_LENGTH;
+
+ if (!offset)
+ cp->operation = 0x01;
+ else
+ cp->operation = 0x00;
+ } else {
+ cp->data_len = len - offset;
+
+ if (!offset)
+ cp->operation = 0x03;
+ else
+ cp->operation = 0x02;
+ }
+
+ memcpy(cp->data, data + offset, cp->data_len);
+
+ send_command(bthost, BT_HCI_CMD_LE_SET_PA_DATA, buf,
+ sizeof(*cp) + cp->data_len);
+
+ if (cp->operation == 0x01 || cp->operation == 0x00) {
+ offset += cp->data_len;
+ set_pa_data(bthost, data, len, offset);
+ }
+}
+
+void bthost_set_pa_data(struct bthost *bthost, const uint8_t *data,
+ uint8_t len)
+{
+ set_pa_data(bthost, data, len, 0);
+}
+
void bthost_set_pa_enable(struct bthost *bthost, uint8_t enable)
{
struct bt_hci_cmd_le_set_pa_enable cp;
@@ -5,7 +5,7 @@
*
* Copyright (C) 2011-2012 Intel Corporation
* Copyright (C) 2004-2010 Marcel Holtmann <marcel@holtmann.org>
- * Copyright 2023 NXP
+ * Copyright 2023-2024 NXP
*
*
*/
@@ -102,6 +102,8 @@ void bthost_set_ext_adv_data(struct bthost *bthost, const uint8_t *data,
void bthost_set_ext_adv_params(struct bthost *bthost);
void bthost_set_ext_adv_enable(struct bthost *bthost, uint8_t enable);
void bthost_set_pa_params(struct bthost *bthost);
+void bthost_set_pa_data(struct bthost *bthost, const uint8_t *data,
+ uint8_t len);
void bthost_set_pa_enable(struct bthost *bthost, uint8_t enable);
void bthost_create_big(struct bthost *bthost, uint8_t num_bis, uint8_t enc,
const uint8_t *bcode);