diff options
author | Claudio Takahasi <claudio.takahasi@openbossa.org> | 2010-07-05 19:07:26 -0300 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@nokia.com> | 2010-08-09 18:06:43 -0400 |
commit | 44a3a09fffc52f6848a9f0ce90fcb92d7cece0a8 (patch) | |
tree | 8461a81041bc9f9c44f60e12c5d4c4ffdc83ec3e | |
parent | c0abb9dc3926fb58aea28544b8aab724038bd358 (diff) | |
download | bluez-44a3a09fffc52f6848a9f0ce90fcb92d7cece0a8.tar.gz |
Add stubs for the attribute client
Contains device driver declaration for attribute protocol. Registers
D-Bus path/interface to represent the remote device client: BR/EDR or
LE. For the most common LE scenarios, devices running BlueZ will be
client role.
-rw-r--r-- | Makefile.am | 3 | ||||
-rw-r--r-- | attrib/client.c | 100 | ||||
-rw-r--r-- | attrib/client.h | 27 | ||||
-rw-r--r-- | attrib/manager.c | 39 |
4 files changed, 160 insertions, 9 deletions
diff --git a/Makefile.am b/Makefile.am index 92d436da..5a723c1a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -170,7 +170,8 @@ endif if ATTRIBPLUGIN builtin_modules += attrib -builtin_sources += attrib/main.c attrib/manager.h attrib/manager.c +builtin_sources += attrib/main.c attrib/manager.h attrib/manager.c \ + attrib/client.h attrib/client.c endif builtin_modules += hciops diff --git a/attrib/client.c b/attrib/client.c new file mode 100644 index 00000000..2e830871 --- /dev/null +++ b/attrib/client.c @@ -0,0 +1,100 @@ +/* + * + * BlueZ - Bluetooth protocol stack for Linux + * + * Copyright (C) 2004-2010 Marcel Holtmann <marcel@holtmann.org> + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <glib.h> + +#include "log.h" +#include "gdbus.h" + +#include "client.h" + +#define CHAR_INTERFACE "org.bluez.Characteristic" + +static DBusConnection *connection; + +static DBusMessage *get_characteristics(DBusConnection *conn, + DBusMessage *msg, void *data) +{ + return dbus_message_new_method_return(msg); +} + +static DBusMessage *register_watcher(DBusConnection *conn, + DBusMessage *msg, void *data) +{ + return dbus_message_new_method_return(msg); +} + +static DBusMessage *unregister_watcher(DBusConnection *conn, + DBusMessage *msg, void *data) +{ + return dbus_message_new_method_return(msg); +} + +static GDBusMethodTable char_methods[] = { + { "GetCharacteristics", "", "a{oa{sv}}", get_characteristics}, + { "RegisterCharacteristicsWatcher", "o", "", + register_watcher }, + { "UnregisterCharacteristicsWatcher", "o", "", + unregister_watcher }, + { } +}; + +int attrib_client_register(const char *path) +{ + if (g_dbus_register_interface(connection, path, + CHAR_INTERFACE, + char_methods, NULL, NULL, + NULL, NULL) == FALSE) { + error("D-Bus failed to register %s interface", CHAR_INTERFACE); + return -1; + } + + DBG("Registered interface %s on path %s", CHAR_INTERFACE, path); + + return 0; +} + +void attrib_client_unregister(const char *path) +{ + g_dbus_unregister_interface(connection, path, CHAR_INTERFACE); + + DBG("Unregistered interface %s on path %s", CHAR_INTERFACE, path); +} + +int attrib_client_init(DBusConnection *conn) +{ + + connection = dbus_connection_ref(conn); + + return 0; +} + +void attrib_client_exit(void) +{ + dbus_connection_unref(connection); +} diff --git a/attrib/client.h b/attrib/client.h new file mode 100644 index 00000000..5cc8b1e6 --- /dev/null +++ b/attrib/client.h @@ -0,0 +1,27 @@ +/* + * + * BlueZ - Bluetooth protocol stack for Linux + * + * Copyright (C) 2004-2010 Marcel Holtmann <marcel@holtmann.org> + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +int attrib_client_init(DBusConnection *conn); +void attrib_client_exit(void); +int attrib_client_register(const char *path); +void attrib_client_unregister(const char *path); diff --git a/attrib/manager.c b/attrib/manager.c index d08a83b4..9b99f16b 100644 --- a/attrib/manager.c +++ b/attrib/manager.c @@ -25,18 +25,36 @@ #include <config.h> #endif -#include <errno.h> - -#include <bluetooth/bluetooth.h> -#include <bluetooth/hci.h> -#include <gdbus.h> - -#include "log.h" #include "../src/adapter.h" +#include "../src/device.h" #include "manager.h" +#include "client.h" + +#define GATT_UUID "00001801-0000-1000-8000-00805f9b34fb" + +static DBusConnection *connection; + +static int client_probe(struct btd_device *device, GSList *uuids) +{ + const char *path = device_get_path(device); + + return attrib_client_register(path); +} + +static void client_remove(struct btd_device *device) +{ + const char *path = device_get_path(device); -static DBusConnection *connection = NULL; + attrib_client_unregister(path); +} + +static struct btd_device_driver client_driver = { + .name = "gatt-client", + .uuids = BTD_UUIDS(GATT_UUID), + .probe = client_probe, + .remove = client_remove, +}; static int server_probe(struct btd_adapter *adapter) { @@ -57,7 +75,10 @@ int attrib_manager_init(DBusConnection *conn) { connection = dbus_connection_ref(conn); + attrib_client_init(connection); + btd_register_adapter_driver(&attrib_server_driver); + btd_register_device_driver(&client_driver); return 0; } @@ -65,6 +86,8 @@ int attrib_manager_init(DBusConnection *conn) void attrib_manager_exit(void) { btd_unregister_adapter_driver(&attrib_server_driver); + btd_unregister_device_driver(&client_driver); + attrib_client_exit(); dbus_connection_unref(connection); } |