enum bluez_error_type get_error_type(GError *error);
int property_get_boolean(GDBusProxy *proxy,
+ const char *interface_name,
const char *property,
gboolean *value);
char *property_get_string(GDBusProxy *proxy,
+ const char *interface_name,
const char *property);
int property_get_int16(GDBusProxy *proxy,
+ const char *interface_name,
const char *property,
gint16 *value);
int property_get_uint32(GDBusProxy *proxy,
+ const char *interface_name,
const char *property,
guint32 *u32);
int property_get_uint64(GDBusProxy *proxy,
+ const char *interface_name,
const char *property,
guint64 *u64);
char **property_get_string_list(GDBusProxy *proxy,
+ const char *interface_name,
const char *property);
+void property_set_string(GDBusProxy *proxy,
+ const char *interface_name,
+ const char *property,
+ const char *str);
+
+void property_set_uint64(GDBusProxy *proxy,
+ const char *interface_name,
+ const char *property,
+ guint64 u64);
+
void simple_reply_callback(GObject *source_object,
GAsyncResult *res,
gpointer user_data);
char *object_path;
GDBusInterface *interface;
GDBusProxy *proxy;
+ GDBusProxy *property_proxy;
struct _comms_object *parent;
};
char *interface_name;
GDBusInterface *interface;
GDBusProxy *proxy;
+ GDBusProxy *property_proxy;
};
struct _comms_bluetooth {
g_free(manager->object_path);
g_object_unref(manager->interface);
g_object_unref(manager->proxy);
+ g_object_unref(manager->property_proxy);
g_free(manager);
}
DBG("proxy %p", proxy->proxy);
+ proxy->property_proxy = g_dbus_proxy_new_for_bus_sync((is_system ?
+ G_BUS_TYPE_SYSTEM :
+ G_BUS_TYPE_SESSION),
+ 0,
+ NULL,
+ object->service_name,
+ object->path_name,
+ PROPERTIES_INTERFACE,
+ NULL, NULL);
+ if (proxy->proxy == NULL) {
+ g_object_unref(proxy->interface);
+ proxy->interface = NULL;
+ g_free(proxy->interface_name);
+ proxy->interface_name = NULL;
+ return -1;
+ }
+
+ DBG("property proxy %p", proxy->property_proxy);
+
return 0;
}
g_object_unref(proxy->interface);
if (proxy->proxy)
g_object_unref(proxy->proxy);
+ if (proxy->property_proxy)
+ g_object_unref(proxy->proxy);
+
}
void free_comms_bluetooth(struct _comms_bluetooth *bluetooth)
struct _comms_manager *manager = user_data;
GDBusInterface *interface = data;
GDBusProxy *proxy = G_DBUS_PROXY(interface);
- gchar *iface_name;
+ GDBusProxy *properties_proxy;
+ gchar *iface_name, *path;
if (!manager) {
WARN("no manager");
return;
}
+ path = g_dbus_proxy_get_object_path(proxy);
+
iface_name = g_strdup(g_dbus_proxy_get_interface_name(proxy));
DBG("%s", iface_name);
if (g_strcmp0(iface_name, COMMS_MANAGER_INTERFACE))
return;
+ properties_proxy = g_dbus_proxy_new_for_bus_sync(
+ G_BUS_TYPE_SYSTEM, 0,
+ NULL,
+ COMMS_SERVICE_NAME,
+ path,
+ PROPERTIES_INTERFACE,
+ NULL, NULL);
+ if (properties_proxy == NULL)
+ WARN("create properties proxy error");
+
manager->interface = g_object_ref(interface);
manager->proxy = g_object_ref(proxy);
+ manager->property_proxy = properties_proxy;
g_signal_connect(proxy, "g-properties-changed",
G_CALLBACK(manager_properties_changed), NULL);
if (this_manager == NULL)
return -1;
- return property_get_boolean(this_manager->proxy,
- "BluetoothInService", in_service);
+ return property_get_boolean(this_manager->property_proxy,
+ COMMS_MANAGER_INTERFACE, "BluetoothInService", in_service);
}
void comms_bluetooth_device_pair(const char *address,
GDBusProxy *proxy;
GDBusProxy *media_proxy;
GDBusProxy *netserver_proxy;
+ GDBusProxy *property_proxy;
struct _bluez_object *parent;
struct _device_head *device_head;
bluez_adapter_powered_cb_t powered_cb;
GDBusInterface *input_interface;
GDBusInterface *hdp_interface;
GDBusProxy *proxy;
+ GDBusProxy *property_proxy;
GDBusProxy *control_proxy;
GDBusProxy *network_proxy;
GDBusProxy *input_proxy;
struct _bluez_adapter *adapter = user_data;
GDBusInterface *interface = data;
GDBusProxy *proxy = G_DBUS_PROXY(interface);
- GDBusProxy *signal_proxy;
+ GDBusProxy *signal_proxy, *property_proxy;
const gchar *iface_name, *adapter_path;
if (!adapter) {
return;
}
+ adapter_path = g_dbus_proxy_get_object_path(proxy);
+
iface_name = g_dbus_proxy_get_interface_name(proxy);
DBG("%s", iface_name);
if (g_strcmp0(iface_name, ADAPTER_INTERFACE) == 0) {
+ property_proxy = g_dbus_proxy_new_for_bus_sync(
+ G_BUS_TYPE_SYSTEM, 0,
+ NULL,
+ BLUEZ_NAME,
+ adapter_path,
+ PROPERTIES_INTERFACE,
+ NULL, NULL);
+
DBG("adapter->proxy = proxy");
adapter->interface = interface;
adapter->proxy = proxy;
-
+ adapter->property_proxy = property_proxy;
g_signal_connect(proxy, "g-properties-changed",
G_CALLBACK(adapter_properties_changed), adapter);
} else if (g_strcmp0(iface_name, MEDIA_INTERFACE) == 0) {
adapter->media_proxy = proxy;
} else if (g_strcmp0(iface_name,
NETWORKSERVER_INTERFACES) == 0) {
- adapter_path = g_dbus_proxy_get_object_path(proxy);
-
signal_proxy = g_dbus_proxy_new_for_bus_sync(
G_BUS_TYPE_SYSTEM, 0,
NULL,
struct _bluez_device *device = user_data;
GDBusInterface *interface = data;
GDBusProxy *proxy = G_DBUS_PROXY(interface);
- GDBusProxy *signal_proxy;
+ GDBusProxy *signal_proxy, *property_proxy;
const gchar *iface_name, *path;
if (!device) {
- WARN("no adapter");
+ WARN("no device");
return;
}
+ path = g_dbus_proxy_get_object_path(proxy);
+
iface_name = g_dbus_proxy_get_interface_name(proxy);
DBG("%s", iface_name);
if (g_strcmp0(iface_name, DEVICE_INTERFACE) == 0) {
+ property_proxy = g_dbus_proxy_new_for_bus_sync(
+ G_BUS_TYPE_SYSTEM, 0,
+ NULL,
+ BLUEZ_NAME,
+ path,
+ PROPERTIES_INTERFACE,
+ NULL, NULL);
+
device->interface = interface;
device->proxy = proxy;
+ device->property_proxy = property_proxy;
g_signal_connect(proxy, "g-properties-changed",
G_CALLBACK(device_properties_changed), device);
} else if (g_strcmp0(iface_name, MEDIACONTROL_INTERFACE) == 0) {
g_signal_connect(proxy, "g-properties-changed",
G_CALLBACK(network_properties_changed), device);
} else if (g_strcmp0(iface_name, HDP_DEVICE_INTERFACE) == 0) {
- path = g_dbus_proxy_get_object_path(proxy);
-
DBG("hdp path = %s", path);
g_signal_connect(proxy, "g-properties-changed",
struct _bluez_object *object = user_data;
GDBusInterface *interface = data;
GDBusProxy *proxy = G_DBUS_PROXY(interface);
- const gchar *iface_name;
+ GDBusProxy *property_proxy;
+ const gchar *iface_name, *path;
iface_name = g_dbus_proxy_get_interface_name(proxy);
DBG("%s", iface_name);
gchar *device_path;
bt_audio_profile_type_e type;
+ path = g_dbus_proxy_get_object_path(proxy);
+
+ property_proxy = g_dbus_proxy_new_for_bus_sync(
+ G_BUS_TYPE_SYSTEM, 0,
+ NULL,
+ BLUEZ_NAME,
+ path,
+ PROPERTIES_INTERFACE,
+ NULL, NULL);
+
device_address = g_malloc0(BT_ADDRESS_STRING_SIZE);
if (device_address == NULL)
return;
- device_path = property_get_string(proxy, "Device");
+ device_path = property_get_string(property_proxy,
+ MEDIATRANSPORT_INTERFACE, "Device");
if (device_path == NULL) {
DBG("device_path == NULL");
g_free(device_address);
convert_device_path_to_address((const gchar *)device_path,
device_address);
- uuid = property_get_string(proxy, "UUID");
+ uuid = property_get_string(property_proxy,
+ MEDIATRANSPORT_INTERFACE, "UUID");
if (uuid == NULL) {
g_free(device_address);
g_free(device_path);
char *bluez_device_property_get_adapter(struct _bluez_device *device)
{
- return property_get_string(device->proxy, "Adapter");
+ return property_get_string(device->property_proxy,
+ DEVICE_INTERFACE, "Adapter");
}
static void free_bluez_device(gpointer data)
g_object_unref(device->network_interface);
if (device->network_proxy)
g_object_unref(device->network_proxy);
+ if (device->property_proxy)
+ g_object_unref(device->property_proxy);
g_free(device);
}
g_object_unref(adapter->media_interface);
g_object_unref(adapter->netserver_proxy);
g_object_unref(adapter->netserver_interface);
+ g_object_unref(adapter->property_proxy);
g_object_unref(adapter->proxy);
g_free(adapter);
int bluez_adapter_get_property_powered(struct _bluez_adapter *adapter,
gboolean *powered)
{
- return property_get_boolean(adapter->proxy, "Powered", powered);
+ return property_get_boolean(adapter->property_proxy, ADAPTER_INTERFACE,
+ "Powered", powered);
}
void bluez_adapter_set_powered_changed_cb(struct _bluez_adapter *adapter,
char *bluez_adapter_get_property_alias(struct _bluez_adapter *adapter)
{
- return property_get_string(adapter->proxy, "Alias");
+ return property_get_string(adapter->property_proxy,
+ ADAPTER_INTERFACE, "Alias");
}
void bluez_adapter_set_alias_changed_cb(struct _bluez_adapter *adapter,
char *bluez_adapter_get_property_address(struct _bluez_adapter *adapter)
{
- return property_get_string(adapter->proxy, "Address");
+ return property_get_string(adapter->property_proxy,
+ ADAPTER_INTERFACE, "Address");
}
int bluez_adapter_get_property_discoverable(struct _bluez_adapter *adapter,
gboolean *discoverable)
{
- return property_get_boolean(adapter->proxy, "Discoverable", discoverable);
+ return property_get_boolean(adapter->property_proxy, ADAPTER_INTERFACE,
+ "Discoverable", discoverable);
}
int bluez_adapter_get_property_discoverable_timeout(
struct _bluez_adapter *adapter,
guint32 *time)
{
- return property_get_uint32(adapter->proxy,
+ return property_get_uint32(adapter->property_proxy, ADAPTER_INTERFACE,
"DiscoverableTimeout", time);
}
int bluez_adapter_get_property_discovering(struct _bluez_adapter *adapter,
gboolean *discovering)
{
- return property_get_boolean(adapter->proxy,
+ return property_get_boolean(adapter->property_proxy, ADAPTER_INTERFACE,
"Discovering", discovering);
}
char **bluez_adapter_get_property_uuids(struct _bluez_adapter *adapter)
{
- return property_get_string_list(adapter->proxy, "UUIDs");
+ return property_get_string_list(adapter->property_proxy,
+ ADAPTER_INTERFACE, "UUIDs");
}
static gchar *address_to_path(const gchar *prefix, const gchar *address)
int bluez_device_network_get_property_connected(struct _bluez_device *device,
gboolean *connected)
{
- return property_get_boolean(device->network_proxy, "Connected", connected);
+ return property_get_boolean(device->property_proxy, NETWORK_INTERFACE,
+ "Connected", connected);
}
void bluez_device_input_set_connected_changed_cb(
int bluez_device_input_get_property_connected(struct _bluez_device *device,
gboolean *connected)
{
- return property_get_boolean(device->input_proxy,
- "Connected", connected);
+ return property_get_boolean(device->property_proxy,
+ INPUT_INTERFACE, "Connected", connected);
}
void bluez_device_set_paired_changed_cb(struct _bluez_device *device,
char **bluez_device_get_property_uuids(struct _bluez_device *device)
{
- return property_get_string_list(device->proxy, "UUIDs");
+ return property_get_string_list(device->property_proxy,
+ DEVICE_INTERFACE, "UUIDs");
}
char *bluez_device_get_property_address(struct _bluez_device *device)
{
- return property_get_string(device->proxy, "Address");
+ return property_get_string(device->property_proxy,
+ DEVICE_INTERFACE, "Address");
}
char *bluez_device_get_property_alias(struct _bluez_device *device)
{
- return property_get_string(device->proxy, "Alias");
+ return property_get_string(device->property_proxy,
+ DEVICE_INTERFACE, "Alias");
}
int bluez_device_get_property_class(struct _bluez_device *device,
guint32 *class)
{
- return property_get_uint32(device->proxy, "Class", class);
+ return property_get_uint32(device->property_proxy,
+ DEVICE_INTERFACE, "Class", class);
}
int bluez_device_get_property_paired(struct _bluez_device *device,
gboolean *paired)
{
- return property_get_boolean(device->proxy, "Paired", paired);
+ return property_get_boolean(device->property_proxy, DEVICE_INTERFACE,
+ "Paired", paired);
}
int bluez_device_get_property_trusted(struct _bluez_device *device,
gboolean *trusted)
{
- return property_get_boolean(device->proxy, "Trusted", trusted);
+ return property_get_boolean(device->property_proxy, DEVICE_INTERFACE,
+ "Trusted", trusted);
}
int bluez_device_get_property_connected(struct _bluez_device *device,
gboolean *connected)
{
- return property_get_boolean(device->proxy, "Connected", connected);
+ return property_get_boolean(device->property_proxy, DEVICE_INTERFACE,
+ "Connected", connected);
}
int bluez_device_get_property_rssi(struct _bluez_device *device,
gint16 *rssi)
{
- return property_get_int16(device->proxy, "RSSI", rssi);
+ return property_get_int16(device->property_proxy, DEVICE_INTERFACE,
+ "RSSI", rssi);
}
char *bluez_device_get_property_icon(struct _bluez_device *device)
{
- return property_get_string(device->proxy, "Icon");
+ return property_get_string(device->property_proxy, DEVICE_INTERFACE,
+ "Icon");
}
struct profile_connect_state_notify {
return ERROR_NONE;
}
int property_get_boolean(GDBusProxy *proxy,
- const char *property,
- gboolean *value)
+ const char *interface_name,
+ const char *property,
+ gboolean *value)
{
- GVariant *bool_v;
+ GVariant *bool_v, *bool_vv;
+ GError *error = NULL;
- bool_v = g_dbus_proxy_get_cached_property(proxy, property);
- if (bool_v == NULL) {
+ bool_vv = g_dbus_proxy_call_sync(
+ proxy, "Get",
+ g_variant_new("(ss)", interface_name, property),
+ 0, -1, NULL, &error);
+
+ if (bool_vv == NULL) {
WARN("no cached property %s", property);
return -1;
}
+ g_variant_get(bool_vv, "(v)", &bool_v);
+
*value = g_variant_get_boolean(bool_v);
g_variant_unref(bool_v);
}
char *property_get_string(GDBusProxy *proxy,
- const char *property)
+ const char *interface_name,
+ const char *property)
{
- GVariant *string_v;
+ GVariant *string_v, *string_vv;
char *string;
+ GError *error = NULL;
+
+ string_vv = g_dbus_proxy_call_sync(
+ proxy, "Get",
+ g_variant_new("(ss)", interface_name, property),
+ 0, -1, NULL, &error);
- string_v = g_dbus_proxy_get_cached_property(proxy, property);
- if (string_v == NULL) {
+ if (string_vv == NULL) {
WARN("no cached property %s", property);
return NULL;
}
+ g_variant_get(string_vv, "(v)", &string_v);
+
string = g_variant_dup_string(string_v, NULL);
g_variant_unref(string_v);
}
int property_get_int16(GDBusProxy *proxy,
- const char *property,
- gint16 *value)
+ const char *interface_name,
+ const char *property,
+ gint16 *value)
{
- GVariant *int16_v;
+ GVariant *int16_v, *int16_vv;
+ GError *error = NULL;
- int16_v = g_dbus_proxy_get_cached_property(proxy, property);
- if (int16_v == NULL) {
+ int16_vv = g_dbus_proxy_call_sync(
+ proxy, "Get",
+ g_variant_new("(ss)", interface_name, property),
+ 0, -1, NULL, &error);
+
+ if (int16_vv == NULL) {
WARN("no cached property %s", property);
return -1;
}
+ g_variant_get(int16_vv, "(v)", &int16_v);
+
*value = g_variant_get_int16(int16_v);
g_variant_unref(int16_v);
}
int property_get_uint32(GDBusProxy *proxy,
- const char *property,
- guint32 *u32)
+ const char *interface_name,
+ const char *property,
+ guint32 *u32)
{
- GVariant *u32_v;
+ GVariant *u32_v, *u32_vv;
+ GError *error = NULL;
- u32_v = g_dbus_proxy_get_cached_property(proxy, property);
- if (u32_v == NULL) {
+ u32_vv = g_dbus_proxy_call_sync(
+ proxy, "Get",
+ g_variant_new("(ss)", interface_name, property),
+ 0, -1, NULL, &error);
+ if (u32_vv == NULL) {
WARN("no cached property %s", property);
return -1;
}
+ g_variant_get(u32_vv, "(v)", &u32_v);
+
*u32 = g_variant_get_uint32(u32_v);
g_variant_unref(u32_v);
}
int property_get_uint64(GDBusProxy *proxy,
- const char *property,
- guint64 *u64)
+ const char *interface_name,
+ const char *property,
+ guint64 *u64)
{
- GVariant *u64_v;
+ GVariant *u64_v, *u64_vv;
+ GError *error = NULL;
- u64_v = g_dbus_proxy_get_cached_property(proxy, property);
- if (u64_v == NULL) {
+ u64_vv = g_dbus_proxy_call_sync(
+ proxy, "Get",
+ g_variant_new("(ss)", interface_name, property),
+ 0, -1, NULL, &error);
+ if (u64_vv == NULL) {
WARN("no cached property %s", property);
return -1;
}
+ g_variant_get(u64_vv, "(v)", &u64_v);
+
*u64 = g_variant_get_uint64(u64_v);
g_variant_unref(u64_v);
}
char **property_get_string_list(GDBusProxy *proxy,
+ const char *interface_name,
const char *property)
{
- GVariant *strv_v;
+ GVariant *strv_v, *strv_vv;
char **strv;
+ GError *error = NULL;
- strv_v = g_dbus_proxy_get_cached_property(proxy, property);
- if (strv_v == NULL) {
+ strv_vv = g_dbus_proxy_call_sync(
+ proxy, "Get",
+ g_variant_new("(ss)", interface_name, property),
+ 0, -1, NULL, &error);
+
+ if (strv_vv == NULL) {
WARN("no cached property %s", property);
return NULL;
}
+ g_variant_get(strv_vv, "(v)", &strv_v);
+
strv = g_variant_dup_strv(strv_v, NULL);
return strv;
}
void property_set_string(GDBusProxy *proxy,
+ const char *interface_name,
const char *property,
const char *str)
{
- g_dbus_proxy_set_cached_property(proxy, property,
- g_variant_new("s", str));
+ GError *error = NULL;
+ GVariant *val = g_variant_new("s", str);
+ GVariant *parameters = g_variant_new("(ssv)",
+ interface_name, property, val);
+
+ g_dbus_proxy_call_sync(
+ proxy, "Set", parameters,
+ 0, -1, NULL, &error);
}
void property_set_uint64(GDBusProxy *proxy,
+ const char *interface_name,
const char *property,
guint64 u64)
{
- g_dbus_proxy_set_cached_property(proxy, property,
- g_variant_new("t", u64));
+ GError *error = NULL;
+ GVariant *val = g_variant_new("t", u64);
+ GVariant *parameters = g_variant_new("(ssv)",
+ interface_name, property, val);
+
+ g_dbus_proxy_call_sync(
+ proxy, "Set", parameters,
+ 0, -1, NULL, &error);
}
void convert_device_path_to_address(const gchar *device_path,
char *interface_name;
GDBusInterface *interface;
GDBusProxy *proxy;
+ GDBusProxy *property_proxy;
};
/*
return NULL;
}
-static inline void property_set_uint64(GDBusProxy *proxy,
- const char *property,
- guint64 u64)
-{
- g_dbus_proxy_set_cached_property(proxy, property,
- g_variant_new("t", u64));
-}
-
-static inline void property_set_string(GDBusProxy *proxy,
- const char *property,
- const char *str)
-{
- g_dbus_proxy_set_cached_property(proxy, property,
- g_variant_new("s", str));
-}
-
gchar *obex_session_property_get_destination(struct _obex_session *session)
{
GVariant *dest_vv, *dest_v;
if (session == NULL)
return NULL;
- return property_get_string(session->session_proxy.proxy,
- "Source");
+ return property_get_string(session->session_proxy.property_proxy,
+ OBEX_TRANSFER_INTERFACE, "Source");
}
gchar *obex_session_property_get_target_uuid(struct _obex_session *session)
if (session == NULL)
return NULL;
- return property_get_string(session->session_proxy.proxy,
- "Target");
+ return property_get_string(session->session_proxy.property_proxy,
+ OBEX_TRANSFER_INTERFACE, "Target");
}
static inline enum obex_target target_uuid_to_target(const char *target_uuid)
g_object_unref(proxy->interface);
if (proxy->proxy)
g_object_unref(proxy->proxy);
+ if (proxy->property_proxy)
+ g_object_unref(proxy->property_proxy);
+
}
static GList *session_notify_list;
gchar *obex_transfer_property_get_session_path(struct _obex_transfer *transfer)
{
- return property_get_string(transfer->proxy.proxy, "Session");
+ return property_get_string(transfer->proxy.property_proxy,
+ OBEX_TRANSFER_INTERFACE, "Session");
}
static GList *transfer_notify_list;
enum transfer_state obex_transfer_property_get_state(
struct _obex_transfer *transfer)
{
- char *status = property_get_string(transfer->proxy.proxy, "Status");
+ char *status = property_get_string(transfer->proxy.property_proxy,
+ OBEX_TRANSFER_INTERFACE, "Status");
return get_transfer_state_from_string(status);
}
struct _obex_transfer *transfer,
guint64 *u64)
{
- return property_get_uint64(transfer->proxy.proxy, "Transferred", u64);
+ return property_get_uint64(transfer->proxy.property_proxy,
+ OBEX_TRANSFER_INTERFACE, "Transferred", u64);
}
int obex_transfer_property_get_size(
struct _obex_transfer *transfer,
guint64 *u64)
{
- return property_get_uint64(transfer->proxy.proxy, "Size", u64);
+ return property_get_uint64(transfer->proxy.property_proxy,
+ OBEX_TRANSFER_INTERFACE, "Size", u64);
}
void obex_transfer_set_property_name(struct _obex_transfer *transfer,
const char *name)
{
- property_set_string(transfer->proxy.proxy, "Name", name);
+ property_set_string(transfer->proxy.property_proxy,
+ OBEX_TRANSFER_INTERFACE, "Name", name);
}
void obex_transfer_set_property_size(struct _obex_transfer *transfer,
guint64 size)
{
- property_set_uint64(transfer->proxy.proxy, "Size", size);
+ property_set_uint64(transfer->proxy.property_proxy,
+ OBEX_TRANSFER_INTERFACE, "Size", size);
}
static struct _transfer_notify *create_transfer_notify(
char *obex_transfer_get_property_file_name(struct _obex_transfer *transfer)
{
- return property_get_string(transfer->proxy.proxy, "Filename");
+ return property_get_string(transfer->proxy.property_proxy,
+ OBEX_TRANSFER_INTERFACE, "Filename");
}
char *obex_transfer_get_property_name(struct _obex_transfer *transfer)
{
- return property_get_string(transfer->proxy.proxy, "Name");
+ return property_get_string(transfer->proxy.property_proxy,
+ OBEX_TRANSFER_INTERFACE, "Name");
}
char *obex_transfer_get_name(struct _obex_transfer *transfer)