From 4004433ad457a6ee71623f5a0c8dd4692d752235 Mon Sep 17 00:00:00 2001 From: "Gustavo F. Padovan" Date: Mon, 14 Jun 2010 15:04:22 -0300 Subject: [PATCH] Add bluetooth plugin skeleton. The bluetooth plugin has bluetooth_resgister_uuid() and bluetooth_unresgister_uuid() where bluetooth profiles plugins such as HFP and DUN can register themselves to get know about BlueZ stuff ( new devices, bluetoothd shutdown, etc..) --- Makefile.am | 5 ++- plugins/bluetooth.c | 75 +++++++++++++++++++++++++++++++++++++++++++++ plugins/bluetooth.h | 42 +++++++++++++++++++++++++ plugins/hfp.c | 8 ++--- 4 files changed, 123 insertions(+), 7 deletions(-) create mode 100644 plugins/bluetooth.c create mode 100644 plugins/bluetooth.h diff --git a/Makefile.am b/Makefile.am index 2ca07039..b6e4c35a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -238,8 +238,11 @@ builtin_sources += plugins/em770.c builtin_modules += novatel builtin_sources += plugins/novatel.c +builtin_modules += bluetooth +builtin_sources += plugins/bluetooth.c plugins/bluetooth.h + builtin_modules += hfp -builtin_sources += plugins/hfp.c +builtin_sources += plugins/hfp.c plugins/bluetooth.h builtin_modules += palmpre builtin_sources += plugins/palmpre.c diff --git a/plugins/bluetooth.c b/plugins/bluetooth.c new file mode 100644 index 00000000..b4fe6767 --- /dev/null +++ b/plugins/bluetooth.c @@ -0,0 +1,75 @@ +/* + * oFono - Open Source Telephony + * + * Copyright (C) 2008-2010 Intel Corporation. All rights reserved. + * Copyright (C) 2010 ProFUSION embedded systems + * Copyright (C) 2010 Gustavo F. Padovan + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * 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 +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "bluetooth.h" + +static DBusConnection *connection; +static GHashTable *uuid_hash = NULL; +static GHashTable *adapter_address_hash = NULL; + +int bluetooth_register_uuid(const char *uuid, struct bluetooth_profile *profile) +{ + if (uuid_hash) + goto done; + + connection = ofono_dbus_get_connection(); + + uuid_hash = g_hash_table_new_full(g_str_hash, g_str_equal, + g_free, NULL); + + adapter_address_hash = g_hash_table_new_full(g_str_hash, g_str_equal, + g_free, g_free); + +done: + g_hash_table_insert(uuid_hash, g_strdup(uuid), profile); + + return 0; +} + +void bluetooth_unregister_uuid(const char *uuid) +{ + g_hash_table_remove(uuid_hash, uuid); + + if (g_hash_table_size(uuid_hash)) + return; + + g_hash_table_destroy(uuid_hash); + g_hash_table_destroy(adapter_address_hash); + uuid_hash = NULL; +} + +OFONO_PLUGIN_DEFINE(bluetooth, "Bluetooth Utils Plugins", VERSION, + OFONO_PLUGIN_PRIORITY_DEFAULT, NULL, NULL) diff --git a/plugins/bluetooth.h b/plugins/bluetooth.h new file mode 100644 index 00000000..94ebaf69 --- /dev/null +++ b/plugins/bluetooth.h @@ -0,0 +1,42 @@ +/* + * oFono - Open Source Telephony + * + * Copyright (C) 2010 Gustavo F. Padovan + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * 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 + * + */ + +#define BLUEZ_SERVICE "org.bluez" +#define BLUEZ_MANAGER_INTERFACE BLUEZ_SERVICE ".Manager" +#define BLUEZ_ADAPTER_INTERFACE BLUEZ_SERVICE ".Adapter" +#define BLUEZ_DEVICE_INTERFACE BLUEZ_SERVICE ".Device" + +#define HFP_AG_UUID "0000111F-0000-1000-8000-00805F9B34FB" + +/* Profiles bitfield */ +#define HFP_AG 0x01 + +struct bluetooth_profile { + const char *name; + int (*create)(const char *device, const char *dev_addr, + const char *adapter_addr, const char *alias); + void (*remove_all)(); + void (*set_alias)(const char *device, const char *); +}; + +int bluetooth_register_uuid(const char *uuid, + struct bluetooth_profile *profile); +void bluetooth_unregister_uuid(const char *uuid); + diff --git a/plugins/hfp.c b/plugins/hfp.c index e37c9fc1..a49e4af6 100644 --- a/plugins/hfp.c +++ b/plugins/hfp.c @@ -45,17 +45,13 @@ #include -#define BLUEZ_SERVICE "org.bluez" -#define BLUEZ_MANAGER_INTERFACE BLUEZ_SERVICE ".Manager" -#define BLUEZ_ADAPTER_INTERFACE BLUEZ_SERVICE ".Adapter" -#define BLUEZ_DEVICE_INTERFACE BLUEZ_SERVICE ".Device" +#include "bluetooth.h" + #define BLUEZ_GATEWAY_INTERFACE BLUEZ_SERVICE ".HandsfreeGateway" #define HFP_AGENT_INTERFACE "org.bluez.HandsfreeAgent" #define HFP_AGENT_ERROR_INTERFACE "org.bluez.Error" -#define HFP_AG_UUID "0000111F-0000-1000-8000-00805F9B34FB" - #ifndef DBUS_TYPE_UNIX_FD #define DBUS_TYPE_UNIX_FD -1 #endif