* [PATCH] android/scpp: Simplify requests queueing
@ 2014-12-22 17:20 Szymon Janc
2014-12-23 13:44 ` Szymon Janc
0 siblings, 1 reply; 2+ messages in thread
From: Szymon Janc @ 2014-12-22 17:20 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
There is no need to use request structure for tracking queue since
we only need id.
---
android/scpp.c | 99 ++++++++++------------------------------------------------
1 file changed, 17 insertions(+), 82 deletions(-)
diff --git a/android/scpp.c b/android/scpp.c
index 77f48cd..1d5bf7c 100644
--- a/android/scpp.c
+++ b/android/scpp.c
@@ -62,84 +62,35 @@ struct bt_scpp {
struct queue *gatt_op;
};
-struct gatt_request {
- unsigned int id;
- struct bt_scpp *scpp;
- void *user_data;
-};
-
-static void destroy_gatt_req(struct gatt_request *req)
-{
- queue_remove(req->scpp->gatt_op, req);
- bt_scpp_unref(req->scpp);
- free(req);
-}
-
-static struct gatt_request *create_request(struct bt_scpp *scpp,
- void *user_data)
-{
- struct gatt_request *req;
-
- DBG("");
-
- req = new0(struct gatt_request, 1);
- if (!req)
- return NULL;
-
- req->user_data = user_data;
- req->scpp = bt_scpp_ref(scpp);
-
- return req;
-}
-
-static bool set_and_store_gatt_req(struct bt_scpp *scpp,
- struct gatt_request *req,
- unsigned int id)
-{
- req->id = id;
- return queue_push_head(scpp->gatt_op, req);
-}
-
static void discover_char(struct bt_scpp *scpp, GAttrib *attrib,
uint16_t start, uint16_t end,
bt_uuid_t *uuid, gatt_cb_t func,
gpointer user_data)
{
- struct gatt_request *req;
unsigned int id;
- req = create_request(scpp, user_data);
- if (!req)
- return;
-
- id = gatt_discover_char(attrib, start, end, uuid, func, req);
+ id = gatt_discover_char(attrib, start, end, uuid, func, user_data);
- if (set_and_store_gatt_req(scpp, req, id))
+ if (queue_push_head(scpp->gatt_op, UINT_TO_PTR(id)))
return;
error("scpp: Could not discover characteristic");
g_attrib_cancel(attrib, id);
- free(req);
}
static void discover_desc(struct bt_scpp *scpp, GAttrib *attrib,
uint16_t start, uint16_t end, bt_uuid_t *uuid,
gatt_cb_t func, gpointer user_data)
{
- struct gatt_request *req;
unsigned int id;
- req = create_request(scpp, user_data);
- if (!req)
- return;
+ id = gatt_discover_desc(attrib, start, end, uuid, func, user_data);
- id = gatt_discover_desc(attrib, start, end, uuid, func, req);
- if (set_and_store_gatt_req(scpp, req, id))
+ if (queue_push_head(scpp->gatt_op, UINT_TO_PTR(id)))
return;
error("scpp: Could not discover descriptor");
g_attrib_cancel(attrib, id);
- free(req);
}
static void write_char(struct bt_scpp *scan, GAttrib *attrib, uint16_t handle,
@@ -147,21 +98,15 @@ static void write_char(struct bt_scpp *scan, GAttrib *attrib, uint16_t handle,
GAttribResultFunc func,
gpointer user_data)
{
- struct gatt_request *req;
unsigned int id;
- req = create_request(scan, user_data);
- if (!req)
- return;
-
- id = gatt_write_char(attrib, handle, value, vlen, func, req);
+ id = gatt_write_char(attrib, handle, value, vlen, func, user_data);
- if (set_and_store_gatt_req(scan, req, id))
+ if (queue_push_head(scan->gatt_op, UINT_TO_PTR(id)))
return;
error("scpp: Could not read char");
g_attrib_cancel(attrib, id);
- free(req);
}
static void scpp_free(struct bt_scpp *scan)
@@ -169,7 +114,7 @@ static void scpp_free(struct bt_scpp *scan)
bt_scpp_detach(scan);
g_free(scan->primary);
- queue_destroy(scan->gatt_op, (void *) destroy_gatt_req);
+ queue_destroy(scan->gatt_op, NULL); /* cleared in bt_scpp_detach */
g_free(scan);
}
@@ -243,10 +188,7 @@ static void refresh_value_cb(const uint8_t *pdu, uint16_t len,
static void ccc_written_cb(guint8 status, const guint8 *pdu,
guint16 plen, gpointer user_data)
{
- struct gatt_request *req = user_data;
- struct bt_scpp *scan = req->user_data;
-
- destroy_gatt_req(req);
+ struct bt_scpp *scan = user_data;
if (status != 0) {
error("Write Scan Refresh CCC failed: %s",
@@ -275,12 +217,9 @@ static void write_ccc(struct bt_scpp *scan, GAttrib *attrib, uint16_t handle,
static void discover_descriptor_cb(uint8_t status, GSList *descs,
void *user_data)
{
- struct gatt_request *req = user_data;
- struct bt_scpp *scan = req->user_data;
+ struct bt_scpp *scan = user_data;
struct gatt_desc *desc;
- destroy_gatt_req(req);
-
if (status != 0) {
error("Discover descriptors failed: %s", att_ecode2str(status));
return;
@@ -295,14 +234,11 @@ static void discover_descriptor_cb(uint8_t status, GSList *descs,
static void refresh_discovered_cb(uint8_t status, GSList *chars,
void *user_data)
{
- struct gatt_request *req = user_data;
- struct bt_scpp *scan = req->user_data;
+ struct bt_scpp *scan = user_data;
struct gatt_char *chr;
uint16_t start, end;
bt_uuid_t uuid;
- destroy_gatt_req(req);
-
if (status) {
error("Scan Refresh %s", att_ecode2str(status));
return;
@@ -333,12 +269,9 @@ static void refresh_discovered_cb(uint8_t status, GSList *chars,
static void iwin_discovered_cb(uint8_t status, GSList *chars, void *user_data)
{
- struct gatt_request *req = user_data;
- struct bt_scpp *scan = req->user_data;
+ struct bt_scpp *scan = user_data;
struct gatt_char *chr;
- destroy_gatt_req(req);
-
if (status) {
error("Discover Scan Interval Window: %s",
att_ecode2str(status));
@@ -387,10 +320,12 @@ bool bt_scpp_attach(struct bt_scpp *scan, void *attrib)
return true;
}
-static void cancel_gatt_req(struct gatt_request *req)
+static void cancel_gatt_req(void *data, void *user_data)
{
- if (g_attrib_cancel(req->scpp->attrib, req->id))
- destroy_gatt_req(req);
+ unsigned int id = PTR_TO_UINT(data);
+ struct bt_scpp *scan = user_data;
+
+ g_attrib_cancel(scan->attrib, id);
}
void bt_scpp_detach(struct bt_scpp *scan)
@@ -403,7 +338,7 @@ void bt_scpp_detach(struct bt_scpp *scan)
scan->refresh_cb_id = 0;
}
- queue_foreach(scan->gatt_op, (void *) cancel_gatt_req, NULL);
+ queue_foreach(scan->gatt_op, cancel_gatt_req, scan);
g_attrib_unref(scan->attrib);
scan->attrib = NULL;
}
--
1.9.3
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] android/scpp: Simplify requests queueing
2014-12-22 17:20 [PATCH] android/scpp: Simplify requests queueing Szymon Janc
@ 2014-12-23 13:44 ` Szymon Janc
0 siblings, 0 replies; 2+ messages in thread
From: Szymon Janc @ 2014-12-23 13:44 UTC (permalink / raw)
To: linux-bluetooth
On Monday 22 of December 2014 18:20:40 Szymon Janc wrote:
> There is no need to use request structure for tracking queue since
> we only need id.
> ---
> android/scpp.c | 99
> ++++++++++------------------------------------------------ 1 file changed,
> 17 insertions(+), 82 deletions(-)
>
> diff --git a/android/scpp.c b/android/scpp.c
> index 77f48cd..1d5bf7c 100644
> --- a/android/scpp.c
> +++ b/android/scpp.c
> @@ -62,84 +62,35 @@ struct bt_scpp {
> struct queue *gatt_op;
> };
>
> -struct gatt_request {
> - unsigned int id;
> - struct bt_scpp *scpp;
> - void *user_data;
> -};
> -
> -static void destroy_gatt_req(struct gatt_request *req)
> -{
> - queue_remove(req->scpp->gatt_op, req);
> - bt_scpp_unref(req->scpp);
> - free(req);
> -}
> -
> -static struct gatt_request *create_request(struct bt_scpp *scpp,
> - void *user_data)
> -{
> - struct gatt_request *req;
> -
> - DBG("");
> -
> - req = new0(struct gatt_request, 1);
> - if (!req)
> - return NULL;
> -
> - req->user_data = user_data;
> - req->scpp = bt_scpp_ref(scpp);
> -
> - return req;
> -}
> -
> -static bool set_and_store_gatt_req(struct bt_scpp *scpp,
> - struct gatt_request *req,
> - unsigned int id)
> -{
> - req->id = id;
> - return queue_push_head(scpp->gatt_op, req);
> -}
> -
> static void discover_char(struct bt_scpp *scpp, GAttrib *attrib,
> uint16_t start, uint16_t end,
> bt_uuid_t *uuid, gatt_cb_t func,
> gpointer user_data)
> {
> - struct gatt_request *req;
> unsigned int id;
>
> - req = create_request(scpp, user_data);
> - if (!req)
> - return;
> -
> - id = gatt_discover_char(attrib, start, end, uuid, func, req);
> + id = gatt_discover_char(attrib, start, end, uuid, func, user_data);
>
> - if (set_and_store_gatt_req(scpp, req, id))
> + if (queue_push_head(scpp->gatt_op, UINT_TO_PTR(id)))
> return;
>
> error("scpp: Could not discover characteristic");
> g_attrib_cancel(attrib, id);
> - free(req);
> }
>
> static void discover_desc(struct bt_scpp *scpp, GAttrib *attrib,
> uint16_t start, uint16_t end, bt_uuid_t *uuid,
> gatt_cb_t func, gpointer user_data)
> {
> - struct gatt_request *req;
> unsigned int id;
>
> - req = create_request(scpp, user_data);
> - if (!req)
> - return;
> + id = gatt_discover_desc(attrib, start, end, uuid, func, user_data);
>
> - id = gatt_discover_desc(attrib, start, end, uuid, func, req);
> - if (set_and_store_gatt_req(scpp, req, id))
> + if (queue_push_head(scpp->gatt_op, UINT_TO_PTR(id)))
> return;
>
> error("scpp: Could not discover descriptor");
> g_attrib_cancel(attrib, id);
> - free(req);
> }
>
> static void write_char(struct bt_scpp *scan, GAttrib *attrib, uint16_t
> handle, @@ -147,21 +98,15 @@ static void write_char(struct bt_scpp *scan,
> GAttrib *attrib, uint16_t handle, GAttribResultFunc func,
> gpointer user_data)
> {
> - struct gatt_request *req;
> unsigned int id;
>
> - req = create_request(scan, user_data);
> - if (!req)
> - return;
> -
> - id = gatt_write_char(attrib, handle, value, vlen, func, req);
> + id = gatt_write_char(attrib, handle, value, vlen, func, user_data);
>
> - if (set_and_store_gatt_req(scan, req, id))
> + if (queue_push_head(scan->gatt_op, UINT_TO_PTR(id)))
> return;
>
> error("scpp: Could not read char");
> g_attrib_cancel(attrib, id);
> - free(req);
> }
>
> static void scpp_free(struct bt_scpp *scan)
> @@ -169,7 +114,7 @@ static void scpp_free(struct bt_scpp *scan)
> bt_scpp_detach(scan);
>
> g_free(scan->primary);
> - queue_destroy(scan->gatt_op, (void *) destroy_gatt_req);
> + queue_destroy(scan->gatt_op, NULL); /* cleared in bt_scpp_detach */
> g_free(scan);
> }
>
> @@ -243,10 +188,7 @@ static void refresh_value_cb(const uint8_t *pdu,
> uint16_t len, static void ccc_written_cb(guint8 status, const guint8 *pdu,
> guint16 plen, gpointer user_data)
> {
> - struct gatt_request *req = user_data;
> - struct bt_scpp *scan = req->user_data;
> -
> - destroy_gatt_req(req);
> + struct bt_scpp *scan = user_data;
>
> if (status != 0) {
> error("Write Scan Refresh CCC failed: %s",
> @@ -275,12 +217,9 @@ static void write_ccc(struct bt_scpp *scan, GAttrib
> *attrib, uint16_t handle, static void discover_descriptor_cb(uint8_t
> status, GSList *descs, void *user_data)
> {
> - struct gatt_request *req = user_data;
> - struct bt_scpp *scan = req->user_data;
> + struct bt_scpp *scan = user_data;
> struct gatt_desc *desc;
>
> - destroy_gatt_req(req);
> -
> if (status != 0) {
> error("Discover descriptors failed: %s", att_ecode2str(status));
> return;
> @@ -295,14 +234,11 @@ static void discover_descriptor_cb(uint8_t status,
> GSList *descs, static void refresh_discovered_cb(uint8_t status, GSList
> *chars,
> void *user_data)
> {
> - struct gatt_request *req = user_data;
> - struct bt_scpp *scan = req->user_data;
> + struct bt_scpp *scan = user_data;
> struct gatt_char *chr;
> uint16_t start, end;
> bt_uuid_t uuid;
>
> - destroy_gatt_req(req);
> -
> if (status) {
> error("Scan Refresh %s", att_ecode2str(status));
> return;
> @@ -333,12 +269,9 @@ static void refresh_discovered_cb(uint8_t status,
> GSList *chars,
>
> static void iwin_discovered_cb(uint8_t status, GSList *chars, void
> *user_data) {
> - struct gatt_request *req = user_data;
> - struct bt_scpp *scan = req->user_data;
> + struct bt_scpp *scan = user_data;
> struct gatt_char *chr;
>
> - destroy_gatt_req(req);
> -
> if (status) {
> error("Discover Scan Interval Window: %s",
> att_ecode2str(status));
> @@ -387,10 +320,12 @@ bool bt_scpp_attach(struct bt_scpp *scan, void
> *attrib) return true;
> }
>
> -static void cancel_gatt_req(struct gatt_request *req)
> +static void cancel_gatt_req(void *data, void *user_data)
> {
> - if (g_attrib_cancel(req->scpp->attrib, req->id))
> - destroy_gatt_req(req);
> + unsigned int id = PTR_TO_UINT(data);
> + struct bt_scpp *scan = user_data;
> +
> + g_attrib_cancel(scan->attrib, id);
> }
>
> void bt_scpp_detach(struct bt_scpp *scan)
> @@ -403,7 +338,7 @@ void bt_scpp_detach(struct bt_scpp *scan)
> scan->refresh_cb_id = 0;
> }
>
> - queue_foreach(scan->gatt_op, (void *) cancel_gatt_req, NULL);
> + queue_foreach(scan->gatt_op, cancel_gatt_req, scan);
> g_attrib_unref(scan->attrib);
> scan->attrib = NULL;
> }
Applied.
--
BR
Szymon Janc
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2014-12-23 13:44 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-12-22 17:20 [PATCH] android/scpp: Simplify requests queueing Szymon Janc
2014-12-23 13:44 ` 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).