All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/8] android/gatt: Server command handlers
@ 2014-04-11 13:15 Jakub Tyszkowski
  2014-04-11 13:15 ` [PATCH 1/8] android/gatt: Add find_server_by_id helper Jakub Tyszkowski
                   ` (8 more replies)
  0 siblings, 9 replies; 10+ messages in thread
From: Jakub Tyszkowski @ 2014-04-11 13:15 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Jakub Tyszkowski

This adds stubs for handling GATT Server's attribute database operations.
If attribute database API is accepted in proposed state, we will just need to
trigger db transactions and send proper notifications.

Jakub Tyszkowski (8):
  android/gatt: Add find_server_by_id helper
  android/gatt: Add Server's add_service stub
  android/gatt: Add Server's add_included_service stub
  android/gatt: Add Server's add_characteristic stub
  android/gatt: Add Server's add_descriptor stub
  android/gatt: Add Server's start_service stub
  android/gatt: Add Server's stop_service stub
  android/gatt: Add Server's delete_service stub

 android/gatt.c | 174 +++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 164 insertions(+), 10 deletions(-)

--
1.9.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 1/8] android/gatt: Add find_server_by_id helper
  2014-04-11 13:15 [PATCH 0/8] android/gatt: Server command handlers Jakub Tyszkowski
@ 2014-04-11 13:15 ` Jakub Tyszkowski
  2014-04-11 13:15 ` [PATCH 2/8] android/gatt: Add Server's add_service stub Jakub Tyszkowski
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Jakub Tyszkowski @ 2014-04-11 13:15 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Jakub Tyszkowski

This adds helper function analogously to find_client_by_id.
---
 android/gatt.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/android/gatt.c b/android/gatt.c
index 13ae340..7b7b399 100644
--- a/android/gatt.c
+++ b/android/gatt.c
@@ -256,6 +256,11 @@ static struct gatt_client *find_client_by_id(int32_t id)
 	return queue_find(gatt_clients, match_client_by_id, INT_TO_PTR(id));
 }
 
+static struct gatt_server *find_server_by_id(int32_t id)
+{
+	return queue_find(gatt_servers, match_server_by_id, INT_TO_PTR(id));
+}
+
 static bool match_by_value(const void *data, const void *user_data)
 {
 	return data == user_data;
@@ -2709,8 +2714,8 @@ static void handle_server_unregister(const void *buf, uint16_t len)
 
 	DBG("");
 
-	server = queue_remove_if(gatt_servers, match_server_by_id,
-						INT_TO_PTR(cmd->server_if));
+	server = find_server_by_id(cmd->server_if);
+
 	if (!server) {
 		error("gatt: server_if=%d not found", cmd->server_if);
 		status = HAL_STATUS_FAILED;
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/8] android/gatt: Add Server's add_service stub
  2014-04-11 13:15 [PATCH 0/8] android/gatt: Server command handlers Jakub Tyszkowski
  2014-04-11 13:15 ` [PATCH 1/8] android/gatt: Add find_server_by_id helper Jakub Tyszkowski
@ 2014-04-11 13:15 ` Jakub Tyszkowski
  2014-04-11 13:15 ` [PATCH 3/8] android/gatt: Add Server's add_included_service stub Jakub Tyszkowski
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Jakub Tyszkowski @ 2014-04-11 13:15 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Jakub Tyszkowski

---
 android/gatt.c | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/android/gatt.c b/android/gatt.c
index 7b7b399..bc41f72 100644
--- a/android/gatt.c
+++ b/android/gatt.c
@@ -2748,10 +2748,34 @@ static void handle_server_disconnect(const void *buf, uint16_t len)
 
 static void handle_server_add_service(const void *buf, uint16_t len)
 {
+	const struct hal_cmd_gatt_server_add_service *cmd = buf;
+	char uuidstr[MAX_LEN_UUID_STR];
+	struct gatt_server *server;
+	struct element_id srvc_id;
+	uint8_t status;
+
 	DBG("");
 
+	server = find_server_by_id(cmd->server_if);
+
+	if (!server) {
+		error("gatt: server_if=%d not found", cmd->server_if);
+		status = HAL_STATUS_FAILED;
+		goto failed;
+	}
+
+	hal_srvc_id_to_element_id(&cmd->srvc_id, &srvc_id);
+	bt_uuid_to_string(&srvc_id.uuid, uuidstr, MAX_LEN_UUID_STR);
+
+	/* TODO: execute attribute database transaction */
+	DBG("Add primary service: server: %d, srvc_uuid: %s, num_handles: %d",
+				cmd->server_if, uuidstr, cmd->num_handles);
+
+	status = HAL_STATUS_SUCCESS;
+
+failed:
 	ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT,
-			HAL_OP_GATT_SERVER_ADD_SERVICE, HAL_STATUS_FAILED);
+					HAL_OP_GATT_SERVER_ADD_SERVICE, status);
 }
 
 static void handle_server_add_included_service(const void *buf, uint16_t len)
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 3/8] android/gatt: Add Server's add_included_service stub
  2014-04-11 13:15 [PATCH 0/8] android/gatt: Server command handlers Jakub Tyszkowski
  2014-04-11 13:15 ` [PATCH 1/8] android/gatt: Add find_server_by_id helper Jakub Tyszkowski
  2014-04-11 13:15 ` [PATCH 2/8] android/gatt: Add Server's add_service stub Jakub Tyszkowski
@ 2014-04-11 13:15 ` Jakub Tyszkowski
  2014-04-11 13:15 ` [PATCH 4/8] android/gatt: Add Server's add_characteristic stub Jakub Tyszkowski
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Jakub Tyszkowski @ 2014-04-11 13:15 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Jakub Tyszkowski

---
 android/gatt.c | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/android/gatt.c b/android/gatt.c
index bc41f72..7c81ff2 100644
--- a/android/gatt.c
+++ b/android/gatt.c
@@ -2780,10 +2780,29 @@ failed:
 
 static void handle_server_add_included_service(const void *buf, uint16_t len)
 {
+	const struct hal_cmd_gatt_server_add_inc_service *cmd = buf;
+	struct gatt_server *server;
+	uint8_t status;
+
 	DBG("");
 
+	server = find_server_by_id(cmd->server_if);
+
+	if (!server) {
+		error("gatt: server_if=%d not found", cmd->server_if);
+		status = HAL_STATUS_FAILED;
+		goto failed;
+	}
+
+	/* TODO: Add included service to attribute database */
+	DBG("Add included service: server: %d, srvc_hnd: %d, incl_hnd: %d",
+		cmd->server_if, cmd->service_handle, cmd->included_handle);
+
+	status = HAL_STATUS_SUCCESS;
+
+failed:
 	ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT,
-			HAL_OP_GATT_SERVER_ADD_INC_SERVICE, HAL_STATUS_FAILED);
+				HAL_OP_GATT_SERVER_ADD_INC_SERVICE, status);
 }
 
 static void handle_server_add_characteristic(const void *buf, uint16_t len)
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 4/8] android/gatt: Add Server's add_characteristic stub
  2014-04-11 13:15 [PATCH 0/8] android/gatt: Server command handlers Jakub Tyszkowski
                   ` (2 preceding siblings ...)
  2014-04-11 13:15 ` [PATCH 3/8] android/gatt: Add Server's add_included_service stub Jakub Tyszkowski
@ 2014-04-11 13:15 ` Jakub Tyszkowski
  2014-04-11 13:15 ` [PATCH 5/8] android/gatt: Add Server's add_descriptor stub Jakub Tyszkowski
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Jakub Tyszkowski @ 2014-04-11 13:15 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Jakub Tyszkowski

---
 android/gatt.c | 28 ++++++++++++++++++++++++++--
 1 file changed, 26 insertions(+), 2 deletions(-)

diff --git a/android/gatt.c b/android/gatt.c
index 7c81ff2..0757436 100644
--- a/android/gatt.c
+++ b/android/gatt.c
@@ -2807,11 +2807,35 @@ failed:
 
 static void handle_server_add_characteristic(const void *buf, uint16_t len)
 {
+	const struct hal_cmd_gatt_server_add_characteristic *cmd = buf;
+	char uuidstr[MAX_LEN_UUID_STR];
+	struct gatt_server *server;
+	bt_uuid_t char_uuid;
+	uint8_t status;
+
 	DBG("");
 
+	server = find_server_by_id(cmd->server_if);
+
+	if (!server) {
+		error("gatt: server_if=%d not found", cmd->server_if);
+		status = HAL_STATUS_FAILED;
+		goto failed;
+	}
+
+	android2uuid(cmd->uuid, &char_uuid);
+	bt_uuid_to_string(&char_uuid, uuidstr, MAX_LEN_UUID_STR);
+
+	/* TODO: Add characteristic to database */
+	DBG("Add char: server: %d, uuid: %s, srvc_hnd: %d, prop: %d, perm: %d",
+		cmd->server_if, uuidstr, cmd->service_handle, cmd->properties,
+		cmd->permissions);
+
+	status = HAL_STATUS_SUCCESS;
+
+failed:
 	ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT,
-					HAL_OP_GATT_SERVER_ADD_CHARACTERISTIC,
-					HAL_STATUS_FAILED);
+				HAL_OP_GATT_SERVER_ADD_CHARACTERISTIC, status);
 }
 
 static void handle_server_add_descriptor(const void *buf, uint16_t len)
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 5/8] android/gatt: Add Server's add_descriptor stub
  2014-04-11 13:15 [PATCH 0/8] android/gatt: Server command handlers Jakub Tyszkowski
                   ` (3 preceding siblings ...)
  2014-04-11 13:15 ` [PATCH 4/8] android/gatt: Add Server's add_characteristic stub Jakub Tyszkowski
@ 2014-04-11 13:15 ` Jakub Tyszkowski
  2014-04-11 13:15 ` [PATCH 6/8] android/gatt: Add Server's start_service stub Jakub Tyszkowski
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Jakub Tyszkowski @ 2014-04-11 13:15 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Jakub Tyszkowski

---
 android/gatt.c | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/android/gatt.c b/android/gatt.c
index 0757436..dd9fb42 100644
--- a/android/gatt.c
+++ b/android/gatt.c
@@ -2840,10 +2840,34 @@ failed:
 
 static void handle_server_add_descriptor(const void *buf, uint16_t len)
 {
+	const struct hal_cmd_gatt_server_add_descriptor *cmd = buf;
+	char uuidstr[MAX_LEN_UUID_STR];
+	struct gatt_server *server;
+	bt_uuid_t descr_uuid;
+	uint8_t status;
+
 	DBG("");
 
+	server = find_server_by_id(cmd->server_if);
+
+	if (!server) {
+		error("gatt: server_if=%d not found", cmd->server_if);
+		status = HAL_STATUS_FAILED;
+		goto failed;
+	}
+
+	android2uuid(cmd->uuid, &descr_uuid);
+	bt_uuid_to_string(&descr_uuid, uuidstr, MAX_LEN_UUID_STR);
+
+	/* TODO: Add descriptor to attribute database */
+	DBG("Add descriptor: server: %d, srvc_hnd: %d, uuid: %s, perm: %d",
+		cmd->server_if, cmd->service_handle, uuidstr, cmd->permissions);
+
+	status = HAL_STATUS_SUCCESS;
+
+failed:
 	ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT,
-			HAL_OP_GATT_SERVER_ADD_DESCRIPTOR, HAL_STATUS_FAILED);
+				HAL_OP_GATT_SERVER_ADD_DESCRIPTOR, status);
 }
 
 static void handle_server_start_service(const void *buf, uint16_t len)
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 6/8] android/gatt: Add Server's start_service stub
  2014-04-11 13:15 [PATCH 0/8] android/gatt: Server command handlers Jakub Tyszkowski
                   ` (4 preceding siblings ...)
  2014-04-11 13:15 ` [PATCH 5/8] android/gatt: Add Server's add_descriptor stub Jakub Tyszkowski
@ 2014-04-11 13:15 ` Jakub Tyszkowski
  2014-04-11 13:15 ` [PATCH 7/8] android/gatt: Add Server's stop_service stub Jakub Tyszkowski
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Jakub Tyszkowski @ 2014-04-11 13:15 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Jakub Tyszkowski

---
 android/gatt.c | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/android/gatt.c b/android/gatt.c
index dd9fb42..d227eca 100644
--- a/android/gatt.c
+++ b/android/gatt.c
@@ -2872,10 +2872,30 @@ failed:
 
 static void handle_server_start_service(const void *buf, uint16_t len)
 {
+	const struct hal_cmd_gatt_server_start_service *cmd = buf;
+	struct gatt_server *server;
+	uint8_t status;
+
 	DBG("");
 
+	server = find_server_by_id(cmd->server_if);
+
+	if (!server) {
+		error("gatt: server_if=%d not found", cmd->server_if);
+		status = HAL_STATUS_FAILED;
+		goto failed;
+	}
+
+	/* TODO: support BR/EDR (cmd->transport) */
+	/* TODO: activate service in attribute database */
+	DBG("Start service: server: %d, srvc_hnd: %d, transport_layer: %d",
+			cmd->server_if, cmd->service_handle, cmd->transport);
+
+	status = HAL_STATUS_SUCCESS;
+
+failed:
 	ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT,
-			HAL_OP_GATT_SERVER_START_SERVICE, HAL_STATUS_FAILED);
+				HAL_OP_GATT_SERVER_START_SERVICE, status);
 }
 
 static void handle_server_stop_service(const void *buf, uint16_t len)
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 7/8] android/gatt: Add Server's stop_service stub
  2014-04-11 13:15 [PATCH 0/8] android/gatt: Server command handlers Jakub Tyszkowski
                   ` (5 preceding siblings ...)
  2014-04-11 13:15 ` [PATCH 6/8] android/gatt: Add Server's start_service stub Jakub Tyszkowski
@ 2014-04-11 13:15 ` Jakub Tyszkowski
  2014-04-11 13:15 ` [PATCH 8/8] android/gatt: Add Server's delete_service stub Jakub Tyszkowski
  2014-04-16  8:25 ` [PATCH 0/8] android/gatt: Server command handlers Szymon Janc
  8 siblings, 0 replies; 10+ messages in thread
From: Jakub Tyszkowski @ 2014-04-11 13:15 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Jakub Tyszkowski

---
 android/gatt.c | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/android/gatt.c b/android/gatt.c
index d227eca..150bccb 100644
--- a/android/gatt.c
+++ b/android/gatt.c
@@ -2900,10 +2900,29 @@ failed:
 
 static void handle_server_stop_service(const void *buf, uint16_t len)
 {
+	const struct hal_cmd_gatt_server_stop_service *cmd = buf;
+	struct gatt_server *server;
+	uint8_t status;
+
 	DBG("");
 
+	server = find_server_by_id(cmd->server_if);
+
+	if (!server) {
+		error("gatt: server_if=%d not found", cmd->server_if);
+		status = HAL_STATUS_FAILED;
+		goto failed;
+	}
+
+	status = HAL_STATUS_SUCCESS;
+
+	/* TODO: stop service in attribute database */
+	DBG("Stop service: server: %d, srvc_hnd: %d", cmd->server_if,
+							cmd->service_handle);
+
+failed:
 	ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT,
-			HAL_OP_GATT_SERVER_STOP_SERVICE, HAL_STATUS_FAILED);
+				HAL_OP_GATT_SERVER_STOP_SERVICE, status);
 }
 
 static void handle_server_delete_service(const void *buf, uint16_t len)
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 8/8] android/gatt: Add Server's delete_service stub
  2014-04-11 13:15 [PATCH 0/8] android/gatt: Server command handlers Jakub Tyszkowski
                   ` (6 preceding siblings ...)
  2014-04-11 13:15 ` [PATCH 7/8] android/gatt: Add Server's stop_service stub Jakub Tyszkowski
@ 2014-04-11 13:15 ` Jakub Tyszkowski
  2014-04-16  8:25 ` [PATCH 0/8] android/gatt: Server command handlers Szymon Janc
  8 siblings, 0 replies; 10+ messages in thread
From: Jakub Tyszkowski @ 2014-04-11 13:15 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Jakub Tyszkowski

---
 android/gatt.c | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/android/gatt.c b/android/gatt.c
index 150bccb..dc49411 100644
--- a/android/gatt.c
+++ b/android/gatt.c
@@ -2927,10 +2927,29 @@ failed:
 
 static void handle_server_delete_service(const void *buf, uint16_t len)
 {
+	const struct hal_cmd_gatt_server_delete_service *cmd = buf;
+	struct gatt_server *server;
+	uint8_t status;
+
 	DBG("");
 
+	server = find_server_by_id(cmd->server_if);
+
+	if (!server) {
+		error("gatt: server_if=%d not found", cmd->server_if);
+		status = HAL_STATUS_FAILED;
+		goto failed;
+	}
+
+	/* TODO: delete service from attribute database */
+	DBG("Delete service: server: %d, srvc_hnd: %d", cmd->server_if,
+							cmd->service_handle);
+
+	status = HAL_STATUS_SUCCESS;
+
+failed:
 	ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_GATT,
-			HAL_OP_GATT_SERVER_DELETE_SERVICE, HAL_STATUS_FAILED);
+				HAL_OP_GATT_SERVER_DELETE_SERVICE, status);
 }
 
 static void handle_server_send_indication(const void *buf, uint16_t len)
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH 0/8] android/gatt: Server command handlers
  2014-04-11 13:15 [PATCH 0/8] android/gatt: Server command handlers Jakub Tyszkowski
                   ` (7 preceding siblings ...)
  2014-04-11 13:15 ` [PATCH 8/8] android/gatt: Add Server's delete_service stub Jakub Tyszkowski
@ 2014-04-16  8:25 ` Szymon Janc
  8 siblings, 0 replies; 10+ messages in thread
From: Szymon Janc @ 2014-04-16  8:25 UTC (permalink / raw)
  To: Jakub Tyszkowski; +Cc: linux-bluetooth

Hi Jakub,

On Friday 11 of April 2014 15:15:11 Jakub Tyszkowski wrote:
> This adds stubs for handling GATT Server's attribute database operations.
> If attribute database API is accepted in proposed state, we will just need to
> trigger db transactions and send proper notifications.
> 
> Jakub Tyszkowski (8):
>   android/gatt: Add find_server_by_id helper
>   android/gatt: Add Server's add_service stub
>   android/gatt: Add Server's add_included_service stub
>   android/gatt: Add Server's add_characteristic stub
>   android/gatt: Add Server's add_descriptor stub
>   android/gatt: Add Server's start_service stub
>   android/gatt: Add Server's stop_service stub
>   android/gatt: Add Server's delete_service stub
> 
>  android/gatt.c | 174 +++++++++++++++++++++++++++++++++++++++++++++++++++++----
>  1 file changed, 164 insertions(+), 10 deletions(-)
> 
> --
> 1.9.1
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

All patches applied, thanks.

-- 
Best regards, 
Szymon Janc

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2014-04-16  8:25 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-04-11 13:15 [PATCH 0/8] android/gatt: Server command handlers Jakub Tyszkowski
2014-04-11 13:15 ` [PATCH 1/8] android/gatt: Add find_server_by_id helper Jakub Tyszkowski
2014-04-11 13:15 ` [PATCH 2/8] android/gatt: Add Server's add_service stub Jakub Tyszkowski
2014-04-11 13:15 ` [PATCH 3/8] android/gatt: Add Server's add_included_service stub Jakub Tyszkowski
2014-04-11 13:15 ` [PATCH 4/8] android/gatt: Add Server's add_characteristic stub Jakub Tyszkowski
2014-04-11 13:15 ` [PATCH 5/8] android/gatt: Add Server's add_descriptor stub Jakub Tyszkowski
2014-04-11 13:15 ` [PATCH 6/8] android/gatt: Add Server's start_service stub Jakub Tyszkowski
2014-04-11 13:15 ` [PATCH 7/8] android/gatt: Add Server's stop_service stub Jakub Tyszkowski
2014-04-11 13:15 ` [PATCH 8/8] android/gatt: Add Server's delete_service stub Jakub Tyszkowski
2014-04-16  8:25 ` [PATCH 0/8] android/gatt: Server command handlers Szymon Janc

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.