summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/mgmt.h4
-rw-r--r--src/adapter.c4
-rw-r--r--src/adapter.h1
-rw-r--r--src/advertising.c3
4 files changed, 12 insertions, 0 deletions
diff --git a/lib/mgmt.h b/lib/mgmt.h
index 6aa0f5f88..59608e7ea 100644
--- a/lib/mgmt.h
+++ b/lib/mgmt.h
@@ -700,6 +700,10 @@ struct mgmt_rp_remove_adv_monitor {
uint16_t monitor_handle;
} __packed;
+#define MGMT_OP_ADD_EXT_ADV_PARAMS 0x0054
+
+#define MGMT_OP_ADD_EXT_ADV_DATA 0x0055
+
#define MGMT_EV_CMD_COMPLETE 0x0001
struct mgmt_ev_cmd_complete {
uint16_t opcode;
diff --git a/src/adapter.c b/src/adapter.c
index 1f075ef5f..90beb897f 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -9566,6 +9566,10 @@ static void read_commands_complete(uint8_t status, uint16_t length,
DBG("kernel supports exp features");
kernel_features |= KERNEL_EXP_FEATURES;
break;
+ case MGMT_OP_ADD_EXT_ADV_PARAMS:
+ DBG("kernel supports ext adv commands");
+ kernel_features |= KERNEL_HAS_EXT_ADV_ADD_CMDS;
+ break;
default:
break;
}
diff --git a/src/adapter.h b/src/adapter.h
index dcc574857..ace72affd 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -233,6 +233,7 @@ enum kernel_features {
KERNEL_SET_SYSTEM_CONFIG = 1 << 2,
KERNEL_EXP_FEATURES = 1 << 3,
KERNEL_HAS_RESUME_EVT = 1 << 4,
+ KERNEL_HAS_EXT_ADV_ADD_CMDS = 1 << 5,
};
bool btd_has_kernel_features(uint32_t feature);
diff --git a/src/advertising.c b/src/advertising.c
index c03869e50..7c7599552 100644
--- a/src/advertising.c
+++ b/src/advertising.c
@@ -48,6 +48,7 @@ struct btd_adv_manager {
uint8_t max_ads;
uint32_t supported_flags;
unsigned int instance_bitmap;
+ bool extended_add_cmds;
};
#define AD_TYPE_BROADCAST 0
@@ -1417,6 +1418,8 @@ static struct btd_adv_manager *manager_create(struct btd_adapter *adapter,
manager->mgmt_index = btd_adapter_get_index(adapter);
manager->clients = queue_new();
manager->supported_flags = MGMT_ADV_FLAG_LOCAL_NAME;
+ manager->extended_add_cmds =
+ btd_has_kernel_features(KERNEL_HAS_EXT_ADV_ADD_CMDS);
if (!g_dbus_register_interface(btd_get_dbus_connection(),
adapter_get_path(manager->adapter),