* [PATCH] android/health: Provide a helper funtion to search channel by id @ 2014-06-24 11:22 Ravi kumar Veeramally 2014-06-24 12:17 ` Andrei Emeltchenko 0 siblings, 1 reply; 5+ messages in thread From: Ravi kumar Veeramally @ 2014-06-24 11:22 UTC (permalink / raw) To: linux-bluetooth; +Cc: Ravi kumar Veeramally --- android/health.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/android/health.c b/android/health.c index f45ae51..4ddcad2 100644 --- a/android/health.c +++ b/android/health.c @@ -115,6 +115,12 @@ struct health_app { struct queue *devices; }; +/* helper structs */ +struct channel_search { + uint16_t channel_id; + struct health_channel *channel; +}; + static void send_app_reg_notify(struct health_app *app, uint8_t state) { struct hal_ev_health_app_reg_state ev; @@ -237,6 +243,14 @@ static bool dev_by_addr(const void *data, const void *user_data) return !bacmp(&dev->dst, addr); } +static bool channel_by_channel_id(const void *data, const void *user_data) +{ + const struct health_channel *channel = data; + uint16_t channel_id = PTR_TO_INT(user_data); + + return channel->id == channel_id; +} + static bool channel_by_mdep_id(const void *data, const void *user_data) { const struct health_channel *channel = data; @@ -269,6 +283,42 @@ static bool app_by_app_id(const void *data, const void *user_data) return app->id == app_id; } +static void device_search_channel(void *data, void *user_data) +{ + struct health_device *dev = data; + struct channel_search *search = user_data; + + if (search->channel) + return; + + search->channel = queue_find(dev->channels, channel_by_channel_id, + INT_TO_PTR(search->channel_id)); +} + +static void app_search_channel(void *data, void *user_data) +{ + struct health_app *app = data; + struct channel_search *search = user_data; + + if (search->channel) + return; + + queue_foreach(app->devices, device_search_channel, search); +} + +static struct health_channel *search_channel_by_id(uint16_t id) +{ + struct channel_search search; + + DBG(""); + + search.channel_id = id; + search.channel = NULL; + queue_foreach(apps, app_search_channel, &search); + + return search.channel; +} + static int register_service_protocols(sdp_record_t *rec, struct health_app *app) { @@ -1459,6 +1509,7 @@ static struct health_channel *get_channel(uint16_t app_id, return create_channel(app_id, mdep_index, dev); } + static void bt_health_connect_channel(const void *buf, uint16_t len) { const struct hal_cmd_health_connect_channel *cmd = buf; @@ -1512,10 +1563,23 @@ fail: static void bt_health_destroy_channel(const void *buf, uint16_t len) { - DBG("Not implemented"); + const struct hal_cmd_health_destroy_channel *cmd = buf; + struct health_channel *channel; + + DBG("Not Implemented"); + + channel = search_channel_by_id(cmd->channel_id); + if (!channel) + goto fail; ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_HEALTH, HAL_OP_HEALTH_DESTROY_CHANNEL, HAL_STATUS_UNSUPPORTED); + + return; + +fail: + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_HEALTH, + HAL_OP_HEALTH_DESTROY_CHANNEL, HAL_STATUS_INVALID); } static const struct ipc_handler cmd_handlers[] = { -- 1.9.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] android/health: Provide a helper funtion to search channel by id 2014-06-24 11:22 [PATCH] android/health: Provide a helper funtion to search channel by id Ravi kumar Veeramally @ 2014-06-24 12:17 ` Andrei Emeltchenko 2014-06-24 12:32 ` Ravi kumar Veeramally 0 siblings, 1 reply; 5+ messages in thread From: Andrei Emeltchenko @ 2014-06-24 12:17 UTC (permalink / raw) To: Ravi kumar Veeramally; +Cc: linux-bluetooth Hi Ravi, On Tue, Jun 24, 2014 at 02:22:26PM +0300, Ravi kumar Veeramally wrote: > --- > android/health.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 65 insertions(+), 1 deletion(-) > > diff --git a/android/health.c b/android/health.c > index f45ae51..4ddcad2 100644 > --- a/android/health.c > +++ b/android/health.c > @@ -115,6 +115,12 @@ struct health_app { > struct queue *devices; > }; > > +/* helper structs */ > +struct channel_search { > + uint16_t channel_id; > + struct health_channel *channel; > +}; > + > static void send_app_reg_notify(struct health_app *app, uint8_t state) > { > struct hal_ev_health_app_reg_state ev; > @@ -237,6 +243,14 @@ static bool dev_by_addr(const void *data, const void *user_data) > return !bacmp(&dev->dst, addr); > } > > +static bool channel_by_channel_id(const void *data, const void *user_data) Should this be cmp_by_channel_id() ? Best regards Andrei Emeltchenko > +{ > + const struct health_channel *channel = data; > + uint16_t channel_id = PTR_TO_INT(user_data); > + > + return channel->id == channel_id; > +} > + > static bool channel_by_mdep_id(const void *data, const void *user_data) > { > const struct health_channel *channel = data; > @@ -269,6 +283,42 @@ static bool app_by_app_id(const void *data, const void *user_data) > return app->id == app_id; > } > > +static void device_search_channel(void *data, void *user_data) > +{ > + struct health_device *dev = data; > + struct channel_search *search = user_data; > + > + if (search->channel) > + return; > + > + search->channel = queue_find(dev->channels, channel_by_channel_id, > + INT_TO_PTR(search->channel_id)); > +} > + > +static void app_search_channel(void *data, void *user_data) > +{ > + struct health_app *app = data; > + struct channel_search *search = user_data; > + > + if (search->channel) > + return; > + > + queue_foreach(app->devices, device_search_channel, search); > +} > + > +static struct health_channel *search_channel_by_id(uint16_t id) > +{ > + struct channel_search search; > + > + DBG(""); > + > + search.channel_id = id; > + search.channel = NULL; > + queue_foreach(apps, app_search_channel, &search); > + > + return search.channel; > +} > + > static int register_service_protocols(sdp_record_t *rec, > struct health_app *app) > { > @@ -1459,6 +1509,7 @@ static struct health_channel *get_channel(uint16_t app_id, > > return create_channel(app_id, mdep_index, dev); > } > + > static void bt_health_connect_channel(const void *buf, uint16_t len) > { > const struct hal_cmd_health_connect_channel *cmd = buf; > @@ -1512,10 +1563,23 @@ fail: > > static void bt_health_destroy_channel(const void *buf, uint16_t len) > { > - DBG("Not implemented"); > + const struct hal_cmd_health_destroy_channel *cmd = buf; > + struct health_channel *channel; > + > + DBG("Not Implemented"); > + > + channel = search_channel_by_id(cmd->channel_id); > + if (!channel) > + goto fail; > > ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_HEALTH, > HAL_OP_HEALTH_DESTROY_CHANNEL, HAL_STATUS_UNSUPPORTED); > + > + return; > + > +fail: > + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_HEALTH, > + HAL_OP_HEALTH_DESTROY_CHANNEL, HAL_STATUS_INVALID); > } > > static const struct ipc_handler cmd_handlers[] = { > -- > 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 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] android/health: Provide a helper funtion to search channel by id 2014-06-24 12:17 ` Andrei Emeltchenko @ 2014-06-24 12:32 ` Ravi kumar Veeramally 2014-06-24 12:48 ` Andrei Emeltchenko 0 siblings, 1 reply; 5+ messages in thread From: Ravi kumar Veeramally @ 2014-06-24 12:32 UTC (permalink / raw) To: Andrei Emeltchenko, linux-bluetooth Hi Andrei, On 06/24/2014 03:17 PM, Andrei Emeltchenko wrote: > Hi Ravi, > > On Tue, Jun 24, 2014 at 02:22:26PM +0300, Ravi kumar Veeramally wrote: >> --- >> android/health.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- >> 1 file changed, 65 insertions(+), 1 deletion(-) >> >> diff --git a/android/health.c b/android/health.c >> index f45ae51..4ddcad2 100644 >> --- a/android/health.c >> +++ b/android/health.c >> @@ -115,6 +115,12 @@ struct health_app { >> struct queue *devices; >> }; >> >> +/* helper structs */ >> +struct channel_search { >> + uint16_t channel_id; >> + struct health_channel *channel; >> +}; >> + >> static void send_app_reg_notify(struct health_app *app, uint8_t state) >> { >> struct hal_ev_health_app_reg_state ev; >> @@ -237,6 +243,14 @@ static bool dev_by_addr(const void *data, const void *user_data) >> return !bacmp(&dev->dst, addr); >> } >> >> +static bool channel_by_channel_id(const void *data, const void *user_data) > Should this be cmp_by_channel_id() ? For other api's, it is dev_by_addr, channel_by_mdep_id, mdep_by_mdep_role, app_by_app_id. so continued in similar way (channel_by_channel_id). Thanks, Ravi. > Best regards > Andrei Emeltchenko > >> +{ >> + const struct health_channel *channel = data; >> + uint16_t channel_id = PTR_TO_INT(user_data); >> + >> + return channel->id == channel_id; >> +} >> + >> static bool channel_by_mdep_id(const void *data, const void *user_data) >> { >> const struct health_channel *channel = data; >> @@ -269,6 +283,42 @@ static bool app_by_app_id(const void *data, const void *user_data) >> return app->id == app_id; >> } >> >> +static void device_search_channel(void *data, void *user_data) >> +{ >> + struct health_device *dev = data; >> + struct channel_search *search = user_data; >> + >> + if (search->channel) >> + return; >> + >> + search->channel = queue_find(dev->channels, channel_by_channel_id, >> + INT_TO_PTR(search->channel_id)); >> +} >> + >> +static void app_search_channel(void *data, void *user_data) >> +{ >> + struct health_app *app = data; >> + struct channel_search *search = user_data; >> + >> + if (search->channel) >> + return; >> + >> + queue_foreach(app->devices, device_search_channel, search); >> +} >> + >> +static struct health_channel *search_channel_by_id(uint16_t id) >> +{ >> + struct channel_search search; >> + >> + DBG(""); >> + >> + search.channel_id = id; >> + search.channel = NULL; >> + queue_foreach(apps, app_search_channel, &search); >> + >> + return search.channel; >> +} >> + >> static int register_service_protocols(sdp_record_t *rec, >> struct health_app *app) >> { >> @@ -1459,6 +1509,7 @@ static struct health_channel *get_channel(uint16_t app_id, >> >> return create_channel(app_id, mdep_index, dev); >> } >> + >> static void bt_health_connect_channel(const void *buf, uint16_t len) >> { >> const struct hal_cmd_health_connect_channel *cmd = buf; >> @@ -1512,10 +1563,23 @@ fail: >> >> static void bt_health_destroy_channel(const void *buf, uint16_t len) >> { >> - DBG("Not implemented"); >> + const struct hal_cmd_health_destroy_channel *cmd = buf; >> + struct health_channel *channel; >> + >> + DBG("Not Implemented"); >> + >> + channel = search_channel_by_id(cmd->channel_id); >> + if (!channel) >> + goto fail; >> >> ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_HEALTH, >> HAL_OP_HEALTH_DESTROY_CHANNEL, HAL_STATUS_UNSUPPORTED); >> + >> + return; >> + >> +fail: >> + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_HEALTH, >> + HAL_OP_HEALTH_DESTROY_CHANNEL, HAL_STATUS_INVALID); >> } >> >> static const struct ipc_handler cmd_handlers[] = { >> -- >> 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 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] android/health: Provide a helper funtion to search channel by id 2014-06-24 12:32 ` Ravi kumar Veeramally @ 2014-06-24 12:48 ` Andrei Emeltchenko 2014-06-24 13:00 ` Ravi kumar Veeramally 0 siblings, 1 reply; 5+ messages in thread From: Andrei Emeltchenko @ 2014-06-24 12:48 UTC (permalink / raw) To: Ravi kumar Veeramally; +Cc: linux-bluetooth Hi Ravi, On Tue, Jun 24, 2014 at 03:32:48PM +0300, Ravi kumar Veeramally wrote: > Hi Andrei, > > On 06/24/2014 03:17 PM, Andrei Emeltchenko wrote: > >Hi Ravi, > > > >On Tue, Jun 24, 2014 at 02:22:26PM +0300, Ravi kumar Veeramally wrote: > >>--- > >> android/health.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- > >> 1 file changed, 65 insertions(+), 1 deletion(-) > >> > >>diff --git a/android/health.c b/android/health.c > >>index f45ae51..4ddcad2 100644 > >>--- a/android/health.c > >>+++ b/android/health.c > >>@@ -115,6 +115,12 @@ struct health_app { > >> struct queue *devices; > >> }; > >>+/* helper structs */ > >>+struct channel_search { > >>+ uint16_t channel_id; > >>+ struct health_channel *channel; > >>+}; > >>+ > >> static void send_app_reg_notify(struct health_app *app, uint8_t state) > >> { > >> struct hal_ev_health_app_reg_state ev; > >>@@ -237,6 +243,14 @@ static bool dev_by_addr(const void *data, const void *user_data) > >> return !bacmp(&dev->dst, addr); > >> } > >>+static bool channel_by_channel_id(const void *data, const void *user_data) > >Should this be cmp_by_channel_id() ? > For other api's, it is > dev_by_addr, channel_by_mdep_id, mdep_by_mdep_role, app_by_app_id. > so continued in similar way (channel_by_channel_id). This also looks a bit strange, are those cmp_* functions as well? Best regards Andrei Emeltchenko > > Thanks, > Ravi. > > >Best regards > >Andrei Emeltchenko > > > >>+{ > >>+ const struct health_channel *channel = data; > >>+ uint16_t channel_id = PTR_TO_INT(user_data); > >>+ > >>+ return channel->id == channel_id; > >>+} > >>+ > >> static bool channel_by_mdep_id(const void *data, const void *user_data) > >> { > >> const struct health_channel *channel = data; > >>@@ -269,6 +283,42 @@ static bool app_by_app_id(const void *data, const void *user_data) > >> return app->id == app_id; > >> } > >>+static void device_search_channel(void *data, void *user_data) > >>+{ > >>+ struct health_device *dev = data; > >>+ struct channel_search *search = user_data; > >>+ > >>+ if (search->channel) > >>+ return; > >>+ > >>+ search->channel = queue_find(dev->channels, channel_by_channel_id, > >>+ INT_TO_PTR(search->channel_id)); > >>+} > >>+ > >>+static void app_search_channel(void *data, void *user_data) > >>+{ > >>+ struct health_app *app = data; > >>+ struct channel_search *search = user_data; > >>+ > >>+ if (search->channel) > >>+ return; > >>+ > >>+ queue_foreach(app->devices, device_search_channel, search); > >>+} > >>+ > >>+static struct health_channel *search_channel_by_id(uint16_t id) > >>+{ > >>+ struct channel_search search; > >>+ > >>+ DBG(""); > >>+ > >>+ search.channel_id = id; > >>+ search.channel = NULL; > >>+ queue_foreach(apps, app_search_channel, &search); > >>+ > >>+ return search.channel; > >>+} > >>+ > >> static int register_service_protocols(sdp_record_t *rec, > >> struct health_app *app) > >> { > >>@@ -1459,6 +1509,7 @@ static struct health_channel *get_channel(uint16_t app_id, > >> return create_channel(app_id, mdep_index, dev); > >> } > >>+ > >> static void bt_health_connect_channel(const void *buf, uint16_t len) > >> { > >> const struct hal_cmd_health_connect_channel *cmd = buf; > >>@@ -1512,10 +1563,23 @@ fail: > >> static void bt_health_destroy_channel(const void *buf, uint16_t len) > >> { > >>- DBG("Not implemented"); > >>+ const struct hal_cmd_health_destroy_channel *cmd = buf; > >>+ struct health_channel *channel; > >>+ > >>+ DBG("Not Implemented"); > >>+ > >>+ channel = search_channel_by_id(cmd->channel_id); > >>+ if (!channel) > >>+ goto fail; > >> ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_HEALTH, > >> HAL_OP_HEALTH_DESTROY_CHANNEL, HAL_STATUS_UNSUPPORTED); > >>+ > >>+ return; > >>+ > >>+fail: > >>+ ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_HEALTH, > >>+ HAL_OP_HEALTH_DESTROY_CHANNEL, HAL_STATUS_INVALID); > >> } > >> static const struct ipc_handler cmd_handlers[] = { > >>-- > >>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 > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] android/health: Provide a helper funtion to search channel by id 2014-06-24 12:48 ` Andrei Emeltchenko @ 2014-06-24 13:00 ` Ravi kumar Veeramally 0 siblings, 0 replies; 5+ messages in thread From: Ravi kumar Veeramally @ 2014-06-24 13:00 UTC (permalink / raw) To: Andrei Emeltchenko, linux-bluetooth Hi Andrei, On 06/24/2014 03:48 PM, Andrei Emeltchenko wrote: > Hi Ravi, > > On Tue, Jun 24, 2014 at 03:32:48PM +0300, Ravi kumar Veeramally wrote: >> Hi Andrei, >> >> On 06/24/2014 03:17 PM, Andrei Emeltchenko wrote: >>> Hi Ravi, >>> >>> On Tue, Jun 24, 2014 at 02:22:26PM +0300, Ravi kumar Veeramally wrote: >>>> --- >>>> android/health.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- >>>> 1 file changed, 65 insertions(+), 1 deletion(-) >>>> >>>> diff --git a/android/health.c b/android/health.c >>>> index f45ae51..4ddcad2 100644 >>>> --- a/android/health.c >>>> +++ b/android/health.c >>>> @@ -115,6 +115,12 @@ struct health_app { >>>> struct queue *devices; >>>> }; >>>> +/* helper structs */ >>>> +struct channel_search { >>>> + uint16_t channel_id; >>>> + struct health_channel *channel; >>>> +}; >>>> + >>>> static void send_app_reg_notify(struct health_app *app, uint8_t state) >>>> { >>>> struct hal_ev_health_app_reg_state ev; >>>> @@ -237,6 +243,14 @@ static bool dev_by_addr(const void *data, const void *user_data) >>>> return !bacmp(&dev->dst, addr); >>>> } >>>> +static bool channel_by_channel_id(const void *data, const void *user_data) >>> Should this be cmp_by_channel_id() ? >> For other api's, it is >> dev_by_addr, channel_by_mdep_id, mdep_by_mdep_role, app_by_app_id. >> so continued in similar way (channel_by_channel_id). > This also looks a bit strange, are those cmp_* functions as well? Yes. we can change the names, if those are not suitable. Thanks, Ravi. > Best regards > Andrei Emeltchenko >> Thanks, >> Ravi. >> >>> Best regards >>> Andrei Emeltchenko >>> >>>> +{ >>>> + const struct health_channel *channel = data; >>>> + uint16_t channel_id = PTR_TO_INT(user_data); >>>> + >>>> + return channel->id == channel_id; >>>> +} >>>> + >>>> static bool channel_by_mdep_id(const void *data, const void *user_data) >>>> { >>>> const struct health_channel *channel = data; >>>> @@ -269,6 +283,42 @@ static bool app_by_app_id(const void *data, const void *user_data) >>>> return app->id == app_id; >>>> } >>>> +static void device_search_channel(void *data, void *user_data) >>>> +{ >>>> + struct health_device *dev = data; >>>> + struct channel_search *search = user_data; >>>> + >>>> + if (search->channel) >>>> + return; >>>> + >>>> + search->channel = queue_find(dev->channels, channel_by_channel_id, >>>> + INT_TO_PTR(search->channel_id)); >>>> +} >>>> + >>>> +static void app_search_channel(void *data, void *user_data) >>>> +{ >>>> + struct health_app *app = data; >>>> + struct channel_search *search = user_data; >>>> + >>>> + if (search->channel) >>>> + return; >>>> + >>>> + queue_foreach(app->devices, device_search_channel, search); >>>> +} >>>> + >>>> +static struct health_channel *search_channel_by_id(uint16_t id) >>>> +{ >>>> + struct channel_search search; >>>> + >>>> + DBG(""); >>>> + >>>> + search.channel_id = id; >>>> + search.channel = NULL; >>>> + queue_foreach(apps, app_search_channel, &search); >>>> + >>>> + return search.channel; >>>> +} >>>> + >>>> static int register_service_protocols(sdp_record_t *rec, >>>> struct health_app *app) >>>> { >>>> @@ -1459,6 +1509,7 @@ static struct health_channel *get_channel(uint16_t app_id, >>>> return create_channel(app_id, mdep_index, dev); >>>> } >>>> + >>>> static void bt_health_connect_channel(const void *buf, uint16_t len) >>>> { >>>> const struct hal_cmd_health_connect_channel *cmd = buf; >>>> @@ -1512,10 +1563,23 @@ fail: >>>> static void bt_health_destroy_channel(const void *buf, uint16_t len) >>>> { >>>> - DBG("Not implemented"); >>>> + const struct hal_cmd_health_destroy_channel *cmd = buf; >>>> + struct health_channel *channel; >>>> + >>>> + DBG("Not Implemented"); >>>> + >>>> + channel = search_channel_by_id(cmd->channel_id); >>>> + if (!channel) >>>> + goto fail; >>>> ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_HEALTH, >>>> HAL_OP_HEALTH_DESTROY_CHANNEL, HAL_STATUS_UNSUPPORTED); >>>> + >>>> + return; >>>> + >>>> +fail: >>>> + ipc_send_rsp(hal_ipc, HAL_SERVICE_ID_HEALTH, >>>> + HAL_OP_HEALTH_DESTROY_CHANNEL, HAL_STATUS_INVALID); >>>> } >>>> static const struct ipc_handler cmd_handlers[] = { >>>> -- >>>> 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 > -- > 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 > ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2014-06-24 13:00 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-06-24 11:22 [PATCH] android/health: Provide a helper funtion to search channel by id Ravi kumar Veeramally 2014-06-24 12:17 ` Andrei Emeltchenko 2014-06-24 12:32 ` Ravi kumar Veeramally 2014-06-24 12:48 ` Andrei Emeltchenko 2014-06-24 13:00 ` Ravi kumar Veeramally
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).