* [PATCH 1/2] android/gatt: Add initial files @ 2014-03-03 9:29 Grzegorz Kolodziejczyk 2014-03-03 9:29 ` [PATCH 2/2] android/gatt: Add stubs for GATT commands handlers Grzegorz Kolodziejczyk 2014-03-03 14:39 ` [PATCH 1/2] android/gatt: Add initial files Szymon Janc 0 siblings, 2 replies; 4+ messages in thread From: Grzegorz Kolodziejczyk @ 2014-03-03 9:29 UTC (permalink / raw) To: linux-bluetooth This adds initial daemon code for GATT profile. --- android/Android.mk | 1 + android/Makefile.am | 1 + android/gatt.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ android/gatt.h | 25 +++++++++++++++++++++++++ android/main.c | 13 +++++++++++++ 5 files changed, 84 insertions(+) create mode 100644 android/gatt.c create mode 100644 android/gatt.h diff --git a/android/Android.mk b/android/Android.mk index 56b86ba..429a4b8 100644 --- a/android/Android.mk +++ b/android/Android.mk @@ -42,6 +42,7 @@ LOCAL_SRC_FILES := \ bluez/android/avrcp-lib.c \ bluez/android/pan.c \ bluez/android/handsfree.c \ + bluez/android/gatt.c bluez/src/log.c \ bluez/src/shared/mgmt.c \ bluez/src/shared/util.c \ diff --git a/android/Makefile.am b/android/Makefile.am index 31f905c..6be6cda 100644 --- a/android/Makefile.am +++ b/android/Makefile.am @@ -40,6 +40,7 @@ android_bluetoothd_SOURCES = android/main.c \ android/socket.h android/socket.c \ android/pan.h android/pan.c \ android/handsfree.h android/handsfree.c \ + android/gatt.h android/gatt.c \ btio/btio.h btio/btio.c \ src/sdp-client.h src/sdp-client.c \ profiles/network/bnep.h profiles/network/bnep.c diff --git a/android/gatt.c b/android/gatt.c new file mode 100644 index 0000000..f577446 --- /dev/null +++ b/android/gatt.c @@ -0,0 +1,44 @@ +/* + * + * BlueZ - Bluetooth protocol stack for Linux + * + * Copyright (C) 2014 Intel Corporation. All rights reserved. + * + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; 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 <stdbool.h> +#include <stdlib.h> +#include <stdint.h> + +#include "ipc.h" +#include "lib/bluetooth.h" +#include "gatt.h" + +bool bt_gatt_register(struct ipc *ipc, const bdaddr_t *addr) +{ + return false; +} + +void bt_gatt_unregister(void) +{ + +} diff --git a/android/gatt.h b/android/gatt.h new file mode 100644 index 0000000..d4392d9 --- /dev/null +++ b/android/gatt.h @@ -0,0 +1,25 @@ +/* + * + * BlueZ - Bluetooth protocol stack for Linux + * + * Copyright (C) 2014 Intel Corporation. All rights reserved. + * + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +bool bt_gatt_register(struct ipc *ipc, const bdaddr_t *addr); +void bt_gatt_unregister(void); diff --git a/android/main.c b/android/main.c index a6742ef..7b5ca9c 100644 --- a/android/main.c +++ b/android/main.c @@ -58,6 +58,7 @@ #include "pan.h" #include "avrcp.h" #include "handsfree.h" +#include "gatt.h" #define STARTUP_GRACE_SECONDS 5 #define SHUTDOWN_GRACE_SECONDS 10 @@ -125,6 +126,12 @@ static void service_register(const void *buf, uint16_t len) goto failed; } + case HAL_SERVICE_ID_GATT: + if (!bt_gatt_register(hal_ipc, &adapter_bdaddr)) { + status = HAL_STATUS_FAILED; + goto failed; + } + break; default: DBG("service %u not supported", m->service_id); @@ -175,6 +182,9 @@ static void service_unregister(const void *buf, uint16_t len) case HAL_SERVICE_ID_HANDSFREE: bt_handsfree_unregister(); break; + case HAL_SERVICE_ID_GATT: + bt_gatt_unregister(); + break; default: /* This would indicate bug in HAL, as unregister should not be * called in init failed */ @@ -371,6 +381,9 @@ static void cleanup_services(void) case HAL_SERVICE_ID_HANDSFREE: bt_handsfree_unregister(); break; + case HAL_SERVICE_ID_GATT: + bt_gatt_unregister(); + break; } services[i] = false; -- 1.8.5.2 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] android/gatt: Add stubs for GATT commands handlers 2014-03-03 9:29 [PATCH 1/2] android/gatt: Add initial files Grzegorz Kolodziejczyk @ 2014-03-03 9:29 ` Grzegorz Kolodziejczyk 2014-03-03 14:41 ` Szymon Janc 2014-03-03 14:39 ` [PATCH 1/2] android/gatt: Add initial files Szymon Janc 1 sibling, 1 reply; 4+ messages in thread From: Grzegorz Kolodziejczyk @ 2014-03-03 9:29 UTC (permalink / raw) To: linux-bluetooth Add empty handlers for GATT IPC commands. --- android/gatt.c | 414 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 413 insertions(+), 1 deletion(-) diff --git a/android/gatt.c b/android/gatt.c index f577446..7a01d15 100644 --- a/android/gatt.c +++ b/android/gatt.c @@ -28,17 +28,429 @@ #include <stdbool.h> #include <stdlib.h> #include <stdint.h> +#include <glib.h> #include "ipc.h" #include "lib/bluetooth.h" #include "gatt.h" +#include "src/log.h" +#include "hal-msg.h" + +static struct ipc *hal_ipc = NULL; +static bdaddr_t adapter_addr; + +static void handle_client_register(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, HAL_OP_GATT_CLIENT_REGISTER, + HAL_STATUS_FAILED); +} + +static void handle_client_unregister(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_CLIENT_UNREGISTER, HAL_STATUS_FAILED); +} + +static void handle_client_scan(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, HAL_OP_GATT_CLIENT_SCAN, + HAL_STATUS_FAILED); +} + +static void handle_client_connect(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, HAL_OP_GATT_CLIENT_CONNECT, + HAL_STATUS_FAILED); +} + +static void handle_client_disconnect(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_CLIENT_DISCONNECT, HAL_STATUS_FAILED); +} + +static void handle_client_listen(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, HAL_OP_GATT_CLIENT_LISTEN, + HAL_STATUS_FAILED); +} + +static void handle_client_refresh(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, HAL_OP_GATT_CLIENT_REFRESH, + HAL_STATUS_FAILED); +} + +static void handle_client_search_service(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_CLIENT_SEARCH_SERVICE, HAL_STATUS_FAILED); +} + +static void handle_client_get_included_service(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_CLIENT_GET_INCLUDED_SERVICE, + HAL_STATUS_FAILED); +} + +static void handle_client_get_characteristic(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_CLIENT_GET_CHARACTERISTIC, + HAL_STATUS_FAILED); +} + +static void handle_client_get_descriptor(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_CLIENT_GET_DESCRIPTOR, HAL_STATUS_FAILED); +} + +static void handle_client_read_characteristic(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_CLIENT_READ_CHARACTERISTIC, + HAL_STATUS_FAILED); +} + +static void handle_client_write_characteristic(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_CLIENT_WRITE_CHARACTERISTIC, + HAL_STATUS_FAILED); +} + +static void handle_client_read_descriptor(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_CLIENT_READ_DESCRIPTOR, HAL_STATUS_FAILED); +} + +static void handle_client_write_descriptor(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_CLIENT_WRITE_DESCRIPTOR, HAL_STATUS_FAILED); +} + +static void handle_client_execute_write(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_CLIENT_EXECUTE_WRITE, HAL_STATUS_FAILED); +} + +static void handle_client_register_for_notification(const void *buf, + uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_CLIENT_REGISTER_FOR_NOTIFICATION, + HAL_STATUS_FAILED); +} + +static void handle_client_deregister_for_notification(const void *buf, + uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_CLIENT_DEREGISTER_FOR_NOTIFICATION, + HAL_STATUS_FAILED); +} + +static void handle_client_read_remote_rssi(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_CLIENT_READ_REMOTE_RSSI, HAL_STATUS_FAILED); +} + +static void handle_client_get_device_type(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_CLIENT_GET_DEVICE_TYPE, HAL_STATUS_FAILED); +} + +static void handle_client_set_adv_data(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_CLIENT_SET_ADV_DATA, HAL_STATUS_FAILED); +} + +static void handle_client_test_command(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_CLIENT_TEST_COMMAND, HAL_STATUS_FAILED); +} + +static void handle_server_register(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, HAL_OP_GATT_SERVER_REGISTER, + HAL_STATUS_FAILED); +} + +static void handle_server_unregister(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_SERVER_UNREGISTER, HAL_STATUS_FAILED); +} + +static void handle_server_connect(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, HAL_OP_GATT_SERVER_CONNECT, + HAL_STATUS_FAILED); +} + +static void handle_server_disconnect(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_SERVER_DISCONNECT, HAL_STATUS_FAILED); +} + +static void handle_server_add_service(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_SERVER_ADD_SERVICE, HAL_STATUS_FAILED); +} + +static void handle_server_add_included_service(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_SERVER_ADD_INC_SERVICE, HAL_STATUS_FAILED); +} + +static void handle_server_add_characteristic(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_SERVER_ADD_CHARACTERISTIC, + HAL_STATUS_FAILED); +} + +static void handle_server_add_descriptor(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_SERVER_ADD_DESCRIPTOR, HAL_STATUS_FAILED); +} + +static void handle_server_start_service(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_SERVER_START_SERVICE, HAL_STATUS_FAILED); +} + +static void handle_server_stop_service(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_SERVER_STOP_SERVICE, HAL_STATUS_FAILED); +} + +static void handle_server_delete_service(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_SERVER_DELETE_SERVICE, HAL_STATUS_FAILED); +} + +static void handle_server_send_indication(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_SERVER_SEND_INDICATION, HAL_STATUS_FAILED); +} + +static void handle_server_send_response(const void *buf, uint16_t len) +{ + DBG(""); + + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, + HAL_OP_GATT_SERVER_SEND_RESPONSE, HAL_STATUS_FAILED); +} + +static const struct ipc_handler cmd_handlers[] = { + /* HAL_OP_GATT_CLIENT_REGISTER */ + {handle_client_register, false, + sizeof(struct hal_cmd_gatt_client_register)}, + /* HAL_OP_GATT_CLIENT_UNREGISTER */ + {handle_client_unregister, false, + sizeof(struct hal_cmd_gatt_client_unregister)}, + /* HAL_OP_GATT_CLIENT_SCAN */ + {handle_client_scan, false, + sizeof(struct hal_cmd_gatt_client_scan)}, + /* HAL_OP_GATT_CLIENT_CONNECT */ + {handle_client_connect, false, + sizeof(struct hal_cmd_gatt_client_connect)}, + /* HAL_OP_GATT_CLIENT_DISCONNECT */ + {handle_client_disconnect, false, + sizeof(struct hal_cmd_gatt_client_disconnect)}, + /* HAL_OP_GATT_CLIENT_LISTEN */ + {handle_client_listen, false, + sizeof(struct hal_cmd_gatt_client_listen)}, + /* HAL_OP_GATT_CLIENT_REFRESH */ + {handle_client_refresh, false, + sizeof(struct hal_cmd_gatt_client_refresh)}, + /* HAL_OP_GATT_CLIENT_SEARCH_SERVICE */ + {handle_client_search_service, true, + sizeof(struct hal_cmd_gatt_client_search_service)}, + /* HAL_OP_GATT_CLIENT_GET_INCLUDED_SERVICE */ + {handle_client_get_included_service, true, + sizeof(struct hal_cmd_gatt_client_get_included_service)}, + /* HAL_OP_GATT_CLIENT_GET_CHARACTERISTIC */ + {handle_client_get_characteristic, true, + sizeof(struct hal_cmd_gatt_client_get_characteristic)}, + /* HAL_OP_GATT_CLIENT_GET_DESCRIPTOR */ + {handle_client_get_descriptor, true, + sizeof(struct hal_cmd_gatt_client_get_descriptor)}, + /* HAL_OP_GATT_CLIENT_READ_CHARACTERISTIC */ + {handle_client_read_characteristic, false, + sizeof(struct hal_cmd_gatt_client_read_characteristic)}, + /* HAL_OP_GATT_CLIENT_WRITE_CHARACTERISTIC */ + {handle_client_write_characteristic, true, + sizeof(struct hal_cmd_gatt_client_write_characteristic)}, + /* HAL_OP_GATT_CLIENT_READ_DESCRIPTOR */ + {handle_client_read_descriptor, false, + sizeof(struct hal_cmd_gatt_client_read_descriptor)}, + /* HAL_OP_GATT_CLIENT_WRITE_DESCRIPTOR */ + {handle_client_write_descriptor, true, + sizeof(struct hal_cmd_gatt_client_write_descriptor)}, + /* HAL_OP_GATT_CLIENT_EXECUTE_WRITE */ + {handle_client_execute_write, false, + sizeof(struct hal_cmd_gatt_client_execute_write)}, + /* HAL_OP_GATT_CLIENT_REGISTER_FOR_NOTIFICATION */ + {handle_client_register_for_notification, false, + sizeof(struct hal_cmd_gatt_client_register_for_notification)}, + /* HAL_OP_GATT_CLIENT_DEREGISTER_FOR_NOTIFICATION */ + {handle_client_deregister_for_notification, false, + sizeof(struct hal_cmd_gatt_client_deregister_for_notification)}, + /* HAL_OP_GATT_CLIENT_READ_REMOTE_RSSI */ + {handle_client_read_remote_rssi, false, + sizeof(struct hal_cmd_gatt_client_read_remote_rssi)}, + /* HAL_OP_GATT_CLIENT_GET_DEVICE_TYPE */ + {handle_client_get_device_type, false, + sizeof(struct hal_cmd_gatt_client_get_device_type)}, + /* HAL_OP_GATT_CLIENT_SET_ADV_DATA */ + {handle_client_set_adv_data, true, + sizeof(struct hal_cmd_gatt_client_set_adv_data)}, + /* HAL_OP_GATT_CLIENT_TEST_COMMAND */ + {handle_client_test_command, false, + sizeof(struct hal_cmd_gatt_client_test_command)}, + /* HAL_OP_GATT_SERVER_REGISTER */ + {handle_server_register, false, + sizeof(struct hal_cmd_gatt_server_register)}, + /* HAL_OP_GATT_SERVER_UNREGISTER */ + {handle_server_unregister, false, + sizeof(struct hal_cmd_gatt_server_unregister)}, + /* HAL_OP_GATT_SERVER_CONNECT */ + {handle_server_connect, false, + sizeof(struct hal_cmd_gatt_server_connect)}, + /* HAL_OP_GATT_SERVER_DISCONNECT */ + {handle_server_disconnect, false, + sizeof(struct hal_cmd_gatt_server_disconnect)}, + /* HAL_OP_GATT_SERVER_ADD_SERVICE */ + {handle_server_add_service, false, + sizeof(struct hal_cmd_gatt_server_add_service)}, + /* HAL_OP_GATT_SERVER_ADD_INC_SERVICE */ + {handle_server_add_included_service, false, + sizeof(struct hal_cmd_gatt_server_add_inc_service)}, + /* HAL_OP_GATT_SERVER_ADD_CHARACTERISTIC */ + {handle_server_add_characteristic, false, + sizeof(struct hal_cmd_gatt_server_add_characteristic)}, + /* HAL_OP_GATT_SERVER_ADD_DESCRIPTOR */ + {handle_server_add_descriptor, false, + sizeof(struct hal_cmd_gatt_server_add_descriptor)}, + /* HAL_OP_GATT_SERVER_START_SERVICE */ + {handle_server_start_service, false, + sizeof(struct hal_cmd_gatt_server_start_service)}, + /* HAL_OP_GATT_SERVER_STOP_SERVICE */ + {handle_server_stop_service, false, + sizeof(struct hal_cmd_gatt_server_stop_service)}, + /* HAL_OP_GATT_SERVER_DELETE_SERVICE */ + {handle_server_delete_service, false, + sizeof(struct hal_cmd_gatt_server_delete_service)}, + /* HAL_OP_GATT_SERVER_SEND_INDICATION */ + {handle_server_send_indication, true, + sizeof(struct hal_cmd_gatt_server_send_indication)}, + /* HAL_OP_GATT_SERVER_SEND_RESPONSE */ + {handle_server_send_response, true, + sizeof(struct hal_cmd_gatt_server_send_response)}, +}; bool bt_gatt_register(struct ipc *ipc, const bdaddr_t *addr) { - return false; + DBG(""); + + bacpy(&adapter_addr, addr); + + ipc_register(hal_ipc, HAL_SERVICE_ID_GATT, cmd_handlers, + G_N_ELEMENTS(cmd_handlers)); + + return true; } void bt_gatt_unregister(void) { + DBG(""); + ipc_unregister(hal_ipc, HAL_SERVICE_ID_GATT); } -- 1.8.5.2 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 2/2] android/gatt: Add stubs for GATT commands handlers 2014-03-03 9:29 ` [PATCH 2/2] android/gatt: Add stubs for GATT commands handlers Grzegorz Kolodziejczyk @ 2014-03-03 14:41 ` Szymon Janc 0 siblings, 0 replies; 4+ messages in thread From: Szymon Janc @ 2014-03-03 14:41 UTC (permalink / raw) To: Grzegorz Kolodziejczyk; +Cc: linux-bluetooth Hi Grzegorz, On Monday 03 of March 2014 10:29:17 Grzegorz Kolodziejczyk wrote: > Add empty handlers for GATT IPC commands. > --- > android/gatt.c | 414 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 413 insertions(+), 1 deletion(-) > > diff --git a/android/gatt.c b/android/gatt.c > index f577446..7a01d15 100644 > --- a/android/gatt.c > +++ b/android/gatt.c > @@ -28,17 +28,429 @@ > #include <stdbool.h> > #include <stdlib.h> > #include <stdint.h> > +#include <glib.h> > > #include "ipc.h" > #include "lib/bluetooth.h" > #include "gatt.h" > +#include "src/log.h" > +#include "hal-msg.h" > + > +static struct ipc *hal_ipc = NULL; > +static bdaddr_t adapter_addr; > + > +static void handle_client_register(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, HAL_OP_GATT_CLIENT_REGISTER, > + HAL_STATUS_FAILED); > +} > + > +static void handle_client_unregister(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_CLIENT_UNREGISTER, HAL_STATUS_FAILED); > +} > + > +static void handle_client_scan(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, HAL_OP_GATT_CLIENT_SCAN, > + HAL_STATUS_FAILED); > +} > + > +static void handle_client_connect(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, HAL_OP_GATT_CLIENT_CONNECT, > + HAL_STATUS_FAILED); > +} > + > +static void handle_client_disconnect(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_CLIENT_DISCONNECT, HAL_STATUS_FAILED); > +} > + > +static void handle_client_listen(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, HAL_OP_GATT_CLIENT_LISTEN, > + HAL_STATUS_FAILED); > +} > + > +static void handle_client_refresh(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, HAL_OP_GATT_CLIENT_REFRESH, > + HAL_STATUS_FAILED); > +} > + > +static void handle_client_search_service(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_CLIENT_SEARCH_SERVICE, HAL_STATUS_FAILED); > +} > + > +static void handle_client_get_included_service(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_CLIENT_GET_INCLUDED_SERVICE, > + HAL_STATUS_FAILED); > +} > + > +static void handle_client_get_characteristic(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_CLIENT_GET_CHARACTERISTIC, > + HAL_STATUS_FAILED); > +} > + > +static void handle_client_get_descriptor(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_CLIENT_GET_DESCRIPTOR, HAL_STATUS_FAILED); > +} > + > +static void handle_client_read_characteristic(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_CLIENT_READ_CHARACTERISTIC, > + HAL_STATUS_FAILED); > +} > + > +static void handle_client_write_characteristic(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_CLIENT_WRITE_CHARACTERISTIC, > + HAL_STATUS_FAILED); > +} > + > +static void handle_client_read_descriptor(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_CLIENT_READ_DESCRIPTOR, HAL_STATUS_FAILED); > +} > + > +static void handle_client_write_descriptor(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_CLIENT_WRITE_DESCRIPTOR, HAL_STATUS_FAILED); > +} > + > +static void handle_client_execute_write(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_CLIENT_EXECUTE_WRITE, HAL_STATUS_FAILED); > +} > + > +static void handle_client_register_for_notification(const void *buf, > + uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_CLIENT_REGISTER_FOR_NOTIFICATION, > + HAL_STATUS_FAILED); > +} > + > +static void handle_client_deregister_for_notification(const void *buf, > + uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_CLIENT_DEREGISTER_FOR_NOTIFICATION, > + HAL_STATUS_FAILED); > +} > + > +static void handle_client_read_remote_rssi(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_CLIENT_READ_REMOTE_RSSI, HAL_STATUS_FAILED); > +} > + > +static void handle_client_get_device_type(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_CLIENT_GET_DEVICE_TYPE, HAL_STATUS_FAILED); > +} > + > +static void handle_client_set_adv_data(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_CLIENT_SET_ADV_DATA, HAL_STATUS_FAILED); > +} > + > +static void handle_client_test_command(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_CLIENT_TEST_COMMAND, HAL_STATUS_FAILED); > +} > + > +static void handle_server_register(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, HAL_OP_GATT_SERVER_REGISTER, > + HAL_STATUS_FAILED); > +} > + > +static void handle_server_unregister(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_SERVER_UNREGISTER, HAL_STATUS_FAILED); > +} > + > +static void handle_server_connect(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, HAL_OP_GATT_SERVER_CONNECT, > + HAL_STATUS_FAILED); > +} > + > +static void handle_server_disconnect(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_SERVER_DISCONNECT, HAL_STATUS_FAILED); > +} > + > +static void handle_server_add_service(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_SERVER_ADD_SERVICE, HAL_STATUS_FAILED); > +} > + > +static void handle_server_add_included_service(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_SERVER_ADD_INC_SERVICE, HAL_STATUS_FAILED); > +} > + > +static void handle_server_add_characteristic(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_SERVER_ADD_CHARACTERISTIC, > + HAL_STATUS_FAILED); > +} > + > +static void handle_server_add_descriptor(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_SERVER_ADD_DESCRIPTOR, HAL_STATUS_FAILED); > +} > + > +static void handle_server_start_service(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_SERVER_START_SERVICE, HAL_STATUS_FAILED); > +} > + > +static void handle_server_stop_service(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_SERVER_STOP_SERVICE, HAL_STATUS_FAILED); > +} > + > +static void handle_server_delete_service(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_SERVER_DELETE_SERVICE, HAL_STATUS_FAILED); > +} > + > +static void handle_server_send_indication(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_SERVER_SEND_INDICATION, HAL_STATUS_FAILED); > +} > + > +static void handle_server_send_response(const void *buf, uint16_t len) > +{ > + DBG(""); > + > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT, > + HAL_OP_GATT_SERVER_SEND_RESPONSE, HAL_STATUS_FAILED); > +} > + > +static const struct ipc_handler cmd_handlers[] = { > + /* HAL_OP_GATT_CLIENT_REGISTER */ > + {handle_client_register, false, > + sizeof(struct hal_cmd_gatt_client_register)}, > + /* HAL_OP_GATT_CLIENT_UNREGISTER */ > + {handle_client_unregister, false, > + sizeof(struct hal_cmd_gatt_client_unregister)}, > + /* HAL_OP_GATT_CLIENT_SCAN */ > + {handle_client_scan, false, > + sizeof(struct hal_cmd_gatt_client_scan)}, > + /* HAL_OP_GATT_CLIENT_CONNECT */ > + {handle_client_connect, false, > + sizeof(struct hal_cmd_gatt_client_connect)}, > + /* HAL_OP_GATT_CLIENT_DISCONNECT */ > + {handle_client_disconnect, false, > + sizeof(struct hal_cmd_gatt_client_disconnect)}, > + /* HAL_OP_GATT_CLIENT_LISTEN */ > + {handle_client_listen, false, > + sizeof(struct hal_cmd_gatt_client_listen)}, > + /* HAL_OP_GATT_CLIENT_REFRESH */ > + {handle_client_refresh, false, > + sizeof(struct hal_cmd_gatt_client_refresh)}, > + /* HAL_OP_GATT_CLIENT_SEARCH_SERVICE */ > + {handle_client_search_service, true, > + sizeof(struct hal_cmd_gatt_client_search_service)}, > + /* HAL_OP_GATT_CLIENT_GET_INCLUDED_SERVICE */ > + {handle_client_get_included_service, true, > + sizeof(struct hal_cmd_gatt_client_get_included_service)}, > + /* HAL_OP_GATT_CLIENT_GET_CHARACTERISTIC */ > + {handle_client_get_characteristic, true, > + sizeof(struct hal_cmd_gatt_client_get_characteristic)}, > + /* HAL_OP_GATT_CLIENT_GET_DESCRIPTOR */ > + {handle_client_get_descriptor, true, > + sizeof(struct hal_cmd_gatt_client_get_descriptor)}, > + /* HAL_OP_GATT_CLIENT_READ_CHARACTERISTIC */ > + {handle_client_read_characteristic, false, > + sizeof(struct hal_cmd_gatt_client_read_characteristic)}, > + /* HAL_OP_GATT_CLIENT_WRITE_CHARACTERISTIC */ > + {handle_client_write_characteristic, true, > + sizeof(struct hal_cmd_gatt_client_write_characteristic)}, > + /* HAL_OP_GATT_CLIENT_READ_DESCRIPTOR */ > + {handle_client_read_descriptor, false, > + sizeof(struct hal_cmd_gatt_client_read_descriptor)}, > + /* HAL_OP_GATT_CLIENT_WRITE_DESCRIPTOR */ > + {handle_client_write_descriptor, true, > + sizeof(struct hal_cmd_gatt_client_write_descriptor)}, > + /* HAL_OP_GATT_CLIENT_EXECUTE_WRITE */ > + {handle_client_execute_write, false, > + sizeof(struct hal_cmd_gatt_client_execute_write)}, > + /* HAL_OP_GATT_CLIENT_REGISTER_FOR_NOTIFICATION */ > + {handle_client_register_for_notification, false, > + sizeof(struct hal_cmd_gatt_client_register_for_notification)}, > + /* HAL_OP_GATT_CLIENT_DEREGISTER_FOR_NOTIFICATION */ > + {handle_client_deregister_for_notification, false, > + sizeof(struct hal_cmd_gatt_client_deregister_for_notification)}, > + /* HAL_OP_GATT_CLIENT_READ_REMOTE_RSSI */ > + {handle_client_read_remote_rssi, false, > + sizeof(struct hal_cmd_gatt_client_read_remote_rssi)}, > + /* HAL_OP_GATT_CLIENT_GET_DEVICE_TYPE */ > + {handle_client_get_device_type, false, > + sizeof(struct hal_cmd_gatt_client_get_device_type)}, > + /* HAL_OP_GATT_CLIENT_SET_ADV_DATA */ > + {handle_client_set_adv_data, true, > + sizeof(struct hal_cmd_gatt_client_set_adv_data)}, > + /* HAL_OP_GATT_CLIENT_TEST_COMMAND */ > + {handle_client_test_command, false, > + sizeof(struct hal_cmd_gatt_client_test_command)}, > + /* HAL_OP_GATT_SERVER_REGISTER */ > + {handle_server_register, false, > + sizeof(struct hal_cmd_gatt_server_register)}, > + /* HAL_OP_GATT_SERVER_UNREGISTER */ > + {handle_server_unregister, false, > + sizeof(struct hal_cmd_gatt_server_unregister)}, > + /* HAL_OP_GATT_SERVER_CONNECT */ > + {handle_server_connect, false, > + sizeof(struct hal_cmd_gatt_server_connect)}, > + /* HAL_OP_GATT_SERVER_DISCONNECT */ > + {handle_server_disconnect, false, > + sizeof(struct hal_cmd_gatt_server_disconnect)}, > + /* HAL_OP_GATT_SERVER_ADD_SERVICE */ > + {handle_server_add_service, false, > + sizeof(struct hal_cmd_gatt_server_add_service)}, > + /* HAL_OP_GATT_SERVER_ADD_INC_SERVICE */ > + {handle_server_add_included_service, false, > + sizeof(struct hal_cmd_gatt_server_add_inc_service)}, > + /* HAL_OP_GATT_SERVER_ADD_CHARACTERISTIC */ > + {handle_server_add_characteristic, false, > + sizeof(struct hal_cmd_gatt_server_add_characteristic)}, > + /* HAL_OP_GATT_SERVER_ADD_DESCRIPTOR */ > + {handle_server_add_descriptor, false, > + sizeof(struct hal_cmd_gatt_server_add_descriptor)}, > + /* HAL_OP_GATT_SERVER_START_SERVICE */ > + {handle_server_start_service, false, > + sizeof(struct hal_cmd_gatt_server_start_service)}, > + /* HAL_OP_GATT_SERVER_STOP_SERVICE */ > + {handle_server_stop_service, false, > + sizeof(struct hal_cmd_gatt_server_stop_service)}, > + /* HAL_OP_GATT_SERVER_DELETE_SERVICE */ > + {handle_server_delete_service, false, > + sizeof(struct hal_cmd_gatt_server_delete_service)}, > + /* HAL_OP_GATT_SERVER_SEND_INDICATION */ > + {handle_server_send_indication, true, > + sizeof(struct hal_cmd_gatt_server_send_indication)}, > + /* HAL_OP_GATT_SERVER_SEND_RESPONSE */ > + {handle_server_send_response, true, > + sizeof(struct hal_cmd_gatt_server_send_response)}, > +}; > > bool bt_gatt_register(struct ipc *ipc, const bdaddr_t *addr) > { > - return false; > + DBG(""); > + > + bacpy(&adapter_addr, addr); > + This seems to be missing: hal_ipc = hal; > + ipc_register(hal_ipc, HAL_SERVICE_ID_GATT, cmd_handlers, > + G_N_ELEMENTS(cmd_handlers)); > + > + return true; > } > > void bt_gatt_unregister(void) > { > + DBG(""); > > + ipc_unregister(hal_ipc, HAL_SERVICE_ID_GATT); > } > -- Best regards, Szymon Janc ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 1/2] android/gatt: Add initial files 2014-03-03 9:29 [PATCH 1/2] android/gatt: Add initial files Grzegorz Kolodziejczyk 2014-03-03 9:29 ` [PATCH 2/2] android/gatt: Add stubs for GATT commands handlers Grzegorz Kolodziejczyk @ 2014-03-03 14:39 ` Szymon Janc 1 sibling, 0 replies; 4+ messages in thread From: Szymon Janc @ 2014-03-03 14:39 UTC (permalink / raw) To: Grzegorz Kolodziejczyk; +Cc: linux-bluetooth Hi Grzegorz, On Monday 03 of March 2014 10:29:16 Grzegorz Kolodziejczyk wrote: > This adds initial daemon code for GATT profile. > --- > android/Android.mk | 1 + > android/Makefile.am | 1 + > android/gatt.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ > android/gatt.h | 25 +++++++++++++++++++++++++ > android/main.c | 13 +++++++++++++ > 5 files changed, 84 insertions(+) > create mode 100644 android/gatt.c > create mode 100644 android/gatt.h > > diff --git a/android/Android.mk b/android/Android.mk > index 56b86ba..429a4b8 100644 > --- a/android/Android.mk > +++ b/android/Android.mk > @@ -42,6 +42,7 @@ LOCAL_SRC_FILES := \ > bluez/android/avrcp-lib.c \ > bluez/android/pan.c \ > bluez/android/handsfree.c \ > + bluez/android/gatt.c > bluez/src/log.c \ > bluez/src/shared/mgmt.c \ > bluez/src/shared/util.c \ > diff --git a/android/Makefile.am b/android/Makefile.am > index 31f905c..6be6cda 100644 > --- a/android/Makefile.am > +++ b/android/Makefile.am > @@ -40,6 +40,7 @@ android_bluetoothd_SOURCES = android/main.c \ > android/socket.h android/socket.c \ > android/pan.h android/pan.c \ > android/handsfree.h android/handsfree.c \ > + android/gatt.h android/gatt.c \ > btio/btio.h btio/btio.c \ > src/sdp-client.h src/sdp-client.c \ > profiles/network/bnep.h profiles/network/bnep.c > diff --git a/android/gatt.c b/android/gatt.c > new file mode 100644 > index 0000000..f577446 > --- /dev/null > +++ b/android/gatt.c > @@ -0,0 +1,44 @@ > +/* > + * > + * BlueZ - Bluetooth protocol stack for Linux > + * > + * Copyright (C) 2014 Intel Corporation. All rights reserved. > + * > + * > + * This library is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License as published by the Free Software Foundation; either > + * version 2.1 of the License, or (at your option) any later version. > + * > + * This library 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 > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with this library; 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 <stdbool.h> > +#include <stdlib.h> > +#include <stdint.h> > + > +#include "ipc.h" > +#include "lib/bluetooth.h" > +#include "gatt.h" > + > +bool bt_gatt_register(struct ipc *ipc, const bdaddr_t *addr) > +{ > + return false; Indentation issue here. > +} > + > +void bt_gatt_unregister(void) > +{ > + > +} > diff --git a/android/gatt.h b/android/gatt.h > new file mode 100644 > index 0000000..d4392d9 > --- /dev/null > +++ b/android/gatt.h > @@ -0,0 +1,25 @@ > +/* > + * > + * BlueZ - Bluetooth protocol stack for Linux > + * > + * Copyright (C) 2014 Intel Corporation. All rights reserved. > + * > + * > + * This library is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License as published by the Free Software Foundation; either > + * version 2.1 of the License, or (at your option) any later version. > + * > + * This library 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 > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with this library; if not, write to the Free Software > + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > + * > + */ > + > +bool bt_gatt_register(struct ipc *ipc, const bdaddr_t *addr); > +void bt_gatt_unregister(void); > diff --git a/android/main.c b/android/main.c > index a6742ef..7b5ca9c 100644 > --- a/android/main.c > +++ b/android/main.c > @@ -58,6 +58,7 @@ > #include "pan.h" > #include "avrcp.h" > #include "handsfree.h" > +#include "gatt.h" > > #define STARTUP_GRACE_SECONDS 5 > #define SHUTDOWN_GRACE_SECONDS 10 > @@ -125,6 +126,12 @@ static void service_register(const void *buf, uint16_t len) > goto failed; > } > Break is missing here. > + case HAL_SERVICE_ID_GATT: > + if (!bt_gatt_register(hal_ipc, &adapter_bdaddr)) { > + status = HAL_STATUS_FAILED; > + goto failed; > + } > + > break; > default: > DBG("service %u not supported", m->service_id); > @@ -175,6 +182,9 @@ static void service_unregister(const void *buf, uint16_t len) > case HAL_SERVICE_ID_HANDSFREE: > bt_handsfree_unregister(); > break; > + case HAL_SERVICE_ID_GATT: > + bt_gatt_unregister(); > + break; > default: > /* This would indicate bug in HAL, as unregister should not be > * called in init failed */ > @@ -371,6 +381,9 @@ static void cleanup_services(void) > case HAL_SERVICE_ID_HANDSFREE: > bt_handsfree_unregister(); > break; > + case HAL_SERVICE_ID_GATT: > + bt_gatt_unregister(); > + break; > } > > services[i] = false; > -- Best regards, Szymon Janc ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2014-03-03 14:41 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-03-03 9:29 [PATCH 1/2] android/gatt: Add initial files Grzegorz Kolodziejczyk 2014-03-03 9:29 ` [PATCH 2/2] android/gatt: Add stubs for GATT commands handlers Grzegorz Kolodziejczyk 2014-03-03 14:41 ` Szymon Janc 2014-03-03 14:39 ` [PATCH 1/2] android/gatt: Add initial files Szymon Janc
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).