Message ID | 20200918121348.BlueZ.v2.2.Iac5207375d22fb7b96ae4ef73b49ae4ab457219c@changeid (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [BlueZ,v2,1/2] core: Add params to set interleaving durations | expand |
Hi Howard, On Thu, Sep 17, 2020 at 9:14 PM Howard Chung <howardchung@google.com> wrote: > > This patch adds parameter to enable/disable the interleave scan feature. > --- > > (no changes since v1) > > src/adapter.c | 9 +++++++++ > src/hcid.h | 1 + > src/main.c | 6 ++++++ > src/main.conf | 6 ++++++ > 4 files changed, 22 insertions(+) > > diff --git a/src/adapter.c b/src/adapter.c > index c0e95b48a1c4..a2c782e308bb 100644 > --- a/src/adapter.c > +++ b/src/adapter.c > @@ -4449,6 +4449,15 @@ static void load_default_system_params(struct btd_adapter *adapter) > len += sizeof(params[i].u16); > } > > + if (main_opts.default_params.enable_advmon_interleave_scan != 0xFFFF) { > + params[i].entry.type = 0x001f; > + params[i].entry.length = sizeof(params[i].u16); > + params[i].u16 = > + main_opts.default_params.enable_advmon_interleave_scan; > + ++i; > + len += sizeof(params[i].u16); > + } > + > err = mgmt_send(adapter->mgmt, MGMT_OP_SET_DEF_SYSTEM_CONFIG, > adapter->dev_id, len, params, NULL, NULL, NULL); > if (!err) > diff --git a/src/hcid.h b/src/hcid.h > index c3e5fe803543..c6717be62c48 100644 > --- a/src/hcid.h > +++ b/src/hcid.h > @@ -96,6 +96,7 @@ struct main_opts { > > uint16_t advmon_allowlist_scan_duration; > uint16_t advmon_no_filter_scan_duration; > + uint16_t enable_advmon_interleave_scan; > } default_params; > > > diff --git a/src/main.c b/src/main.c > index e222ed3bf855..3433130bc419 100644 > --- a/src/main.c > +++ b/src/main.c > @@ -125,6 +125,7 @@ static const char *controller_options[] = { > "LEAutoconnecttimeout", > "AdvMonAllowlistScanDuration", > "AdvMonNoFilterScanDuration", > + "EnableAdvMonInterleaveScan", > NULL > }; > > @@ -444,6 +445,10 @@ static void parse_controller_config(GKeyFile *config) > &main_opts.default_params.advmon_no_filter_scan_duration, > 1, > 10000}, > + { "EnableAdvMonInterleaveScan", > + &main_opts.default_params.enable_advmon_interleave_scan, > + 0, > + 1}, > }; > uint16_t i; > > @@ -711,6 +716,7 @@ static void init_defaults(void) > main_opts.default_params.num_entries = 0; > main_opts.default_params.br_page_scan_type = 0xFFFF; > main_opts.default_params.br_scan_type = 0xFFFF; > + main_opts.default_params.enable_advmon_interleave_scan = 0xFFFF; > > if (sscanf(VERSION, "%hhu.%hhu", &major, &minor) != 2) > return; > diff --git a/src/main.conf b/src/main.conf > index 3b341f44c9cf..c300a3b81086 100644 > --- a/src/main.conf > +++ b/src/main.conf > @@ -159,6 +159,12 @@ > # Default: 500 > #AdvMonNoFilterScanDuration= > > +# Enable/Disable Advertisement Monitor interleave scan for power saving. > +# 0: disable > +# 1: enable > +# Defaults to 1 > +#EnableAdvMonInterleaveScan= This should probably ve defaulting to false until we consider the interface stable and document how this feature works. > [GATT] > # GATT attribute cache. > # Possible values: > -- > 2.28.0.681.g6f77f65b4e-goog >
diff --git a/src/adapter.c b/src/adapter.c index c0e95b48a1c4..a2c782e308bb 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -4449,6 +4449,15 @@ static void load_default_system_params(struct btd_adapter *adapter) len += sizeof(params[i].u16); } + if (main_opts.default_params.enable_advmon_interleave_scan != 0xFFFF) { + params[i].entry.type = 0x001f; + params[i].entry.length = sizeof(params[i].u16); + params[i].u16 = + main_opts.default_params.enable_advmon_interleave_scan; + ++i; + len += sizeof(params[i].u16); + } + err = mgmt_send(adapter->mgmt, MGMT_OP_SET_DEF_SYSTEM_CONFIG, adapter->dev_id, len, params, NULL, NULL, NULL); if (!err) diff --git a/src/hcid.h b/src/hcid.h index c3e5fe803543..c6717be62c48 100644 --- a/src/hcid.h +++ b/src/hcid.h @@ -96,6 +96,7 @@ struct main_opts { uint16_t advmon_allowlist_scan_duration; uint16_t advmon_no_filter_scan_duration; + uint16_t enable_advmon_interleave_scan; } default_params; diff --git a/src/main.c b/src/main.c index e222ed3bf855..3433130bc419 100644 --- a/src/main.c +++ b/src/main.c @@ -125,6 +125,7 @@ static const char *controller_options[] = { "LEAutoconnecttimeout", "AdvMonAllowlistScanDuration", "AdvMonNoFilterScanDuration", + "EnableAdvMonInterleaveScan", NULL }; @@ -444,6 +445,10 @@ static void parse_controller_config(GKeyFile *config) &main_opts.default_params.advmon_no_filter_scan_duration, 1, 10000}, + { "EnableAdvMonInterleaveScan", + &main_opts.default_params.enable_advmon_interleave_scan, + 0, + 1}, }; uint16_t i; @@ -711,6 +716,7 @@ static void init_defaults(void) main_opts.default_params.num_entries = 0; main_opts.default_params.br_page_scan_type = 0xFFFF; main_opts.default_params.br_scan_type = 0xFFFF; + main_opts.default_params.enable_advmon_interleave_scan = 0xFFFF; if (sscanf(VERSION, "%hhu.%hhu", &major, &minor) != 2) return; diff --git a/src/main.conf b/src/main.conf index 3b341f44c9cf..c300a3b81086 100644 --- a/src/main.conf +++ b/src/main.conf @@ -159,6 +159,12 @@ # Default: 500 #AdvMonNoFilterScanDuration= +# Enable/Disable Advertisement Monitor interleave scan for power saving. +# 0: disable +# 1: enable +# Defaults to 1 +#EnableAdvMonInterleaveScan= + [GATT] # GATT attribute cache. # Possible values: