This adds bthost_set_pa_data. --- emulator/bthost.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++- emulator/bthost.h | 4 +++- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/emulator/bthost.c b/emulator/bthost.c index 8c40fce90..d710f4982 100644 --- a/emulator/bthost.c +++ b/emulator/bthost.c @@ -5,7 +5,7 @@ * * Copyright (C) 2011-2012 Intel Corporation * Copyright (C) 2004-2010 Marcel Holtmann <marcel@xxxxxxxxxxxx> - * 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; diff --git a/emulator/bthost.h b/emulator/bthost.h index 46781365b..f03262d46 100644 --- a/emulator/bthost.h +++ b/emulator/bthost.h @@ -5,7 +5,7 @@ * * Copyright (C) 2011-2012 Intel Corporation * Copyright (C) 2004-2010 Marcel Holtmann <marcel@xxxxxxxxxxxx> - * 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); -- 2.39.2