Created
May 29, 2020 23:57
-
-
Save Vudentz/4426a1032e21b73229b9439aba6f0105 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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