Skip to content

Instantly share code, notes, and snippets.

@Vudentz
Created May 29, 2020 23:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Vudentz/4426a1032e21b73229b9439aba6f0105 to your computer and use it in GitHub Desktop.
Save Vudentz/4426a1032e21b73229b9439aba6f0105 to your computer and use it in GitHub Desktop.
diff --git a/lib/mgmt.h b/lib/mgmt.h
index ea89c46b1..2f78d75bf 100644
--- a/lib/mgmt.h
+++ b/lib/mgmt.h
@@ -631,19 +631,19 @@ struct mgmt_rp_set_exp_feature {
#define MGMT_OP_READ_DEFAULT_SYSTEM_PARAMETERS 0x004b
struct mgmt_system_parameter_tlv {
- uint16_t parameter_type;
- uint8_t length;
- uint8_t value[];
+ uint16_t type;
+ uint8_t length;
+ uint8_t value[];
} __packed;
struct mgmt_rp_read_default_system_parameters {
- uint8_t parameters[0]; // mgmt_system_parameter_tlv
+ uint8_t parameters[0]; /* mgmt_system_parameter_tlv */
} __packed;
#define MGMT_OP_SET_DEFAULT_SYSTEM_PARAMETERS 0x004c
struct mgmt_cp_set_default_system_parameters {
- uint8_t parameters[0]; // mgmt_system_parameter_tlv
+ uint8_t parameters[0]; /* mgmt_system_parameter_tlv */
} __packed;
#define MGMT_EV_CMD_COMPLETE 0x0001
diff --git a/src/adapter.c b/src/adapter.c
index 3af7999aa..bc5aa7711 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -4162,242 +4162,234 @@ static void probe_devices(void *user_data)
static void load_default_system_params(struct btd_adapter *adapter)
{
- /* note: for now all params are 2 bytes, if varying size params are
- * added, calculating the right size of buffer will be necessary first.
- */
- struct controller_params_tlv {
- uint16_t parameter_type;
- uint8_t length;
+ struct {
+ struct mgmt_system_parameter_tlv entry;
uint16_t value;
- } __packed;
-
- struct controller_params_tlv *params = NULL;
+ } __packed *params;
uint16_t i = 0;
size_t cp_size;
+ unsigned int err;
if (!main_opts.default_params.num_set_params ||
- !kernel_set_system_params)
+ !kernel_set_system_params)
return;
- cp_size = sizeof(struct controller_params_tlv) *
- main_opts.default_params.num_set_params;
- params = g_try_malloc0(cp_size);
- if (!params)
- return;
+ cp_size = sizeof(*params) * main_opts.default_params.num_set_params;
+ params = malloc0(cp_size);
if (main_opts.default_params.br_page_scan_type != 0xFFFF) {
- params[i].parameter_type = 0x0000;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x0000;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value = main_opts.default_params.br_page_scan_type;
++i;
}
if (main_opts.default_params.br_page_scan_interval) {
- params[i].parameter_type = 0x0001;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x0001;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value =
main_opts.default_params.br_page_scan_interval;
++i;
}
if (main_opts.default_params.br_page_scan_window) {
- params[i].parameter_type = 0x0002;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x0002;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value = main_opts.default_params.br_page_scan_window;
++i;
}
if (main_opts.default_params.br_inquiry_scan_type != 0xFFFF) {
- params[i].parameter_type = 0x0003;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x0003;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value = main_opts.default_params.br_inquiry_scan_type;
++i;
}
if (main_opts.default_params.br_inquiry_scan_interval) {
- params[i].parameter_type = 0x0004;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x0004;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value =
main_opts.default_params.br_inquiry_scan_interval;
++i;
}
if (main_opts.default_params.br_inquiry_scan_window) {
- params[i].parameter_type = 0x0005;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x0005;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value =
main_opts.default_params.br_inquiry_scan_window;
++i;
}
if (main_opts.default_params.br_link_supervision_timeout) {
- params[i].parameter_type = 0x0006;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x0006;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value =
main_opts.default_params.br_link_supervision_timeout;
++i;
}
if (main_opts.default_params.br_page_timeout) {
- params[i].parameter_type = 0x0007;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x0007;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value = main_opts.default_params.br_page_timeout;
++i;
}
if (main_opts.default_params.br_min_sniff_interval) {
- params[i].parameter_type = 0x0008;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x0008;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value =
main_opts.default_params.br_min_sniff_interval;
++i;
}
if (main_opts.default_params.br_max_sniff_interval) {
- params[i].parameter_type = 0x0009;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x0009;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value =
main_opts.default_params.br_max_sniff_interval;
++i;
}
if (main_opts.default_params.le_min_adv_interval) {
- params[i].parameter_type = 0x000a;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x000a;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value = main_opts.default_params.le_min_adv_interval;
++i;
}
if (main_opts.default_params.le_max_adv_interval) {
- params[i].parameter_type = 0x000b;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x000b;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value = main_opts.default_params.le_max_adv_interval;
++i;
}
if (main_opts.default_params.le_multi_adv_rotation_interval) {
- params[i].parameter_type = 0x000c;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x000c;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value =
main_opts.default_params.le_multi_adv_rotation_interval;
++i;
}
if (main_opts.default_params.le_scan_interval_autoconnect) {
- params[i].parameter_type = 0x000d;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x000d;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value =
main_opts.default_params.le_scan_interval_autoconnect;
++i;
}
if (main_opts.default_params.le_scan_window_autoconnect) {
- params[i].parameter_type = 0x000e;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x000e;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value =
main_opts.default_params.le_scan_window_autoconnect;
++i;
}
if (main_opts.default_params.le_scan_interval_suspend) {
- params[i].parameter_type = 0x000f;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x000f;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value =
main_opts.default_params.le_scan_interval_suspend;
++i;
}
if (main_opts.default_params.le_scan_window_suspend) {
- params[i].parameter_type = 0x0010;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x0010;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value =
main_opts.default_params.le_scan_window_suspend;
++i;
}
if (main_opts.default_params.le_scan_interval_discovery) {
- params[i].parameter_type = 0x0011;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x0011;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value =
main_opts.default_params.le_scan_interval_discovery;
++i;
}
if (main_opts.default_params.le_scan_window_discovery) {
- params[i].parameter_type = 0x0012;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x0012;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value =
main_opts.default_params.le_scan_window_discovery;
++i;
}
if (main_opts.default_params.le_scan_interval_adv_monitor) {
- params[i].parameter_type = 0x0013;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x0013;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value =
main_opts.default_params.le_scan_interval_adv_monitor;
++i;
}
if (main_opts.default_params.le_scan_window_adv_monitor) {
- params[i].parameter_type = 0x0014;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x0014;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value =
main_opts.default_params.le_scan_window_adv_monitor;
++i;
}
if (main_opts.default_params.le_scan_interval_connect) {
- params[i].parameter_type = 0x0015;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x0015;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value =
main_opts.default_params.le_scan_interval_connect;
++i;
}
if (main_opts.default_params.le_scan_window_connect) {
- params[i].parameter_type = 0x0016;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x0016;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value =
main_opts.default_params.le_scan_window_connect;
++i;
}
if (main_opts.default_params.le_min_connection_interval) {
- params[i].parameter_type = 0x0017;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x0017;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value =
main_opts.default_params.le_min_connection_interval;
++i;
}
if (main_opts.default_params.le_max_connection_interval) {
- params[i].parameter_type = 0x0018;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x0018;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value =
main_opts.default_params.le_max_connection_interval;
++i;
}
if (main_opts.default_params.le_connection_latency) {
- params[i].parameter_type = 0x0019;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x0019;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value =
main_opts.default_params.le_connection_latency;
++i;
}
if (main_opts.default_params.le_connection_lsto) {
- params[i].parameter_type = 0x001a;
- params[i].length = sizeof(params[i].value);
+ params[i].entry.type = 0x001a;
+ params[i].entry.length = sizeof(params[i].value);
params[i].value = main_opts.default_params.le_connection_lsto;
++i;
}
- mgmt_send(adapter->mgmt, MGMT_OP_SET_DEFAULT_SYSTEM_PARAMETERS,
+ err = mgmt_send(adapter->mgmt, MGMT_OP_SET_DEFAULT_SYSTEM_PARAMETERS,
adapter->dev_id, cp_size, params, NULL, NULL, NULL);
-
- btd_error(adapter->dev_id,
+ if (!err)
+ btd_error(adapter->dev_id,
"Failed to set default system params for hci%u",
adapter->dev_id);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment