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. > > 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? On a side note, you need to provide a uint16_t value in little endian to the MGMT wire protocol. > 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