diff --git a/emulator/btdev.c b/emulator/btdev.c
index 086885d..ec52c52 100644
--- a/emulator/btdev.c
+++ b/emulator/btdev.c
ext_adv->type = le16_to_cpu(cmd->evt_properties);
- /* In case of direct advertising (type == 0x01) the advertising
- * intervals shall be ignored and high duty cycle shall be used.
+ /* In case of high duty cycle directed connectable advertising
+ * intervals shall be ignored and high duty cycle shall be used
+ * (advertising interval <= 3.75 ms).
*/
- if (ext_adv->type == 0x01)
- ext_adv->interval = 10;
+ if ((ext_adv->type & 0x0D) == 0x0D /* 0b1101 */)
+ ext_adv->interval = 3;
else {
unsigned int min_interval = get_le24(cmd->min_interval);
- if (min_interval < 0x0020 || min_interval > 0x4000) {
+ if (min_interval < 0x0020 || min_interval > 0xFFFFFF) {
rsp.status = BT_HCI_ERR_UNSUPPORTED_FEATURE;
cmd_complete(dev, BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
&rsp, sizeof(rsp));
diff --git a/emulator/bthost.c b/emulator/bthost.c
index 9516050..a76b02e 100644
--- a/emulator/bthost.c
+++ b/emulator/bthost.c
void bthost_set_ext_adv_params(struct bthost *bthost)
{
+ const uint8_t interval_20ms[] = { 0x20, 0x00, 0x00 };
struct bt_hci_cmd_le_set_ext_adv_params cp;
memset(&cp, 0, sizeof(cp));
cp.handle = 0x01;
cp.evt_properties = cpu_to_le16(0x0013);
+ memcpy(cp.min_interval, interval_20ms, sizeof(cp.min_interval));
+ memcpy(cp.max_interval, interval_20ms, sizeof(cp.max_interval));
send_command(bthost, BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
&cp, sizeof(cp));
}