On Tue, Jul 28, 2020 at 2:58 AM Marcel Holtmann <marcel@xxxxxxxxxxxx> wrote: > > Hi Alain, > > > This change adds support for a configurable eir_max_name_len for > > platforms which requires a larger than 48 bytes complete name in EIR. > > > > From bluetoothctl: > > [bluetooth]# system-alias > > 012345678901234567890123456789012345678901234567890123456789 > > Changing 012345678901234567890123456789012345678901234567890123456789 > > succeeded > > [CHG] Controller DC:71:96:69:02:89 Alias: > > 012345678901234567890123456789012345678901234567890123456789 > > > > From btmon: > > < HCI Command: Write Local Name (0x03|0x0013) plen 248 #109 > > [hci0] 88.567990 > > Name: > > 012345678901234567890123456789012345678901234567890123456789 > >> HCI Event: Command Complete (0x0e) plen 4 > > #110 [hci0] 88.663854 > > Write Local Name (0x03|0x0013) ncmd 1 > > Status: Success (0x00) > > @ MGMT Event: Local Name Changed (0x0008) plen 260 > > {0x0004} [hci0] 88.663948 > > Name: > > 012345678901234567890123456789012345678901234567890123456789 > > Short name: > > < HCI Command: Write Extended Inquiry Response (0x03|0x0052) plen 241 > > FEC: Not required (0x00) > > Name (complete): > > 012345678901234567890123456789012345678901234567890123456789 > > TX power: 12 dBm > > Device ID: Bluetooth SIG assigned (0x0001) > > Vendor: Google (224) > > Product: 0xc405 > > Version: 0.5.6 (0x0056) > > 16-bit Service UUIDs (complete): 7 entries > > Generic Access Profile (0x1800) > > Generic Attribute Profile (0x1801) > > Device Information (0x180a) > > A/V Remote Control (0x110e) > > A/V Remote Control Target (0x110c) > > Handsfree Audio Gateway (0x111f) > > Audio Source (0x110a) > >> HCI Event: Command Complete (0x0e) plen 4 > > Write Extended Inquiry Response (0x03|0x0052) ncmd 1 > > Status: Success (0x00) > > > > Reviewed-by: Sonny Sasaka <sonnysasaka@xxxxxxxxxxxx> > > Signed-off-by: Alain Michaud <alainm@xxxxxxxxxxxx> > > --- > > > > doc/mgmt-api.txt | 1 + > > src/adapter.c | 10 +++++++++- > > src/hcid.h | 1 + > > src/main.c | 5 +++++ > > src/main.conf | 5 +++++ > > 5 files changed, 21 insertions(+), 1 deletion(-) > > > > diff --git a/doc/mgmt-api.txt b/doc/mgmt-api.txt > > index ca0d38469..1bc0f0c12 100644 > > --- a/doc/mgmt-api.txt > > +++ b/doc/mgmt-api.txt > > @@ -3279,6 +3279,7 @@ Read Default System Configuration Command > > 0x0019 LE Connection Latency > > 0x001a LE Connection Supervision Timeout > > 0x001b LE Autoconnect Timeout > > + 0x001c Max EIR Name Length > > we can certainly do this, but I prefer that do this for LE and BR/EDR and name it that way as well. I do think that we need distinct values for br/edr and le since the available space is different. I don't think a single value makes sense for both transports. > > > > > This command can be used at any time and will return a list of > > supported default parameters as well as their current value. > > diff --git a/src/adapter.c b/src/adapter.c > > index 5e896a9f0..3adc67b63 100644 > > --- a/src/adapter.c > > +++ b/src/adapter.c > > @@ -2375,7 +2375,7 @@ static bool parse_pathloss(DBusMessageIter *value, > > return true; > > } > > > > -static bool parse_transport(DBusMessageIter *value, > > +static bool parse_transport(DBusMessageIter *value, > > struct discovery_filter *filter) > > { > > char *transport_str; > > @@ -4435,6 +4435,14 @@ static void load_default_system_params(struct btd_adapter *adapter) > > len += sizeof(params[i].u16); > > } > > > > + if (main_opts.default_params.eir_max_name_len) { > > + params[i].entry.type = 0x001c; > > + params[i].entry.length = sizeof(params[i].u16); > > + params[i].u16 = main_opts.default_params.eir_max_name_len; > > + ++i; > > + len += sizeof(params[i].u16); > > + } > > + > > Do you really want to keep it as uint16_t or is that just laziness since changing the kernel to support anything other than uint16_t is complicated? Yes, this is to re-use the existing infra without complicating the buffer structure. There are a couple more values that are effectively uint8_t but use uint16_t above (like page scan type). > > On a side note, you need to provide a uint16_t value in little endian to the MGMT wire protocol. Sounds like this is a separate issue that needs to be fixed for all values then. I'd rather keep that as a separate patch. > > > 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 5f249ebf9..c9b59a374 100644 > > --- a/src/hcid.h > > +++ b/src/hcid.h > > @@ -93,6 +93,7 @@ struct main_opts { > > uint16_t le_conn_latency; > > uint16_t le_conn_lsto; > > uint16_t le_autoconnect_timeout; > > + uint16_t eir_max_name_len; > > } default_params; > > > > > > diff --git a/src/main.c b/src/main.c > > index ec7a9fbd7..74876e01d 100644 > > --- a/src/main.c > > +++ b/src/main.c > > @@ -123,6 +123,7 @@ static const char *controller_options[] = { > > "LEConnectionLatency", > > "LEConnectionSupervisionTimeout", > > "LEAutoconnecttimeout", > > + "EirMaxNameLength", > > NULL > > }; > > > > @@ -433,6 +434,10 @@ static void parse_controller_config(GKeyFile *config) > > &main_opts.default_params.le_autoconnect_timeout, > > 0x0001, > > 0x4000}, > > + { "EirMaxNameLength", > > + &main_opts.default_params.eir_max_name_len, > > + 0x0001, > > + 0x00EE}, > > }; > > uint16_t i; > > > > diff --git a/src/main.conf b/src/main.conf > > index f41203b96..7ecac5930 100644 > > --- a/src/main.conf > > +++ b/src/main.conf > > @@ -148,6 +148,11 @@ > > #LEConnectionSupervisionTimeout= > > #LEAutoconnecttimeout= > > > > +# EIR Max Name. This is the maximum length for the COMPLETE_NAME EIR section. > > +# If the name length exceeds this size, a SHORT_NAME section is used. > > +# Default: 48 > > +#EirMaxNameLength = 48 > > + > > [GATT] > > # GATT attribute cache. > > # Possible values: > > Regards > > Marcel >