Hi, On Mon, Jul 18, 2016 at 2:49 PM, Luiz Augusto von Dentz <luiz.dentz@xxxxxxxxx> wrote: > From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx> > > These interfaces have been in use for quite a while in chromium where it > is used by Web Bluetooth APIs. > --- > doc/gatt-api.txt | 10 +++++----- > src/gatt-client.c | 37 +++++++++++-------------------------- > src/gatt-database.c | 10 +++++----- > 3 files changed, 21 insertions(+), 36 deletions(-) > > diff --git a/doc/gatt-api.txt b/doc/gatt-api.txt > index 4992243..f2f3d89 100644 > --- a/doc/gatt-api.txt > +++ b/doc/gatt-api.txt > @@ -27,7 +27,7 @@ using GattManager1 registration method and must implement the methods and > properties defined in GattService1 interface. > > Service org.bluez > -Interface org.bluez.GattService1 [Experimental] > +Interface org.bluez.GattService1 > Object path [variable prefix]/{hci0,hci1,...}/dev_XX_XX_XX_XX_XX_XX/serviceXX > > Properties string UUID [read-only] > @@ -58,7 +58,7 @@ For local GATT defined services, the object paths need to follow the service > path hierarchy and are freely definable. > > Service org.bluez > -Interface org.bluez.GattCharacteristic1 [Experimental] > +Interface org.bluez.GattCharacteristic1 > Object path [variable prefix]/{hci0,hci1,...}/dev_XX_XX_XX_XX_XX_XX/serviceXX/charYYYY > > Methods array{byte} ReadValue(dict options) > @@ -159,7 +159,7 @@ Characteristic Descriptors hierarchy > Local or remote GATT characteristic descriptors hierarchy. > > Service org.bluez > -Interface org.bluez.GattDescriptor1 [Experimental] > +Interface org.bluez.GattDescriptor1 > Object path [variable prefix]/{hci0,hci1,...}/dev_XX_XX_XX_XX_XX_XX/serviceXX/charYYYY/descriptorZZZ > > Methods array{byte} ReadValue(dict flags) > @@ -231,7 +231,7 @@ and requests automatic connections to be established to devices > supporting it. > > Service <application dependent> > -Interface org.bluez.GattProfile1 [Experimental] > +Interface org.bluez.GattProfile1 > Object path <application dependent> > > Methods void Release() > @@ -308,7 +308,7 @@ all of its registered services will be automatically unregistered. > InterfacesAdded signals will be ignored. > > Service org.bluez > -Interface org.bluez.GattManager1 [Experimental] > +Interface org.bluez.GattManager1 > Object path [variable prefix]/{hci0,hci1,...} > > Methods void RegisterApplication(object application, dict options) > diff --git a/src/gatt-client.c b/src/gatt-client.c > index 7abb306..f50db0b 100644 > --- a/src/gatt-client.c > +++ b/src/gatt-client.c > @@ -623,12 +623,10 @@ static const GDBusPropertyTable descriptor_properties[] = { > }; > > static const GDBusMethodTable descriptor_methods[] = { > - { GDBUS_EXPERIMENTAL_ASYNC_METHOD("ReadValue", > - GDBUS_ARGS({ "options", "a{sv}" }), > + { GDBUS_ASYNC_METHOD("ReadValue", GDBUS_ARGS({ "options", "a{sv}" }), > GDBUS_ARGS({ "value", "ay" }), > descriptor_read_value) }, > - { GDBUS_EXPERIMENTAL_ASYNC_METHOD("WriteValue", > - GDBUS_ARGS({ "value", "ay" }, > + { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" }, > { "options", "a{sv}" }), > NULL, > descriptor_write_value) }, > @@ -1251,34 +1249,27 @@ static DBusMessage *characteristic_stop_notify(DBusConnection *conn, > } > > static const GDBusPropertyTable characteristic_properties[] = { > - { "UUID", "s", characteristic_get_uuid, NULL, NULL, > - G_DBUS_PROPERTY_FLAG_EXPERIMENTAL }, > - { "Service", "o", characteristic_get_service, NULL, NULL, > - G_DBUS_PROPERTY_FLAG_EXPERIMENTAL }, > + { "UUID", "s", characteristic_get_uuid, NULL, NULL }, > + { "Service", "o", characteristic_get_service, NULL, NULL }, > { "Value", "ay", characteristic_get_value, NULL, > - characteristic_value_exists, > - G_DBUS_PROPERTY_FLAG_EXPERIMENTAL }, > + characteristic_value_exists }, > { "Notifying", "b", characteristic_get_notifying, NULL, > - characteristic_notifying_exists, > - G_DBUS_PROPERTY_FLAG_EXPERIMENTAL }, > - { "Flags", "as", characteristic_get_flags, NULL, NULL, > - G_DBUS_PROPERTY_FLAG_EXPERIMENTAL }, > + characteristic_notifying_exists }, > + { "Flags", "as", characteristic_get_flags, NULL, NULL }, > { } > }; > > static const GDBusMethodTable characteristic_methods[] = { > - { GDBUS_EXPERIMENTAL_ASYNC_METHOD("ReadValue", > - GDBUS_ARGS({ "options", "a{sv}" }), > + { GDBUS_ASYNC_METHOD("ReadValue", GDBUS_ARGS({ "options", "a{sv}" }), > GDBUS_ARGS({ "value", "ay" }), > characteristic_read_value) }, > - { GDBUS_EXPERIMENTAL_ASYNC_METHOD("WriteValue", > - GDBUS_ARGS({ "value", "ay" }, > + { GDBUS_ASYNC_METHOD("WriteValue", GDBUS_ARGS({ "value", "ay" }, > { "options", "a{sv}" }), > NULL, > characteristic_write_value) }, > - { GDBUS_EXPERIMENTAL_ASYNC_METHOD("StartNotify", NULL, NULL, > + { GDBUS_ASYNC_METHOD("StartNotify", NULL, NULL, > characteristic_start_notify) }, > - { GDBUS_EXPERIMENTAL_METHOD("StopNotify", NULL, NULL, > + { GDBUS_METHOD("StopNotify", NULL, NULL, > characteristic_stop_notify) }, > { } > }; > @@ -1584,12 +1575,6 @@ static void export_service(struct gatt_db_attribute *attr, void *user_data) > > static void create_services(struct btd_gatt_client *client) > { > - /* Don't attempt to create any objects if experimental is disabled */ > - if (!(g_dbus_get_flags() & G_DBUS_FLAG_ENABLE_EXPERIMENTAL)) { > - info("GATT service objects disabled"); > - return; > - } > - > DBG("Exporting objects for GATT services: %s", client->devaddr); > > gatt_db_foreach_service(client->db, NULL, export_service, client); > diff --git a/src/gatt-database.c b/src/gatt-database.c > index bf1925b..27559fd 100644 > --- a/src/gatt-database.c > +++ b/src/gatt-database.c > @@ -2579,11 +2579,11 @@ static DBusMessage *manager_unregister_app(DBusConnection *conn, > } > > static const GDBusMethodTable manager_methods[] = { > - { GDBUS_EXPERIMENTAL_ASYNC_METHOD("RegisterApplication", > - GDBUS_ARGS({ "application", "o" }, > - { "options", "a{sv}" }), NULL, > - manager_register_app) }, > - { GDBUS_EXPERIMENTAL_ASYNC_METHOD("UnregisterApplication", > + { GDBUS_ASYNC_METHOD("RegisterApplication", > + GDBUS_ARGS({ "application", "o" }, > + { "options", "a{sv}" }), > + NULL, manager_register_app) }, > + { GDBUS_ASYNC_METHOD("UnregisterApplication", > GDBUS_ARGS({ "application", "o" }), > NULL, manager_unregister_app) }, > { } > -- > 2.7.4 Applied, note that we may need to add APIs for observer role since beacons may be able to rotate different advertisements which perhaps don't make sense to be aggregated as properties but in peripherals role this is less likely to happen. -- Luiz Augusto von Dentz -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html