summaryrefslogtreecommitdiff
path: root/proximity
diff options
context:
space:
mode:
authorSheldon Demario <sheldon.demario@openbossa.org>2011-07-26 13:53:16 -0300
committerJohan Hedberg <johan.hedberg@intel.com>2011-08-03 12:23:41 +0300
commit5f3ec93302bfe5cc8e233520353d3657a462709a (patch)
tree60bf14c3c0ffeb1924a9308e3122dda37a930324 /proximity
parenta7c03cd4a3a4bbc532ea75f15d97ad60141676a7 (diff)
downloadbluez-5f3ec93302bfe5cc8e233520353d3657a462709a.tar.gz
Use device object path on Proximity Monitor
Diffstat (limited to 'proximity')
-rw-r--r--proximity/manager.c11
-rw-r--r--proximity/monitor.c48
-rw-r--r--proximity/monitor.h4
3 files changed, 31 insertions, 32 deletions
diff --git a/proximity/manager.c b/proximity/manager.c
index f49d06619..8d0aee190 100644
--- a/proximity/manager.c
+++ b/proximity/manager.c
@@ -41,11 +41,12 @@ static DBusConnection *connection = NULL;
static int attio_device_probe(struct btd_device *device, GSList *uuids)
{
- return 0;
+ return monitor_register(connection, device);
}
static void attio_device_remove(struct btd_device *device)
{
+ monitor_unregister(connection, device);
}
static struct btd_device_driver monitor_driver = {
@@ -67,20 +68,12 @@ int proximity_manager_init(DBusConnection *conn)
connection = dbus_connection_ref(conn);
- ret = monitor_register(connection);
-
- if (ret < 0) {
- dbus_connection_unref(connection);
- return ret;
- }
-
return reporter_init();
}
void proximity_manager_exit(void)
{
reporter_exit();
- monitor_unregister(connection);
btd_unregister_device_driver(&monitor_driver);
dbus_connection_unref(connection);
}
diff --git a/proximity/monitor.c b/proximity/monitor.c
index 8bcd4a3bb..8465f92db 100644
--- a/proximity/monitor.c
+++ b/proximity/monitor.c
@@ -37,16 +37,17 @@
#include <bluetooth/bluetooth.h>
#include "dbus-common.h"
+#include "adapter.h"
+#include "device.h"
#include "error.h"
#include "log.h"
-
#include "monitor.h"
#include "textfile.h"
#define PROXIMITY_INTERFACE "org.bluez.Proximity"
-#define PROXIMITY_PATH "/org/bluez/proximity"
struct monitor {
+ struct btd_device *device;
char *linklosslevel; /* Link Loss Alert Level */
};
@@ -93,6 +94,8 @@ static DBusMessage *set_link_loss_alert(DBusConnection *conn, DBusMessage *msg,
const char *level, void *data)
{
struct monitor *monitor = data;
+ struct btd_device *device = monitor->device;
+ const char *path = device_get_path(device);
bdaddr_t sba, dba;
if (!g_str_equal("none", level) && !g_str_equal("mild", level) &&
@@ -105,12 +108,12 @@ static DBusMessage *set_link_loss_alert(DBusConnection *conn, DBusMessage *msg,
g_free(monitor->linklosslevel);
monitor->linklosslevel = g_strdup(level);
- /* FIXME: using hardcoded values */
- bacpy(&sba, BDADDR_ANY);
- bacpy(&dba, BDADDR_ALL);
+ adapter_get_address(device_get_adapter(device), &sba);
+ device_get_address(device, &dba);
+
write_proximity_config(&sba, &dba, "LinkLossAlertLevel", level);
- emit_property_changed(conn, PROXIMITY_PATH,
+ emit_property_changed(conn, path,
PROXIMITY_INTERFACE, "LinkLossAlertLevel",
DBUS_TYPE_STRING, &monitor->linklosslevel);
@@ -193,42 +196,45 @@ static void monitor_destroy(gpointer user_data)
{
struct monitor *monitor = user_data;
+ btd_device_unref(monitor->device);
g_free(monitor->linklosslevel);
g_free(monitor);
}
-int monitor_register(DBusConnection *conn)
+int monitor_register(DBusConnection *conn, struct btd_device *device)
{
+ const char *path = device_get_path(device);
struct monitor *monitor;
bdaddr_t sba, dba;
char *level;
- int ret = -1;
- /* FIXME: using hardcoded values */
- bacpy(&sba, BDADDR_ANY);
- bacpy(&dba, BDADDR_ALL);
+ adapter_get_address(device_get_adapter(device), &sba);
+ device_get_address(device, &dba);
level = read_proximity_config(&sba, &dba, "LinkLossAlertLevel");
monitor = g_new0(struct monitor, 1);
+ monitor->device = btd_device_ref(device);
monitor->linklosslevel = (level ? : g_strdup("none"));
- if (g_dbus_register_interface(conn, PROXIMITY_PATH,
+ if (g_dbus_register_interface(conn, path,
PROXIMITY_INTERFACE,
monitor_methods, monitor_signals,
- NULL, monitor, monitor_destroy) == TRUE) {
- DBG("Registered interface %s on path %s", PROXIMITY_INTERFACE,
- PROXIMITY_PATH);
- ret = 0;
-
+ NULL, monitor, monitor_destroy) == FALSE) {
+ error("D-Bus failed to register %s interface",
+ PROXIMITY_INTERFACE);
+ monitor_destroy(monitor);
+ return -1;
}
- error("D-Bus failed to register %s interface", PROXIMITY_INTERFACE);
+ DBG("Registered interface %s on path %s", PROXIMITY_INTERFACE, path);
- return ret;
+ return 0;
}
-void monitor_unregister(DBusConnection *conn)
+void monitor_unregister(DBusConnection *conn, struct btd_device *device)
{
- g_dbus_unregister_interface(conn, PROXIMITY_PATH, PROXIMITY_INTERFACE);
+ const char *path = device_get_path(device);
+
+ g_dbus_unregister_interface(conn, path, PROXIMITY_INTERFACE);
}
diff --git a/proximity/monitor.h b/proximity/monitor.h
index d4913ac4e..5c6ebf6a9 100644
--- a/proximity/monitor.h
+++ b/proximity/monitor.h
@@ -22,5 +22,5 @@
*
*/
-int monitor_register(DBusConnection *conn);
-void monitor_unregister(DBusConnection *conn);
+int monitor_register(DBusConnection *conn, struct btd_device *device);
+void monitor_unregister(DBusConnection *conn, struct btd_device *device);