Hi Vibhav, On Tue, Sep 19, 2023 at 12:59 PM <vibhavp@xxxxxxxxx> wrote: > > From: Vibhav Pant <vibhavp@xxxxxxxxx> > > This allows DBus clients to find an adapter's version and > manufacturer company code without querying the management API. We don't use Signed-off-by on userspace. > Signed-off-by: Vibhav Pant <vibhavp@xxxxxxxxx> > --- > doc/adapter-api.txt | 11 +++++++++++ > src/adapter.c | 28 ++++++++++++++++++++++++++++ > 2 files changed, 39 insertions(+) > > diff --git a/doc/adapter-api.txt b/doc/adapter-api.txt > index d38ce7171..10c290c62 100644 > --- a/doc/adapter-api.txt > +++ b/doc/adapter-api.txt > @@ -360,3 +360,14 @@ Properties string Address [readonly] > > List of 128-bit UUIDs that represents the > experimental > features currently enabled. > + > + uint16 Manufacturer [readonly] > + > + The manufacturer of the device, as a uint16 > company > + identifier defined by the Core Bluetooth > Specification. > + > + byte Version [readonly] > + > + The Bluetooth version supported by the device, > as a > + core version code defined by the Core > Bluetooth > + Specification. Documentation should be submitted in a separate patch. > diff --git a/src/adapter.c b/src/adapter.c > index 5ebfc4752..8f67a6826 100644 > --- a/src/adapter.c > +++ b/src/adapter.c > @@ -260,6 +260,7 @@ struct btd_adapter { > > bdaddr_t bdaddr; /* controller Bluetooth > address */ > uint8_t bdaddr_type; /* address type */ > + uint8_t version; /* controller core spec > version */ > uint32_t dev_class; /* controller class of device > */ > char *name; /* controller device name */ > char *short_name; /* controller short name */ > @@ -3540,6 +3541,29 @@ static gboolean > property_experimental_exists(const GDBusPropertyTable *property, > return !queue_isempty(adapter->exps); > } > > +static gboolean property_get_manufacturer(const GDBusPropertyTable > *property, > + DBusMessageIter *iter, > + void *user_data) > +{ > + struct btd_adapter *adapter = user_data; > + dbus_uint16_t val = adapter->manufacturer; > + > + dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT16, &val); > + > + return TRUE; > +} > + > +static gboolean property_get_version(const GDBusPropertyTable > *property, > + DBusMessageIter *iter, void > *user_data) > +{ > + struct btd_adapter *adapter = user_data; > + uint8_t val = adapter->version; > + > + dbus_message_iter_append_basic(iter, DBUS_TYPE_BYTE, &val); > + > + return TRUE; > +} > + > static DBusMessage *remove_device(DBusConnection *conn, > DBusMessage *msg, void > *user_data) > { > @@ -3898,6 +3922,8 @@ static const GDBusPropertyTable > adapter_properties[] = { > { "Roles", "as", property_get_roles }, > { "ExperimentalFeatures", "as", property_get_experimental, > NULL, > property_experimental_exists > }, > + { "Manufacturer", "q", property_get_manufacturer }, > + { "Version", "y", property_get_version }, > { } > }; > > @@ -10162,6 +10188,8 @@ static void read_info_complete(uint8_t status, > uint16_t length, > adapter->supported_settings = btohl(rp->supported_settings); > adapter->current_settings = btohl(rp->current_settings); > > + adapter->version = rp->version; > + > clear_uuids(adapter); > clear_devices(adapter); > > -- > 2.42.0 > > > -- Luiz Augusto von Dentz